明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 718|回复: 8

[讨论] 请教大家,如何让ssget函数多次选择生成图层.如下程序有问题,帮忙看看

[复制链接]
发表于 2022-11-26 11:18 | 显示全部楼层 |阅读模式
;*************************************************************选中线框创建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)
)

发表于 2022-11-26 15:19 | 显示全部楼层
本帖最后由 sachindkini 于 2022-11-26 15:25 编辑

dear sir,

opt 1.  
  1.   
  2. (setq lst'("0""1""2""3"))
  3.         (defun _layersel ( lst)
  4.                 (apply 'append (subst nil (list nil) (mapcar 'list lst)))
  5.                 ( foreach layer lst (ssadd (ssget "_A" (list (cons 8 layer))) ss))
  6.         )



oot.2
  1. (setq layerlist (list "0" "Layer1" "Layer2" "Layer3" "ABCD" "DEFG" "HIJK"))

  2.   (setq ll '((-4 . "OR>")))
  3.   ( foreach l layerlist
  4.         (setq ll (cons (cons 8 l) ll))
  5.   (setq ll (cons '(-4 . "<OR") ll))

  6.   (setq ss (ssget "X" ll))



opt.3
  1. (defun _strcat (layers delim)
  2.   (vl-string-right-trim
  3.     delim
  4.     (apply
  5.       'strcat
  6.       (mapcar (function (lambda (x) (strcat x delim))) layers) ) )
  7.     [


  8. ;----------------------------

  9. (setq layerlist (list "0" "Layer1" "Layer2" "Layer3" "ABCD" "DEFG" "HIJK"))

  10. (sssetfirst nil (ssget "_x" (list (cons 8 (_strcat layerlist " ,")))))


发表于 2022-11-26 15:26 | 显示全部楼层
opt.4


  1. (ssget
  2.   "_X"
  3.   '((-4 . "<OR")
  4.     (8 . "0")
  5.     (8 . "Layer1")
  6.     (8 . "Layer2")
  7.     (8 . "Layer3")
  8.     ( 8 . "ABCD")
  9.     (8 . "DEFG")
  10.     (8 . "HIJK")
  11.     (-4 . "OR>")
  12.   )
  13. )

  14. ;------------------ -----------------

  15. (ssget "_x" (list (8 . "0,Layer1,Layer2,Layer3,ABCD,DEFG,HIJK")))

发表于 2022-11-27 09:21 | 显示全部楼层
看不懂楼主的程序,程序和题目不相符吧。你是想根据选中的图形,挨个复制到特定图层内?
 楼主| 发表于 2022-11-27 11:23 | 显示全部楼层
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" "")


 楼主| 发表于 2022-11-27 11:25 | 显示全部楼层

谢谢  谢谢你  ,,,,还在学习中
发表于 2022-11-27 11:42 | 显示全部楼层
本帖最后由 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,会将前面复制的图元名覆盖掉,导致以前复制的图元不可检索 查询,这样似乎欠妥  ;类似这种的 相同类型的重复操作一般用循环来完成,多解读别人写的可正确执行的代码,慢慢熟悉  
 楼主| 发表于 2022-11-27 18:17 | 显示全部楼层
guosheyang 发表于 2022-11-27 11:42
;*****Create Layer "D01"创建模板虚拟框
         (command "copy" es_name  "" "0,0" "" )
         (s ...

谢谢老师指点,,,对循环语句的思路一直不怎么会用,困恼,还请请教。谢谢你
发表于 2022-11-27 19:59 | 显示全部楼层

谢谢分享支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-23 17:53 , Processed in 0.249556 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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