明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ghost_mooo

[求助]如何用LISP更改选择集所在的层?

    [复制链接]
发表于 2006-7-23 15:39:00 | 显示全部楼层
楼上的高手能帮我示范一个比较简单的方法吗?嘿嘿,我实在是不怎么懂这个的,我是做建筑的,图层的分层一直都在捆绕着我,
发表于 2006-7-23 20:51:00 | 显示全部楼层

如果是在LISP的编程应用当中需要改变层,那就这样:

1,假定你的选择集名为SS,新层的变量为xc,所需代码如下:

(command "change" ss "P" "la" xc "")

发表于 2006-7-24 16:14:00 | 显示全部楼层
无痕剑发表于2006-7-23 14:22:00 (defun c:1 (/ gp) (setq gp (ssget)) (command \"change\" gp \"\" \"p\" \"co\" \"1\" \"\"))(defun c:2 (/ gp) (setq gp (ssget)) (comman...

(defun c:1 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "co" "1" "la" "新层名" ""))
(defun c:2 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "co" "2" "la" "新层名" ""))
发表于 2006-7-24 19:22:00 | 显示全部楼层

下面一段程序能实现改变颜色和层的功能.

(defun c:test ()
  (setq ss (progn (princ "\n选择图元:") (ssget))   ;;;User input,and obtain the user's data;;;
 layname (getstring "\n输入所要改变到的图层:")
 color (getint "\n输入改变后的颜色索引号(如1,2,255等):")
  )
  (if (not (tblsearch "layer" layname))      ;;;search if there is the layer of layname through out the drawing,
    (command "-layer" "n" layname "")        ;;;if not,then creat it.
  )
  (command "chprop"                          ;;;change the property--"layer" and "color".
   ss
    ""
    "la"
    layname
    "c"
    color""
  )
)

发表于 2006-7-25 11:45:00 | 显示全部楼层
高手太多,小弟就只灌灌水了
发表于 2006-7-26 12:46:00 | 显示全部楼层
实在是佩服得五体投地,谢了哈楼上的
 楼主| 发表于 2006-7-26 15:15:00 | 显示全部楼层

       一个关于选择集颜色的问题:当该选择集颜色设定为红色时,可以用(62 . 1)的参数选中它,但如果颜色设置为随层,该层的颜色为红色的时候,选择集的颜色看起来也是红色的,但用(62 . 1)的参数就选不中它了……

       请高手解决,谢谢了!!!

发表于 2006-7-26 16:06:00 | 显示全部楼层

你可以用tblnext遍历图层

(setq la (tblnext "layer" 'T))
(setq la_name (cdr (assoc '2 la)))
(while la
    (setq la (tblnext "layer"))
     (setq la_name (cdr (assoc '2 la)))
     (setq la_c (cdr (assoc '62 la)))
 (if (= la_c 1) (setq ss(ssget "x" (list (cons 8 la_name)))))
  )

发表于 2006-7-26 16:35:00 | 显示全部楼层
 ;获得指定颜色的所有图元
 ;color为颜色代码0-256
(defun ssget_by_color (color / txt la ss)
    (setq txt "")
    (setq la (tblnext "layer" t))
    (if (= (cdr (assoc 62 la)) color)
 (setq txt (strcat txt "," (cdr (assoc 2 la))))
    )
    (while (setq la (tblnext "layer"))
 (if (= (cdr (assoc 62 la)) color)
     (setq txt (strcat txt "," (cdr (assoc 2 la))))
 )
    )
    (setq ss (ssget "all"
      (list '(-4 . "<or")
     (cons 62 color)
     '(-4 . "<and")
     (cons 8 txt)
     '(62 . 256)
     '(-4 . "and>")
     '(-4 . "or>")
      )
      )
    )
)
 楼主| 发表于 2006-7-31 10:16:00 | 显示全部楼层

       诸位大虾,我还是很白,在选择集处理的问题上还不是很明白。再请教一个程序,如:自动选择在0层的所有线的线,并自动打散。

       请赐教!谢谢了!

       (defun c:1 (/ gp) (setq gp (ssget)),还有这句是什么意思?我还是初学者,自己试了一下,没明白,麻烦给详细解释一下,谢谢了!

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-6-21 14:48 , Processed in 0.196459 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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