实用绘图中的冻结
嗨,我想有一个Lisp程序,将冻结在绘图面糊层面糊,但我不希望它做任何其他地方。即使我用Lisp程序这是到目前为止我得到的
(setq dn (getvar 'DWGNAME))
(if (= dn "batters.dwg")
(command "-layers" "F" "BATTERS")
);if
这行不通我做错了什么。 (命令“-layer”..not“-layers” 命令的使用将比ent*或vla慢,但这已经足够了。
对于命令的使用,我要做的是。。。
(if (and (eq (strcase (getvar 'DWGNAME)) "BATTERS.DWG") ;capitalize to ignore case
(tblsearch "LAYER" "BATTERS") ;check if layer exists (not really necessary)
)
(if (eq (strcase (getvar 'CLAYER)) "BATTERS") ;check if current layer is "BATTERS"
(command "_.-layer" "_T" "0" "_S" "0" "_F" "BATTERS" "") ; if so, thaw/set 0 as current and freeze layer
(command "_.-layer" "_F" "BATTERS" "") ; freeze layer
)
) 代码,而不是命令调用。
(if (and (eq (strcase (getvar 'DWGNAME)) "BATTERS.DWG")
(tblsearch "LAYER" "BATTERS")
)
(progn
(setq l (entget (tblobjname "LAYER" "BATTERS")))
(entmod (subst (cons 70 1) (assoc 70 l) l))
)
)
塔瓦特 我希望图层没有被锁定、处于当前状态等。阅读dxf 70中存储的图层附加属性可能会对您有所帮助。
1+
阅读logand/logior/boole等函数的使用。
这是二合一
(if (and (eq (strcase (getvar 'DWGNAME)) "BATTERS.DWG")
(tblsearch "LAYER" "BATTERS")
)
(progn
(cond ((eq (strcase (getvar 'clayer)) "BATTERS")
(setvar 'clayer "0")
)
)
(setq l (entget (tblobjname "LAYER" "BATTERS")))
(if (eq (logand 4 (cdr (assoc 70 l))) 4)
(entmod (subst (cons 70 0) (assoc 70 l) l))
)
(entmod (subst (cons 70 1) (assoc 70 l) l))
)
)
我放弃了。我不知道为什么一开始就觉得有必要把这个线程复杂化。
如果层在新视口中冻结,该怎么办?还是依赖外部参照?或者,如果设置了任何其他70位组码?
你不是所有这些步骤的第一顾问吗?
页:
[1]
2