samifox 发表于 2022-7-5 23:15:29

按目标类型隔离

你好
 
有时,当我从其他人那里获得绘图时,我需要将所有实体映射到适当的层,例如,尺寸放在不同的层上,你想让它们放在一个层上吗?。
 
隔离很好,但它无法解决上述问题,因为它基于层。因此,我编写了一个lisp(我的第一个工作程序)来根据目标类型隔离实体,这意味着如果选择尺寸线,无论它们放在哪个层上,它们都是隔离的。
 
在下一步中,用户可以选择:
 
更新:重新启动
新:将所有孤立实体放置在新层上的选项
恢复:隔离并终止功能
 
我很高兴你能提出改进代码的建议
谢谢
S
 

(setq TEMPTARGETLAYERNAME "SG_TEMP")

(defun C:Test (/ ent sset i e cl)
(setq ent (entget (car (entsel "Select target entity\n"))))
(setq sset (ssget "_X" (list (assoc 0 ent)))) ;_select all entities with target type


(if (not (tblsearch "LAYER" TEMPTARGETLAYERNAME)) ;_if targetlayer doesntexist, create it
   
   (entmake (list '(0 . "LAYER")
           '(100 . "AcDbSymbolTableRecord")
           '(100 . "AcDbLayerTableRecord")
           '(70 . 0)
           (cons 2 TEMPTARGETLAYERNAME)
           (cons 62 2)
   )
   )

   
) ;_if

(setvar "clayer" TEMPTARGETLAYERNAME)

(setq i 0)
(while (< i (sslength sset))
   (setq e (entget (ssname sset i)))
   (entmod (subst (cons 8 TEMPTARGETLAYERNAME) (assoc 8 e) e)) ;_replace the sset entites layer to target
   (setq i (1+ i))
)


(while (setq la (tblnext "LAYER" (null la))) ;_set all layers (except target) to froozen
   (if        (not (equal (assoc 2 la) (cons 2 TEMPTARGETLAYERNAME)))

   (progn
(setq ob (tblobjname "LAYER" (cdr (assoc 2 la))))
(setq ladef (entget ob))
(if (assoc 70 ladef)
(entmod (subst (cons 70 1) (assoc 70 ladef) ladef))
(entmod (append la '((70 . 1))))
)
   )
   )
)

(initget 7 "Restore Update New")
(setq case (getkword ""))

(cond
   ((eq case "Restore") (alert case))
   ((eq case "Update") (alert case))
   ((eq case "New") (alert case))
   (T case)
   )
   
)

Tharwat 发表于 2022-7-5 23:20:56

 

(if (setq ent (car (entsel "\n Select target entity")))
(setq sset (ssget "_X" (list (assoc 0 (entget ent)))))
)

 

(not (equal (cdr (assoc 2 la)) TEMPTARGETLAYERNAME))

 
 

(entmod
(subst (cons 70 (1+ (cdr (assoc 70 (setq ladef (entget ob))))))
      (assoc 70 ladef)
      ladef
)
)

samifox 发表于 2022-7-5 23:23:42

你会怎么单挑?我正在考虑设置撤消标记。。。

Tharwat 发表于 2022-7-5 23:29:04

我知道你没有注意到我之前所做的事情!

samifox 发表于 2022-7-5 23:32:31

我的手机在移动。我想回家试试你的segues红色代码

samifox 发表于 2022-7-5 23:33:55

如何关闭iPhone中的自动完成功能?

Tharwat 发表于 2022-7-5 23:39:01

 
将我上一篇文章中的1+替换为1-。
 
 
了解函数vla startUndomark和vla endundomark

samifox 发表于 2022-7-5 23:43:50

 
这个很有趣,你从70.1跳到70.2,我不明白为什么?
 
谢谢
谢伊

Tharwat 发表于 2022-7-5 23:45:33

 
如果一个层被锁定,dxf 70将等于1,那么如果要冻结它,则应将dxf值添加到该dxf值中,以保持该层的锁定状态,并将其冻结。

samifox 发表于 2022-7-5 23:49:59

哇,做这件事很聪明
页: [1] 2
查看完整版本: 按目标类型隔离