请教大家,如何让ssget函数多次选择生成图层.如下程序有问题,帮忙看看
;*************************************************************选中线框创建8块模板,原线保留(defun c:ct2() (setq n -1) (princ "\n选择模板外形") (setq sg_name(ssget)) (setq sl(sslength sg_name)) (princ "\n选择模座外形") (setq sg_name1(ssget)) (setq s2(sslength sg_name1)) (repeat sl (setq n (+ n 1)) (setq es_name(ssname sg_name n)) ;*****Create Layer "D01"创建模板虚拟框 (command "copy" es_name"" "0,0" "" ) (setq el_name(entlast)) (command "chprop" es_name "" "color" "9""ltype" "center" "layer" "D01""s" "5" "");*****Create Layer "D02" (command "copy" es_name"" "0,0" "" ) (setq el_name(entlast)) (command "chprop" es_name "" "layer" "D02" "");*****Create Layer "D03" (command "copy" es_name"" "0,0""" ) (setq el_name(entlast)) (command "chprop" el_name "" "layer" "D03" "" );*****Create Layer "S01" (command "copy" es_name """0,0" "" ) (setq el_name(entlast)) (command "chprop" el_name "" "layer" "S01" "" );*****Create Layer "S02" (command "copy" es_name"" "0,0" "" ) (setq el_name(entlast)) (command "chprop" el_name"" "layer" "S02" "" );*****Create Layer "P03" (command "copy" es_name"" "0,0" "" ) (setq el_name(entlast)) (command "chprop" el_name "" "layer" "P03" "" );*****Create Layer "P02" (command "copy" es_name"" "0,0" "" ) (setq el_name(entlast)) (command "chprop" el_name """layer" "P02" "" ) ;*****Create Layer "P01"创建模板虚拟框 (command "copy" es_name"" "0,0" "" ) (setq el_name(entlast)) (command "chprop" el_name "" "color" "9""ltype" "center""layer" "P01""s" "5" "") );*****Create Layer "P01、D01"(repeat s2 (setq n (+ n 1)) (setq es_name1(ssname sg_name1 n));*****Create Layer "P01" (command "copy" es_name1"" "0,0" "" ) (setq el_name1(entlast)) (command "chprop" el_name1 "" "layer" "P01" "") ;*****Create Layer "D01" (command "copy" es_name1"" "0,0" "" ) (setq el_name1(entlast)) (command "chprop" es_name1 "" "layer" "D01" "")) (princ))本帖最后由 sachindkini 于 2022-11-26 15:25 编辑
dear sir,
opt 1.
(setq lst'("0""1""2""3"))
(defun _layersel ( lst)
(apply 'append (subst nil (list nil) (mapcar 'list lst)))
( foreach layer lst (ssadd (ssget "_A" (list (cons 8 layer))) ss))
)
oot.2
(setq layerlist (list "0" "Layer1" "Layer2" "Layer3" "ABCD" "DEFG" "HIJK"))
(setq ll '((-4 . "OR>")))
( foreach l layerlist
(setq ll (cons (cons 8 l) ll))
(setq ll (cons '(-4 . "<OR") ll))
(setq ss (ssget "X" ll))
opt.3
(defun _strcat (layers delim)
(vl-string-right-trim
delim
(apply
'strcat
(mapcar (function (lambda (x) (strcat x delim))) layers) ) )
[
;----------------------------
(setq layerlist (list "0" "Layer1" "Layer2" "Layer3" "ABCD" "DEFG" "HIJK"))
(sssetfirst nil (ssget "_x" (list (cons 8 (_strcat layerlist " ,")))))
opt.4
(ssget
"_X"
'((-4 . "<OR")
(8 . "0")
(8 . "Layer1")
(8 . "Layer2")
(8 . "Layer3")
( 8 . "ABCD")
(8 . "DEFG")
(8 . "HIJK")
(-4 . "OR>")
)
)
;------------------ -----------------
(ssget "_x" (list (8 . "0,Layer1,Layer2,Layer3,ABCD,DEFG,HIJK")))
看不懂楼主的程序,程序和题目不相符吧。你是想根据选中的图形,挨个复制到特定图层内? liuhe 发表于 2022-11-27 09:21
看不懂楼主的程序,程序和题目不相符吧。你是想根据选中的图形,挨个复制到特定图层内?
;;;;;;;;;原程序
(defun c:ct22()
(setq n -1)
(princ "\n选择模板外形")
(setq sg_name(ssget))
(setq sl(sslength sg_name))
(repeat sl (setq n (+ n 1))
(setq es_name(ssname sg_name n))
;*****Create Layer "D01"创建模板虚拟框
(command "copy" es_name"" "0,0" "" )
(setq el_name(entlast))
(command "chprop" el_name "" "color" "9""ltype" "center" "layer" "D01""s" "5" "")
;*****Create Layer "D02"
(command "copy" es_name"" "0,0" "" )
(setq el_name(entlast))
(command "chprop" el_name "" "layer" "D02" "")
;*****Create Layer "D03"
(command "copy" es_name"" "0,0""" )
(setq el_name(entlast))
(command "chprop" el_name "" "layer" "D03" "" )
;*****Create Layer "S01"
(command "copy" es_name """0,0" "" )
(setq el_name(entlast))
(command "chprop" el_name "" "layer" "S01" "" )
;*****Create Layer "S02"
(command "copy" es_name"" "0,0" "" )
(setq el_name(entlast))
(command "chprop" el_name"" "layer" "S02" "" )
;*****Create Layer "P03"
(command "copy" es_name"" "0,0" "" )
(setq el_name(entlast))
(command "chprop" el_name "" "layer" "P03" "" )
;*****Create Layer "P02"
(command "copy" es_name"" "0,0" "" )
(setq el_name(entlast))
(command "chprop" el_name """layer" "P02" "" )
;*****Create Layer "P01"创建模板虚拟框
(command "copy" es_name"" "0,0" "" )
(setq el_name(entlast))
(command "chprop" el_name "" "color" "9""ltype" "center""layer" "P01""s" "5" "")
)
(princ)
)
以上选择图形复制到图形,在选择其他图形添加到以下图层里面
;;;;*****Create Layer "P01"
;;; (command "copy" es_name"" "0,0" "" )
;;; (command "chprop" el_namel "" "layer" "P01" "")
;;;;*****Create Layer "D01"
;;; (command "copy" es_name"" "0,0" "" )
;;; (command "chprop" el_namel "" "layer" "D01" "")
sachindkini 发表于 2022-11-26 15:19
dear sir,
opt 1.
谢谢谢谢你,,,,还在学习中 本帖最后由 guosheyang 于 2022-11-27 11:53 编辑
;*****Create Layer "D01"创建模板虚拟框
(command "copy" es_name"" "0,0" "" )
(setq el_name(entlast))
(command "chprop" es_name "" "color" "9""ltype" "center" "layer" "D01""s" "5" "")
这个代码中改变图元的图层 "D01"图层名 必须要存在如果没有该图层名必须先建一个该名称的图层否则"chprop"命令调用会失败 ;另外,后面的代码中,每次复制图元后都命名el_name,会将前面复制的图元名覆盖掉,导致以前复制的图元不可检索 查询,这样似乎欠妥;类似这种的 相同类型的重复操作一般用循环来完成,多解读别人写的可正确执行的代码,慢慢熟悉 guosheyang 发表于 2022-11-27 11:42
;*****Create Layer "D01"创建模板虚拟框
(command "copy" es_name"" "0,0" "" )
(s ...
谢谢老师指点,,,对循环语句的思路一直不怎么会用,困恼,还请请教。谢谢你
谢谢分享支持
页:
[1]