乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 17|回复: 17

[编程交流] 按目标类型隔离

[复制链接]

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:15:29 | 显示全部楼层 |阅读模式
你好
 
有时,当我从其他人那里获得绘图时,我需要将所有实体映射到适当的层,例如,尺寸放在不同的层上,你想让它们放在一个层上吗?。
 
隔离很好,但它无法解决上述问题,因为它基于层。因此,我编写了一个lisp(我的第一个工作程序)来根据目标类型隔离实体,这意味着如果选择尺寸线,无论它们放在哪个层上,它们都是隔离的。
 
在下一步中,用户可以选择:
 
更新:重新启动
新:将所有孤立实体放置在新层上的选项
恢复:隔离并终止功能
 
我很高兴你能提出改进代码的建议
谢谢
S
 
  1. (setq TEMPTARGETLAYERNAME "SG_TEMP")
  2. (defun C:Test (/ ent sset i e cl)
  3. (setq ent (entget (car (entsel "Select target entity\n"))))
  4. (setq sset (ssget "_X" (list (assoc 0 ent)))) ;_select all entities with target type
  5. (if (not (tblsearch "LAYER" TEMPTARGETLAYERNAME)) ;_if target  layer doesnt  exist, create it
  6.      
  7.    (entmake (list '(0 . "LAYER")
  8.            '(100 . "AcDbSymbolTableRecord")
  9.            '(100 . "AcDbLayerTableRecord")
  10.            '(70 . 0)
  11.            (cons 2 TEMPTARGETLAYERNAME)
  12.            (cons 62 2)
  13.      )
  14.    )
  15.    
  16. ) ;_if
  17. (setvar "clayer" TEMPTARGETLAYERNAME)
  18. (setq i 0)
  19. (while (< i (sslength sset))
  20.    (setq e (entget (ssname sset i)))
  21.    (entmod (subst (cons 8 TEMPTARGETLAYERNAME) (assoc 8 e) e)) ;_replace the sset entites layer to target
  22.    (setq i (1+ i))
  23. )
  24. (while (setq la (tblnext "LAYER" (null la))) ;_set all layers (except target) to froozen
  25.    (if        (not (equal (assoc 2 la) (cons 2 TEMPTARGETLAYERNAME)))
  26.      (progn
  27. (setq ob (tblobjname "LAYER" (cdr (assoc 2 la))))
  28. (setq ladef (entget ob))
  29. (if (assoc 70 ladef)
  30.   (entmod (subst (cons 70 1) (assoc 70 ladef) ladef))
  31.   (entmod (append la '((70 . 1))))
  32. )
  33.      )
  34.    )
  35. )
  36. (initget 7 "Restore Update New")
  37. (setq case (getkword "[Restore/Update/New]"))
  38. (cond
  39.    ((eq case "Restore") (alert case))
  40.    ((eq case "Update") (alert case))
  41.    ((eq case "New") (alert case))
  42.    (T case)
  43.    )
  44.    
  45. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:20:56 | 显示全部楼层
 
  1. (if (setq ent (car (entsel "\n Select target entity")))
  2. (setq sset (ssget "_X" (list (assoc 0 (entget ent)))))
  3. )

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

 
 
  1. (entmod
  2. (subst (cons 70 (1+ (cdr (assoc 70 (setq ladef (entget ob))))))
  3.         (assoc 70 ladef)
  4.         ladef
  5. )
  6. )
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:23:42 | 显示全部楼层
你会怎么单挑?我正在考虑设置撤消标记。。。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:29:04 | 显示全部楼层
我知道你没有注意到我之前所做的事情!
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:32:31 | 显示全部楼层
我的手机在移动。我想回家试试你的segues红色代码
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:33:55 | 显示全部楼层
如何关闭iPhone中的自动完成功能?
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:39:01 | 显示全部楼层
 
将我上一篇文章中的1+替换为1-。
 
 
了解函数vla startUndomark和vla endundomark
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:43:50 | 显示全部楼层
 
这个很有趣,你从70.1跳到70.2,我不明白为什么?
 
谢谢
谢伊
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 23:45:33 | 显示全部楼层
 
如果一个层被锁定,dxf 70将等于1,那么如果要冻结它,则应将dxf值添加到该dxf值中,以保持该层的锁定状态,并将其冻结。
回复

使用道具 举报

218

主题

699

帖子

483

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1090
发表于 2022-7-5 23:49:59 | 显示全部楼层
哇,做这件事很聪明
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-11 00:36 , Processed in 0.804779 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表