124803430 发表于 2014-4-15 17:27:21

本人最近研究一键处理建筑底图程序,有问题请教各位

本帖最后由 124803430 于 2014-4-15 17:37 编辑

(defun c:ee()
(while (setq n (tblnext "layer" (null n)))
    (setq layername (cdr(assoc 2 n)))
    (command "layer" "c" "8" layername)
    (command "")
    )
)
(defun c:ff()
(while (setq n (tblnext "layer" (null n)))
    (setq layername (cdr(assoc 2 n)))
    (command "layer" "c" "8" layername)
    (command "")
    )
(command "layer" "f" "*a-wind-iden" "")
(command "layer" "f" "*a-spac-iden" "")
(command "layer" "f" "*dim_iden" "")
(command "layer" "f" "*a-anno-levl""")
(command "layer" "f" "*a-anno-dims" "")
(command "layer" "f" "*a-grid" "")
(command "layer" "f" "*a-dim-iden" "")
(command "layer" "f" "*a-anno-note" "")
)
(defun c:za()
(setq qq (nentsel "\n 请选择需要冻结的图层:" ))
(setq qqname (car qq))
(setq lay (cdr(assoc 8 (entget qqname))))
(command "layer" "f" lay "")
)

kwok 发表于 2014-4-15 17:41:57

我在用2014,外参照进来的图都是灰色的,不用改,建议用一下高版.
2008就不是灰色的,其它版不清楚.

124803430 发表于 2014-4-15 17:32:21

本帖最后由 124803430 于 2014-4-15 17:33 编辑

因为我们这边底图都是外部参照,每个图参照过来的话图层显示会加竖向号,使得每个图层只有后面的名字相同,图层名本来不同
本人思路就是冻结几种特定图层,有些没冻结的图层就用手动关闭,然后图层全部改成8号灰色。但是因为外部参照图层图层名不一样。
只能使用通配符搜索功能,这样如果图层一多造成程序运行太慢。
如何能提高程序运行速度,给个思路或改进方法
变成8号色其实也挺慢的,这个程序不知道有改进方法没?

fire9527 发表于 2014-4-15 19:28:12

同求

124803430 发表于 2014-4-15 21:14:20

kwok 发表于 2014-4-15 17:41 static/image/common/back.gif
我在用2014,外参照进来的图都是灰色的,不用改,建议用一下高版.
2008就不是灰色的,其它版不清楚.

高版本的CAD用起来机器太卡了。

124803430 发表于 2014-4-16 11:05:19

人工顶贴~~~~~~~~

124803430 发表于 2014-4-17 09:21:19

没人回帖啊????

124803430 发表于 2014-4-17 21:01:01


没人回帖啊????

tranney 发表于 2014-4-22 05:51:43

你可以用先用下面代码,然后插入为外部参照
;---------- 将所选对象设置为0-建筑底图 线性不变
(defun c:0T (/ ceng ss en dxf lt)
      (setvar "cmdecho" 0)
      (setq ceng "0-建筑底图")
      (princ (strcat "\n---将所选对象设置为" ceng ",属性随层"))
      (if (not (tblsearch "layer" ceng))
                (command "_layer" "m" ceng "c" "8" ceng "lt" "Continuous" ceng "")
                (command "layer" "s" ceng "c" "8" "" "lt" "Continuous" ceng "")
      )
      (while (setq ss (ssget ":s"))
                (repeat (setq n (sslength ss))
                        (setq en (ssname ss (setq n (1- n))))
                        (setq dxf (entget en))
                        (if (not (cdr (assoc 6 dxf)))
                              (progn
                                        (setq lt (cdr (assoc 6 (entget (tblobjname "layer" (cdr (assoc 8 dxf)))))))
                                        (command "chprop" en "" "la" ceng "lw" "ByLayer" "lt" lt "")
                              )
                              (command "chprop" en "" "la" ceng "lw" "ByLayer" "")
                        )
                )
      (command "change" ss "" "p" "c" "bylayer" "lt" "" "la" ceng "lw" "bylayer" "")
      )
      (princ (strcat "\n---将所选对象设置为" ceng ",属性随层"))
      (setvar "cmdecho" 1)
      (princ)
)
这样的话除了块,其他的基本上都达到你的要求了,如果觉得块也要修改,请先用下面代码
;---------- 将块内所有对象更改到0图层,颜色随层。
(defun c:0t1 ( / e i l n ss x )
    (if (setq ss (ssget '((0 . "INSERT"))))
      (repeat (setq i (sslength ss))
            (if (not (member (setq n (cdr (assoc 2 (entget (ssname ss (setq i (1- i))))))) l))
                (progn
                  (setq e (tblobjname "block" n)
                        l (cons n l)
                  )
                  (while (setq e (entnext e))
                        (setq x (entget e))
                        (entmod (subst '(8 . "0") (assoc 8 x) x))
                  )
                )
            )
      )
    )
    (command "_.regen")
    (princ)
)

nadaloveluna 发表于 2015-12-18 15:22:14

tranney 发表于 2014-4-22 05:51 static/image/common/back.gif
你可以用先用下面代码,然后插入为外部参照
;---------- 将所选对象设置为0-建筑底图 线性不变
(defun c: ...

谢谢前辈,这个程序处理建筑图挺好的。
页: [1]
查看完整版本: 本人最近研究一键处理建筑底图程序,有问题请教各位