只需一步,快速开始
例如:我有图层0、DB、DBHID、DBTH、DBDIM、SP、SPHID、SPTH、SPDIM(PP、BP......每个都有相应的HID、TH、DIM)等等.
就拿HID层来说我现在想编一个LISP:
假如当前层为0层,输入命令后选取像素(不管像素本身是什么层)就变到HID层;
假如当前层是DB、DBTH、DBDIM输入命令后选取像素就变到DBHID层;
假如当前层是PP、PPTH、PPDIM输入命令后选取像素就变到PPHID层,
提示除了0层外其它图层前两个字符相同,请各位帮帮忙,谢谢!
使用道具 举报
(DEFUN c:CY() (setq a (ssget))(command "chprop" a "" "la" 0 "") (princ))
这里面你自已改: CY 是命令 0 是图层,你可以改这两个参数为你自已常用的
楼主可能没有完全理解我的意思,如果要达到楼主效果我用这句也可以(defun c:q1() (ssget) (command "chprop" "p" "" "L" "1" ""))
我的意思假如当前图层是DB或是DBDIM我输入命令后选取图元它就变到DBHID层,假如当前图层是PP或是PPDIM我输入命令后选取图元它就变到PPHID层,请楼主再帮我想想,谢谢!
在网吧 只能告诉你方法了:
1 获取所选对象图层名 如:DBDIM
2 得到对象图层名前两个字符 DB
就你一楼提供的信息来看 好象主板实名都是两个字符的DB、SP、PP...
3 将这两个字符和HID 组合起来——得到 DBHID
4 将所选对象图层设定为 DBHID
同意6楼的,这个其实还是比较好实现的,
给段代码,用这个可以做一个图层穿梭器
(defun c:mtr ( / path s e lay cmd W) (princ "\nBuild a \"Layer Transformer\"") (setq path (strcat (getvar "dwgprefix") "Layer_Transformer.lsp")) (if (setq W (open path "r")) (progn (close W) (setq W (open path "a")) ) (progn (setq W (open path "w")) (write-line "(defun Change-Layer (layername / ss n i ed)" W) (write-line "(if (setq ss (ssget \"I\"))" W) (write-line "(progn (setq n (sslength ss) i 0)" W) (write-line "(while (< i n)" W) (write-line "(setq ed (entget (ssname ss i)))(setq ed (subst (cons 8 layername)(assoc 8 ed) ed))(entmod ed)" W) (write-line "(setq i (1+ i))))))" W) ) ) (setq s (ssget "I")) (if (= s nil)(setq s (ssget))) (setq cmd (getstring "\nTransfer Command for the Layer:")) (setq e (entget (ssname s 0))) (setq lay (cdr (assoc 8 e))) (write-line (strcat "(defun c:" cmd "()(change-layer \"" lay "\")(setvar \"clayer\" \"" lay "\"))") W) (close W) )
(defun *error* (msg) (princ (strcat "\nERROR: " msg)) (close W) )
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 ) ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途
GMT+8, 2025-2-22 02:15 , Processed in 0.185592 second(s), 25 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.