找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1622|回复: 4

[编程申请]:自编的改层LISP

[复制链接]
发表于 2009-10-18 10:48:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
诸位大侠,自己编了一个改图层的lisp,目的是可以通过命令来修改物体的图层名,由于探索者的图层较长,也可以自动判断并进行修改,例如探索者的柱标注为COLU_DIM,则输入程序设定的默认CD即可自动将物体所在层改到了COLU_DIM,如果图层不存在,则新建图层。现在的问题是,程序不太稳定,有时候突然就不能用了,请诸位高手多多指教。

;CHANGE OBJIECT TO A LAYER
(defun c:gc (/ Layer_name Object_name Current_layer_name Temp_layer_name layer_color)
  (setvar "cmdecho" 0)
  (setq Layer_name (getstring "\nInput object layer[柱标注(CD)\\柱填充(CH)\\柱编号(CB)\\墙标注(WD)\\墙填充(WH)\\墙详图(WX)\\墙详图钢筋(WG)\\钢筋(G)\\表格文字(TT)]:"))
  (setq Object_name (ssget))
  (setq Current_layer_name (getvar "CLAYER"))
  ;The following is a description of the layer setup
  (setq Layer_name (cond ((= Layer_name "CD") "COLU_DIM")
                   ((= Layer_name "CH") "COLU_HATCH")
                   ((= Layer_name "CB") "COLU_NUM")
                   ((= Layer_name "WD") "WALL_DIM")
                   ((= Layer_name "WH") "WALL_HATCH")
                   ((= Layer_name "WX") "WALL_DE")
                   ((= Layer_name "WG") "WALL_DE_REIN")
                   ((= Layer_name "G") "REIN")
                   ((= Layer_name "TT") "TAB_TEXT")
;;;                   (t Layer_name)
             )       
  )
  (setq Temp_layer_name (tblsearch "layer" Layer_name))
  (if (= Temp_layer_name nil)
    (progn
      (princ "\nhaven't this layer:")
      (setq layer_color (getint "\n Input the layer's layer_color:"))
      (COMMAND "-LAYER" "n" Layer_name "c" layer_color Layer_name "")
      (command "change" Object_name "" "p" "la" Layer_name "")
    )
    (command "change" Object_name "" "p" "la" Layer_name "")   
  )
  (command "CLAYER" Current_layer_name)
  (prin1)   
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-10-18 15:21:55 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-10-18 19:54:37 | 显示全部楼层

(setq Layer_name (getstring "\nInput object layer[柱标注(CD)\\柱填充(CH)\\柱编号(CB)\\墙标注(WD)\\墙填充(WH)\\墙详图(WX)\\墙详图钢筋(WG)\\钢筋(G)\\表格文字(TT)]:"))
改为
(setq Layer_name (strcase (getstring "\nInput object layer[柱标注(CD)\\柱填充(CH)\\柱编号(CB)\\墙标注(WD)\\墙填充(WH)\\墙详图(WX)\\墙详图钢筋(WG)\\钢筋(G)\\表格文字(TT)/<柱标注>]:")))

;;; (t Layer_name)
改为
(t "COLU_DIM")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-10-18 21:23:42 | 显示全部楼层

感谢gysjy

下午翻了一下午的书,已经有办法解决了,方法就同3楼的说法一样,不过我的程序稍微处理的麻烦一点,以下为修改好的源程序,再次感谢gysjy。
;CHANGE OBJIECT TO A LAYER
(defun c:gc (/ Layer_name Object_name Current_layer_name Temp_layer_name layer_color)
  (setvar "cmdecho" 0)
  (setq Layer_name (getstring "\nInput object layer[柱标注(CD)\\柱填充(CH)\\柱编号(CB)\\墙标注(WD)\\墙填充(WH)\\墙详图(WX)\\墙详图钢筋(WG)\\钢筋(G)\\表格文字(TT)]:"))
  (setq Layer_name (strcase Layer_name));将图层名称转换为大写字母
  (setq Object_name (ssget))
  (setq Current_layer_name (getvar "CLAYER"))
  ;The following is a description of the layer setup
  (setq Layer_name (cond ((= Layer_name "CD") "COLU_DIM")
                         ((= Layer_name "CH") "COLU_HATCH")
                         ((= Layer_name "CB") "COLU_NUM")
                         ((= Layer_name "WD") "WALL_DIM")
                         ((= Layer_name "WH") "WALL_HATCH")
                         ((= Layer_name "WX") "WALL_DE")
                         ((= Layer_name "WG") "WALL_DE_REIN")
                         ((= Layer_name "G") "REIN")
                         ((= Layer_name "TT") "TAB_TEXT")
                         (T Layer_name)         
                   )
  )
  (setq Temp_layer_name (tblsearch "layer" Layer_name))
  (if (= Temp_layer_name nil)
    (progn
      (princ "\nhaven't this layer:")
      (setq layer_color (getint "\n Input the layer's layer_color:"))
      (COMMAND "-LAYER" "n" Layer_name "c" layer_color Layer_name "")
      (command "change" Object_name "" "p" "la" Layer_name "")
    )
    (command "change" Object_name "" "p" "la" Layer_name "")   
  )
  (command "CLAYER" Current_layer_name)
  (prin1)   
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-11-2 17:09:16 | 显示全部楼层
谢谢啊,我还不会编程啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-18 09:49 , Processed in 0.210023 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表