(setq chklay (tblsearch "layer" "圆圈"))
(if (= chklay nil) (command "layer" "n" "圆圈" "c" "3" "圆圈" "") );;查找图层,如果没有,就创建这个图层,颜色绿色。
(defun c:0( / l1 l2 l3 l4 l5 );;;定义命令函数0(包含变量 l1 l2 l3 l4 l5)
(setq l1 (entsel));;;选取图元并赋值给l1
(setq l2 (car l1));;;获取图元名并赋值给l2
(setq l3 (entget l2));;;自截取的图元名l2中获取图元的dxf组码并赋值给l3
(setq l4 (assoc 8 l3));;;自l3(dxf组码)中找到代表图层的组码并赋值给l4
(setq l5 (cdr l4));;;将l4转换成该图元的层名并赋值l5
(command "layer" "lo" "" "" "layer" "u" l5 "" "layer" "s" l5 "");;;通过layer命令锁定所有图层,然后解锁l5图层(上面选择的图元的图层)并设置该图层为当前层
)
总的来说就是锁定除了选中图元所在层的所有层,并将这个层置为当前层。
应该能理解了吧?
;图层添加后缀
;by DnBc
(defun c:ccc()
(setq cm (getvar "cmdecho"))
(setvar "cmdecho" 0)
(command "_undo" "be")
(if (and
(setq hzm (getstring "\n后缀:"))
(/= hzm "")
)
(vlax-for tcm (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(if (/= (vla-get-name tcm) "0")
(vla-put-name tcm (strcat (vla-get-name tcm) hzm))
)
)
)
(command "_undo" "e")
(setvar "cmdecho" cm)
(princ)
)
提供思路 和 部分代码
1快捷方式可以用(defun c: xxx) 实现
2调用xxx 时 可以d出对话框 选择需要选取的图形 并将结果 放入选集 selection@
3关闭0 图层 打开 1图层 试用insert 命令插入 至于偏移多少自己定
3关闭1 图层 打开 2图层 用insert 命令插入 到图层2中
;;;;;实现打开图层1 例如 (LayerOn 1)
(defun LayerOn (LayerNames$ / LayerList@ Name$)
(setq LayerList@ (CommaList LayerNames$))
(foreach Name$ LayerList@
(if (= Name$ "")
(command "LAYER" "T" "" "U" "" "ON" "" "")
(if (tblsearch "layer" Name$)
(command "LAYER" "T" Name$ "U" Name$ "ON" Name$ "S" Name$ "")
(command "LAYER" "M" Name$ "")
);if
);if
);foreach
);defun LayerOn
;;关闭图纸0 (LayerOff 0)
(defun LayerOff (LayerNames$)
(if (= LayerNames$ "")
(command "LAYER" "F" "" "")
(command "LAYER" "OFF" LayerNames$ "F" LayerNames$ "")
);if
);defun LayerOff
(cdr (assoc 370 (entget (tblobjname "layer" "0")))) ;得到图层“0”的线宽
当图层线宽为”默认“时,得到的值为-3,而当设置了线宽时,得到的就是
图层线宽值(以mm为单位的线宽的100倍)
以上就是关于CAD lisp代码图层控制全部的内容,包括:CAD lisp代码图层控制、AutoCAD软件的Lisp语句含义解释、能不能帮助编个LISP程序,就是在所有图层名后加后缀,谢谢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)