明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2653|回复: 13

[提问] 谁能看懂这段代码?

[复制链接]
发表于 2014-3-24 10:42:26 | 显示全部楼层 |阅读模式

(defun c:tzz (/ ss sl i el pr dn lyr addlyr layers)
  (vl-load-com)
  (defun addlyr        (lyr)
    (vla-add layers lyr)
  )
  (if (setq ss (ssget '((0 . "TCH_PIPE"))))
    (progn
      (setq sl           (sslength ss)
            i           sl
            layers (vla-get-layers
                     (vla-get-activedocument (vlax-get-acad-object))
                   )
      )
      (repeat sl
        (setq el  (entget (ssname ss (setq i (1- i))))
              pr  (cdr (assoc 301 el))
              dn  (cdr (assoc 140 el))
              lyr (strcat pr (rtos dn 2 0))
        )
        (if (tblsearch "layer" lyr)
          nil
          (addlyr lyr)
        )
      (entmod (subst (cons 8 lyr) (assoc 8 el) el))
      )
    )
  )
  (princ)
)


-------------------------------------------------------------------------------------------

这段代码是根据管线的DN值进行分层。如果管线的DN值进行分色不改变原来图层呢。请高手指点,谢谢、
PS:原来管线的DN值有DN25、DN 32、 DN 40、 DN 50、 DN70、 DN80 、 DN 100、 DN150这9种。
发表于 2014-3-24 13:55:46 | 显示全部楼层
小伙子,别天真了,你这段代码太高深了,这里没人看得懂
发表于 2014-3-24 14:30:35 | 显示全部楼层
是不是上个测试图??
发表于 2014-3-24 17:36:34 | 显示全部楼层
选择图元类型为"TCH_PIPE"的对象,将对象图层修改为组码301与组码140一起组成的名称,如果该图层不存在则新建。
发表于 2014-3-24 18:05:38 | 显示全部楼层
(defun c:tzz ( / dn e el i ss)
        (setvar "cmdecho" 0)
        (vl-cmdf "undo" "be")
  (if (setq ss (ssget "x" '((0 . "TCH_PIPE"))))
    (repeat (setq i (sslength ss))
        (setq e (ssname ss (setq i (1- i)))
                el (entget e)
              dn  (cdr (assoc 140 el))
        )
        (entmod (append el (list (cons 62 (fix dn)))))
    )
)
    (vl-cmdf "undo" "e")
    (setvar "cmdecho" 1)
  )

点评

额··神回复。果真高明。不过我要自定义别的颜色应该怎么改,帮改改,谢谢!  发表于 2014-3-24 21:02
发表于 2014-3-25 07:01:33 | 显示全部楼层
颜色有9种...不如直接说说你要对应的颜色号...好写到程序里....

点评

DN25、DN 32、 DN 40、 DN 50、 DN65、 DN70、 DN80 、 DN 100、 DN150.颜色依次是: 7、4、150、5、32、32、1、6、2。 谢谢 !  发表于 2014-3-25 09:01
发表于 2014-3-25 11:40:41 | 显示全部楼层
q3_2006 发表于 2014-3-25 07:01
颜色有9种...不如直接说说你要对应的颜色号...好写到程序里....

(defun c:tzz ( / a dn e el i l l1 l2 la lb lst ss x y z)
(defun fd (lst / a la lb x)
(while lst
  (setq a (caar lst)
          la (vl-remove-if-not '(lambda(x) (= a (car x))) lst)
          lst (vl-remove-if '(lambda(x) (= a (car x))) lst)
          lb (cons la lb)
  )
)
(reverse lb)
)
        (setvar "cmdecho" 0)
        (vl-cmdf "undo" "be")
        (setq l '(7 4 150 5 32 32 1 6 2)       ; 颜色表可自行更改
      ss (ssget "x" '((0 . "TCH_PIPE")))
      l1 nil
  )
  (repeat (setq i (sslength ss))
  (setq e (ssname ss (setq i (1- i)))
        el (entget e)
        dn (fix (cdr (assoc 140 el)))
        l1 (cons (list dn e) l1)
  )
)
(setq l1 (vl-sort l1 '(lambda (x y) (< (car x) (car y))))
        l2 (fd l1)
    )
    (mapcar '(lambda(x y) (mapcar '(lambda(z) (entmod (append (entget (cadr z)) (list (cons 62 y))))) x)) l2 l)
    (vl-cmdf "undo" "e")
    (setvar "cmdecho" 1)
  )

点评

赞一个!不过有点写复杂了,我的本意是框选之后,把DN25的线变成红色,DN32线变成绿色,。。。其余DN变成白色。总之,很谢谢Q3帮忙~!!  发表于 2014-3-25 12:50
发表于 2014-3-25 13:15:40 | 显示全部楼层
q3_2006 发表于 2014-3-25 11:40
(defun c:tzz ( / a dn e el i l l1 l2 la lb lst ss x y z)
(defun fd (lst / a la lb x)
(while lst
...

没见过你图什么样...程序只提供思路,后续自己完善!
发表于 2014-3-25 13:48:09 | 显示全部楼层

  1. ;; 未经测试
  2. (defun c:tt (/ i ss s1 el pr dn la)
  3.   (setq i -1
  4.         lst-la '("DN25" "DN32" "DN40" "DN50" "DN65" "DN70" "DN80" "DN100" "DN150")
  5.         lst-co '(7 4 150 5 32 32 1 6 2)
  6.   )
  7.   (if (setq ss (ssget '((0 . "TCH_PIPE"))))
  8.     (while (setq s1 (ssname ss (setq i (1+ i))))
  9.       (setq el (entget s1)
  10.             pr (cdr (assoc 301 el))
  11.             dn (cdr (assoc 140 el))
  12.             la (strcat pr (rtos dn 2 0))
  13.       )
  14.       (if (setq n (member la lst-la))(entmod (subst (cons 62 (nth (- 9 (length n)) lst-co)) (assoc 62 el) el)))
  15.     )
  16.   )
  17.   (princ)
  18. )
发表于 2014-3-25 13:53:24 | 显示全部楼层
q3_2006 发表于 2014-3-25 11:40
(defun c:tzz ( / a dn e el i l l1 l2 la lb lst ss x y z)
(defun fd (lst / a la lb x)
(while lst
...

(defun c:tzz ( / dn e el i ss)
        (setvar "cmdecho" 0)
        (vl-cmdf "undo" "be")
  (if (setq ss (ssget "x" '((0 . "TCH_PIPE"))))
    (repeat (setq i (sslength ss))
        (setq e (ssname ss (setq i (1- i)))
                el (entget e)
              dn (fix (cdr (assoc 140 el)))
        )
        (cond
                ((= 25 dn) (entmod (append el (list (cons 62 1)))))
                ((= 32 dn) (entmod (append el (list (cons 62 3)))))
                (t (entmod (append el (list (cons 62 7)))))
        )
    )
)
    (vl-cmdf "undo" "e")
    (setvar "cmdecho" 1)
  )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 06:37 , Processed in 0.194493 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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