termal007 发表于 2022-7-6 07:19:06

如何在cad中排序?

你好
如您所见(附)在代码(层“C-Road-Ctn-Title”)下,一个区域(层“Area Block”)是我想要的一个订单,以保持这些数字的组合。
样本文件(附件)
 
我该怎么做?
样本2.dwg

Tharwat 发表于 2022-7-6 07:28:22

单独选择每列。
 

(defun c:Txtorder (/ ss i sn e l lst pts)
(vl-load-com)
(if (setq ss (ssget "_:L" '((0 . "*TEXT"))))
   (progn (repeat (setq i (sslength ss))
            (vla-put-alignment (vlax-ename->vla-object (setq sn (ssname ss (setq i (1- i))))) acAlignmentLeft)
            (if (numberp (read (cdr (assoc 1 (setq e (entget sn))))))
            (setq l (cons (list (cdr (assoc 1 e)) (cdr (assoc 10 e)) sn) l))
            )
          )
          (setq lst (vl-sort l '(lambda (q p) (< (atof (car q)) (atof (car p))))))
          (setq pts (vl-sort l '(lambda (q p) (> (cadr (cadr q)) (cadr (cadr p))))))
          (repeat (length lst)
            (entupd
            (cdr
                (assoc -1
                     (entmod (subst (cons 10 (cadr (car pts))) (cons 10 (cadr (car lst))) (entget (caddr (car lst)))))
                )
            )
            )
            (setq lst (vl-remove (car lst) lst))
            (setq pts (vl-remove (car pts) pts))
          )
   )
)
(princ "\nWritten by Tharwat Al Shoufi")
(princ)
)

termal007 发表于 2022-7-6 07:38:01

谢谢你的回答,但我不知道为什么我的“区域块”号码变了!!!!!!
我不喜欢我的数字改变;只是排序顺序,它意味着一行一行是“C-Road-Ctn-Title”,下一行是“
区域块“就这样!!

Tharwat 发表于 2022-7-6 07:44:29

 
你是说他们的位置只是(垂直的)吗?

termal007 发表于 2022-7-6 07:48:30

 
是,并将所有文本排序为垂直。

Tharwat 发表于 2022-7-6 07:56:21

还有一个例程,用于在x轴上垂直排列所选文本。
 

(defun c:Test (/ x ss i e sn p l)
(vl-load-com)
(if (setqss (ssget '((0 . "TEXT"))))
   (progn
   (repeat (setq i (sslength ss))
       (vla-put-alignment (vlax-ename->vla-object (setq sn (ssname ss (setq i (1- i))))) acAlignmentLeft)
       (setq l (cons sn l))
       (cond ((not x) (setq x (car (cdr (assoc 10 (setq e (entget sn)))))))
             ((if (> (setq p (car (cdr (assoc 10 (setq e (entget sn)))))) x)
                (setq x p)
            )
             )
       )
   )
   (foreach ent l
       (entupd
         (cdr
         (assoc -1
                  (entmod
                  (subst (cons 10 (list x (cadr (cdr (assoc 10 (entget ent)))))) (assoc 10 (entget ent)) (entget ent))
                  )
         )
         )
       )
   )
   )
   (princ)
)
(princ "\nWritten by Tharwat Al Shoufi")
(princ)
)

termal007 发表于 2022-7-6 08:00:38

谢谢,再提一个问题;如果可能,增加数字层“C-Road-Ctn-Title”和层“Area block”之间的距离!!?

Tharwat 发表于 2022-7-6 08:06:47

 
试试这个。。。

(defun c:Test (/ ss d i e sn lst l p n ent)
(vl-load-com)
(if (and (setq ss (ssget '((0 . "TEXT")))) (setq d (getdist "\n Specify Distance between texts :")))
   (progn (repeat (setq i (sslength ss))
            (vla-put-alignment (vlax-ename->vla-object (setq sn (ssname ss (setq i (1- i))))) acAlignmentLeft)
            (setq e (entget sn))
            (setq lst (cons (list sn (cdr (assoc 10 e)) (cdr (assoc 40 e))) lst))
          )
          (setq l (vl-sort lst '(lambda (a b) (> (cadr (cadr a)) (cadr (cadr b))))))
          (setq p (polar (cadr (car l)) (* pi 1.5) (+ (caddr (car l)) d)))
          (setq n 0)
          (repeat (1- (length l))
            (setq ent (nth (setq n (1+ n)) l))
            (entupd
            (cdr (assoc -1 (entmod (subst (cons 10 p) (assoc 10 (entget (car ent))) (entget (car ent))))))
            )
            (setq p (polar p (* pi 1.5) (+ (caddr ent) d)))
          )
   )
   (princ)
)
(princ "\nWritten by Tharwat Al Shoufi")
(princ)
)

termal007 发表于 2022-7-6 08:17:02

再次非常感谢;解决了的

Tharwat 发表于 2022-7-6 08:21:12

 
随时欢迎你。
页: [1]
查看完整版本: 如何在cad中排序?