wmh-3816 发表于 2022-11-26 11:18:30

请教大家,如何让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:19:38

本帖最后由 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 " ,")))))


sachindkini 发表于 2022-11-26 15:26:52

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:50

看不懂楼主的程序,程序和题目不相符吧。你是想根据选中的图形,挨个复制到特定图层内?

wmh-3816 发表于 2022-11-27 11:23:59

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" "")


wmh-3816 发表于 2022-11-27 11:25:57

sachindkini 发表于 2022-11-26 15:19
dear sir,

opt 1.


谢谢谢谢你,,,,还在学习中

guosheyang 发表于 2022-11-27 11:42:52

本帖最后由 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,会将前面复制的图元名覆盖掉,导致以前复制的图元不可检索 查询,这样似乎欠妥;类似这种的 相同类型的重复操作一般用循环来完成,多解读别人写的可正确执行的代码,慢慢熟悉

wmh-3816 发表于 2022-11-27 18:17:06

guosheyang 发表于 2022-11-27 11:42
;*****Create Layer "D01"创建模板虚拟框
         (command "copy" es_name"" "0,0" "" )
         (s ...

谢谢老师指点,,,对循环语句的思路一直不怎么会用,困恼,还请请教。谢谢你

中国梦 发表于 2022-11-27 19:59:33


谢谢分享支持
页: [1]
查看完整版本: 请教大家,如何让ssget函数多次选择生成图层.如下程序有问题,帮忙看看