明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 654|回复: 2

[源码] 端点对齐

[复制链接]
发表于 2018-6-2 17:10 | 显示全部楼层 |阅读模式
;;端点对齐
(defun c:dddq (/ ent index ptd_y ptl_x ptr_x pts ptu_y ss ss_lst vt)
    (vl-load-com)   
    (setq eh-*error*-bak *error*)
    (defun *error* (msg)
        (setq *error* eh-*error*-bak)
        (setvar "osmode" eh_os_g)
        (vla-endundomark eh_doc_g)
        (setvar "nomutt" 0)
        (setvar "cmdecho" 1)
        (print msg)
    )
   
    (setvar "cmdecho" 0)
    (if (null eh_doc_g)(setq eh_doc_g (vla-get-activedocument (vlax-get-acad-object))))
    (vla-startundomark eh_doc_g)
    (if (< (setq eh_os_g (getvar "osmode")) 16384)
        (setvar "osmode" (+ eh_os_g 16384))
    )
   
    (princ "\n左右端拉长对齐--空格默认为左端对齐<1>--右端对齐<2>--上对齐<3>--下对齐<4>:")
    (initget 6)
    (setq index (getint))
    (if (or (null index)(= index 1))            
        (setq index 1)               
    )
    (print index)
    (setq ss (ssget '((0 . "LWPOLYLINE"))))
    (setq pts (eh-ss-9pt ss '(1 9)))
    (setq ss_lst (eh-ss->list ss))
    (setq
        ptl_x (car (nth 0 pts));左x
        ptr_x (car (nth 1 pts));右x
        ptd_y (cadr (nth 0 pts));下y
        ptu_y (cadr (nth 1 pts));上y
    )
    (foreach x ss_lst
        (setq ent (entget x))
        (setq vt (EH-Get-EntDxf x '10))        
        (cond
            ((= index 1) (setq vt (vl-sort vt (function (lambda (a b) (< (car  a)  (car b)))))))
            ((= index 2) (setq vt (vl-sort vt (function (lambda (a b) (> (car  a)  (car b)))))))
            ((= index 3) (setq vt (vl-sort vt (function (lambda (a b) (> (cadr a) (cadr b)))))))
            ((= index 4) (setq vt (vl-sort vt (function (lambda (a b) (< (cadr a) (cadr b)))))))
            (T nil)
        )
        (cond
            ((or (= index 1)(= index 2))
                (setq ent (subst (list 10 (if (= index 1) ptl_x ptr_x) (cadr (car  vt))) (cons 10 (car  vt)) ent))
                (setq ent (subst (list 10 (if (= index 1) ptl_x ptr_x) (cadr (cadr vt))) (cons 10 (cadr vt)) ent))                        
            )
            ((or (= index 3)(= index 4))
                (setq ent (subst (list 10 (car (car  vt)) (if (= index 3) ptu_y ptd_y)) (cons 10 (car vt)) ent))
                (setq ent (subst (list 10 (car (cadr vt)) (if (= index 3) ptu_y ptd_y)) (cons 10 (cadr vt)) ent))                    
            )
            (T nil)
        )
        (entmod ent) (entupd x)        
    )
    (setq *error* eh-*error*-bak)
    (setvar "osmode" eh_os_g)
    (vla-endundomark eh_doc_g)
    (setvar "nomutt" 0)
    (setvar "cmdecho" 1)   
    (princ)
);defun_end
发表于 2018-6-4 07:44 | 显示全部楼层
谢谢! Gray-wolf 分享收藏了!!!!
发表于 2018-6-4 08:08 | 显示全部楼层
缺少自定义函数 EH-Get-EntDxf  eh-ss-9pt  eh-ss->list
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-19 20:23 , Processed in 0.418488 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表