Gray-wolf 发表于 2018-6-2 17:10:16

端点对齐

;;端点对齐
(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) (< (cara)(car b)))))))
            ((= index 2) (setq vt (vl-sort vt (function (lambda (a b) (> (cara)(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 (carvt))) (cons 10 (carvt)) 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 (carvt)) (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

yoyoho 发表于 2018-6-4 07:44:37

谢谢! Gray-wolf 分享收藏了!!!!

yoyoho 发表于 2018-6-4 08:08:54

缺少自定义函数 EH-Get-EntDxfeh-ss-9pteh-ss->list
页: [1]
查看完整版本: 端点对齐