乐筑天下

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

[编程交流] 带对象的边缘复制例程

[复制链接]

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-5 23:08:27 | 显示全部楼层 |阅读模式
嘿伙计们,
 
我们在办公室使用ProSteel和ACAD。在切换到ProSteel(来自另一家商店的详细包装)之前,我们非常喜欢的一个老套路是“边缘复制”套路。
 
这是一个非常简单的例程,代码如下:
 
  1. (defun c:ee ()
  2. (setq OROSMODE (getvar "OSMODE"))
  3. (setvar "osmode" 512)
  4. (setq P1 (getpoint "\n Select edge to be copied:"))
  5. (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
  6. (setvar "osmode" OROSMODE)
  7. )

 
它在ACAD实体(拾取时)的边缘创建直线/圆弧/圆/样条曲线。
 
我想做的是,它具有与ProSteel元素相同的功能。
 
我的想法是让例程检测选定边缘的元素的名称,如果元素是ACAD实体,则按常规进行。但是,如果该元素是ProSteel元素,则必须首先将其转换为ACAD实体。
 
我有以下代码,它在ProSteel元素上执行任务:
 
  1. (defun c:ep ()
  2. (SETVAR "CMDECHO" 0)
  3. (setq OROSMODE (getvar "OSMODE"))
  4. (setq ORPICKSTYLE (getvar "pickstyle"))
  5. (setvar "pickstyle" 0)
  6. (setvar "osmode" 512)
  7. (setq P1 (getpoint "\n Select edge to be copied:"))
  8. (setq epPSss (ssget P1))
  9. (command "copybase" "0,0,0" epPSss "" "pasteclip" "0,0,0")
  10. (command "draworder" "L" "" "front")
  11. (command "PS_CREATE_ACIS" "L" "" "N" "N" "Y" "Y")
  12. (command "chprop" "l" "" "c" "11" "")
  13. (setq epACss (ssget "L"))
  14. (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
  15. (command "chprop" "l" "" "c" "7" "")
  16. (command "erase" epacss "")
  17. (setvar "osmode" OROSMODE)
  18. (setvar "pickstyle" ORPICKSTYLE)
  19. (princ)
  20. )

 
但是我想让例程确定元素类型,然后继续执行适合元素类型的例程。
 
例如:
 
  1. (defun c:eeTEST ()
  2. (SETVAR "CMDECHO" 0)
  3. (setq OROSMODE (getvar "OSMODE"))
  4. (setq ORPICKSTYLE (getvar "pickstyle"))
  5. (setvar "pickstyle" 0)
  6. (setvar "osmode" 512)
  7. (setq P1 (getpoint "\n Select edge to be copied:"))
  8. (setq epPSss (ssget P1))
  9. [color="red"](cond
  10. (= epPSss <PROSTEEL ELEMENT>)
  11. (command "copybase" "0,0,0" epPSss "" "pasteclip" "0,0,0")
  12. (command "draworder" "L" "" "front")
  13. (command "PS_CREATE_ACIS" "L" "" "N" "N" "Y" "Y")
  14. (command "chprop" "l" "" "c" "11" "")
  15. (setq epACss (ssget "L"))
  16. (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
  17. (command "chprop" "l" "" "c" "7" "")
  18. (command "erase" epacss "")
  19. (= epPSss <ACAD SOLID>)
  20. (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
  21. )[/color]
  22. (setvar "osmode" OROSMODE)
  23. (setvar "pickstyle" ORPICKSTYLE)
  24. (princ)
  25. )

 
所有(我认为)ProSteel元素的名称都以“KS_”(例如KS_形状、KS_板等)开头。那么,例程是否有可能根据元素的名称识别元素类型,但仅使用前3个字符来识别ProSteel形状?否则我可以做如下事情:
 
  1. '((-4 . "<OR")(0 . "KS_SHAPE,KS_PLATE,KS_BOLT,KS_BENDSHAPE,KS_ARCSHAPE,KS_ARCPLATE,KSBENDPLATE,KS_VOLBODY"))

有关更多详细信息,请查看帮助中的WCMATCH函数-因为过滤器可能使用相同的规则。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:24:04 | 显示全部楼层
嗨Mircea,
 
非常感谢您的回复。恐怕我不太明白如何实施你的解决方案。我希望根据选择集中存在的元素类型执行不同的操作,而不是过滤选择集。
 
再次感谢。
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-5 23:33:19 | 显示全部楼层
我相信我误解了你的疑问。您是否希望选择一个实体,然后根据其类型采取行动?
  1. (ssget "_X" '((0 . "KS_*)))
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:44:32 | 显示全部楼层
嗨Mircea,
 
是的,那正是我想要的。非常感谢你帮我解决这个问题(或者我应该说,帮我解决这个问题)。
 
代码:
  1. (if (and (setq ssetToEdit (ssget "_:S:E" '((0 . "KS_*,3DSOLID"))))
  2.         (setq entToEdit  (ssname ssetToEdit 0)))
  3. (if (= (cdr (assoc 0 (entget entToEdit))) "3DSOLID")
  4. (progn
  5.   ;;; Procesing 1
  6. )
  7. (progn
  8.   ;;; Procesing 2
  9. )
  10. )
  11. )
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-5 23:58:06 | 显示全部楼层
您可以简化该代码:
  1. (defun c:eeTest ()
  2. (SETVAR "CMDECHO" 0)
  3. (setq OROSMODE (getvar "OSMODE"))
  4. (setq ORPICKSTYLE (getvar "pickstyle"))
  5. (setvar "pickstyle" 0)
  6. (setvar "osmode" 512)
  7. (setq P1 (getpoint "\n Select edge to be copied:"))
  8. (setq epPSss (ssget P1))
  9. (if (and (setq ssetToEdit (ssget "P" '((0 . "KS_*,3DSOLID"))))
  10.    (setq entToEdit  (ssname epPSss 0)))
  11. (if
  12. (= (cdr (assoc 0 (entget entToEdit))) "3DSOLID")
  13. (progn
  14.    (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
  15.    (command "chprop" "l" "" "c" "7" "")
  16.   )
  17. (progn
  18.   (command "copybase" "0,0,0" epPSss "" "pasteclip" "0,0,0")
  19.   (command "draworder" "L" "" "front")
  20.   (command "PS_CREATE_ACIS" "L" "" "N" "N" "Y" "Y")
  21.   (command "chprop" "l" "" "c" "11" "")
  22.   (setq epACss (ssget "L"))
  23.   (command "solidedit" "edge" "copy" P1 "" P1 P1 "" "")
  24.   (command "chprop" "l" "" "c" "7" "")
  25.   (command "erase" epacss "")
  26. )
  27. )
  28. )
  29. (setvar "osmode" OROSMODE)
  30. (setvar "pickstyle" ORPICKSTYLE)
  31. (princ)
  32. )
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 00:04:42 | 显示全部楼层
啊,很酷,非常感谢你的Mircea。
回复

使用道具 举报

77

主题

298

帖子

232

银币

后起之秀

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

铜币
394
发表于 2022-7-6 00:08:54 | 显示全部楼层
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:30 , Processed in 0.796794 second(s), 66 queries .

© 2020-2025 乐筑天下

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