hihand2000 发表于 2013-9-26 12:03:44

lsp图层命令请教

(defun c:Slab ( )                                                               
(command "layer" "on" "*" "")                                                       ;图层全部打开
(command "layer" "on" "REIN,TEXT,板底标注-X,板底标注-Y,板底钢筋-X,板底钢筋-Y,板面标注-X,板面标注-Y,板面钢筋-X,板面钢筋-Y,板说明,板编号" "")                                                                    ;TSSD板默认图层
(command "layer" "off" "次梁-X,次梁-Y,次梁原位-X,次梁原位-Y,连梁X,连梁Y,梁钢筋-X,梁钢筋-Y,梁原位-X,梁原位-Y" "")                                                                                                     ;TSSD梁默认图层

(princ)
)

编了一个很简单的命令,打开全部板层,关闭全部梁层的命令。现在有个问题就是有些图纸没有某个图层的话,会提示
没有找到匹配的图层,然后还要提示:
无效的选项关键字。输入选项
[?/生成(M)/设置(S)/新建(N)/开(ON)/关(OFF)/颜色(C)/线型(L)/线宽(LW)/打印(P)/冻结(
F)/解冻(T)/锁定(LO)/解锁(U)/状态(A)]:

如何才能忽略那些没有的图层,不显示上面的提示选项呢?
还有就是如何当前图层是某个板的图层的话还会提示是否真的要关闭当前图层,如何取消这个提示直接关闭呢?
解决方法一是改变当前图层为其他图层譬如到0层就不会有上述提示,是否有第二种办法既不改变当前图层又能关闭所需要的图层呢?

自贡黄明儒 发表于 2013-9-26 12:31:57

本帖最后由 自贡黄明儒 于 2013-9-26 12:36 编辑

先判断图层是否存在(tblobjname "layer" LAY_NAM)

也可这样
(setvar "nomutt" 1)
(command ....)
(setvar "nomutt" 0)

hihand2000 发表于 2013-9-26 14:33:04

本帖最后由 hihand2000 于 2013-9-26 14:41 编辑

自贡黄明儒 发表于 2013-9-26 12:31 static/image/common/back.gif
先判断图层是否存在(tblobjname "layer" LAY_NAM)

也可这样

判断是可以的,只不过需要判断的图层比较多的时候,语句有点多。一个个图层判断开关有点烦。
关闭了信息显示确实没有了提示,但还有个问题就是当当前图层属于关闭图层中的一个时候,会停住等待输入确认命令。

fl202 发表于 2013-9-26 15:35:18

本帖最后由 fl202 于 2013-9-27 09:22 编辑

先判断图层是否存在,不存在的图层是新建图层还是怎样?

把存在的图层建表,foreach或者ctrcat,在layer off即可。

自贡黄明儒 发表于 2013-9-26 15:54:04

;;没有的图层,则创建
(mapcar        '(lambda (x)
           (if (tblobjname "Layer" x) nil (command "_.layer" "make" x ""))
       )
        (list "REIN" "TEXT")
)

hihand2000 发表于 2013-9-26 16:34:55

fl202 发表于 2013-9-26 15:35 static/image/common/back.gif
先判断图层是否存在,把存在的图层建表,foreach即可。

能否给个例子?不大懂

自贡黄明儒 发表于 2013-9-26 16:55:09

hihand2000 发表于 2013-9-26 16:34 static/image/common/back.gif
能否给个例子?不大懂

(foreach x (list "REIN" "TEXT")
(if (tblobjname "Layer" x) nil (command "_.layer" "make" x ""))
)

hihand2000 发表于 2013-9-26 17:45:33

自贡黄明儒 发表于 2013-9-26 16:55 static/image/common/back.gif
(foreach x (list "REIN" "TEXT")
(if (tblobjname "Layer" x) nil (command "_.layer" "make" x "")) ...

首先灰常感谢楼上的,我明白你们的意思了,就是把没有的图层先建起来。假如不想建图层名,就只能一个个图层判断是否存在然后再进行打开或者关闭的操作了。不过有没有第三种方法能不建图层,减少判断次数然后批量打开或者关闭几个指定图层名并且即使是当前层也无需再次提示确认的?

lsjj 发表于 2013-9-26 17:55:34

可以用通配字符,如
次梁*,连梁*

ZZXXQQ 发表于 2013-9-26 20:27:20

(defun c:Slab ( )                                                               
(command "layer" "on" "*" "")             ;图层全部打开
;既然上一行已经打开了,本行多余(command "layer" "on" "REIN*,TEXT*,板*" "") ;TSSD板默认图层
(command "layer" "off" "*梁*,梁*" "")   ;TSSD梁默认图层
(princ)
)
页: [1] 2
查看完整版本: lsp图层命令请教