乐筑天下

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

[编程交流] 获取/转储图形对象

[复制链接]

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:18:01 | 显示全部楼层 |阅读模式
大家好,
我没有任何问题,只是想分享我的一些工作。
我认为这会让你(程序员)的日常工作变得轻松/舒适(如果你还没有自己写过这样的开发版本的话)。
  1. ; Dump/Entget a graphical object (entsel behaviour), with options
  2. ; author: Grrr (thanks to Lee Mac & Tharwat that I've reached such level of coding)
  3. (defun C:test ( / *error* SysVarLst R o m )
  4. (setvar 'errno 0)
  5. (defun *error* ( msg )
  6.         (mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'cadr SysVarLst))
  7.         (if (not (member msg '("Function cancelled" "quit / exit abort")))
  8.                 (princ (strcat "\nError: " msg))
  9.         )
  10.         (princ)
  11. )
  12. (setq SysVarLst
  13.         (mapcar '(lambda ( a b / ) (list a (getvar a) b))
  14.                 (list "CLIPROMPTLINES" "CMDECHO" "PDMODE") ; PDMODE, because sometimes is hard to (entsel) a point with PDMODE of 0 value
  15.                 (list 1 0 3) ; the new intended values
  16.         )
  17. )
  18. (while (/= 52 (getvar 'errno))
  19.         (mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'caddr SysVarLst))
  20.         (initget "Entget Dump eXit")
  21.         (if (not m) (setq m "Entget"))
  22.         (setq R (entsel (strcat "\nSelect entity or [Entget/Dump/eXit] <"" m "">: ")))
  23.         (cond
  24.                 ((member (getvar 'errno) '( 7 ))
  25.                         (princ "\nMissed, try again! ") ; non-nil return, stay in loop
  26.                         (setvar 'errno 0)
  27.                 )
  28.                 ((and (not (listp R))(member (strcase R) '("E" "ENTGET")))
  29.                         (if (not (= m "Entget")) (setq m "Entget"))
  30.                 )
  31.                 ((and (not (listp R))(member (strcase R) '("D" "DUMP")))
  32.                         (if (not (= m "Dump")) (setq m "Dump"))
  33.                 )
  34.                 ((and (not (listp R))(member (strcase R) '("X" "EXIT")))
  35.                         (princ "\nI hope this routine helped! ")
  36.                         (mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'cadr SysVarLst))
  37.                         (setvar 'errno 52)
  38.                         (vl-cmdf "_.textscr")
  39.                 )
  40.                 (R
  41.                         (cond
  42.                                 ((= (strcase m) "ENTGET")
  43.                                         (if (= (type (car R)) 'ENAME)
  44.                                                 (progn
  45.                                                         (princ "\n******************** ENTGET RESULTS: ********************")
  46.                                                         (foreach x (entget (car R)) (princ "\n")(print x))
  47.                                                         (princ "\n******************** END OF RESULTS ********************")
  48.                                                 )
  49.                                         )
  50.                                 )
  51.                                 ((= (strcase m) "DUMP")
  52.                                         (if (= (type (setq o (vlax-ename->vla-object (car R)))) 'VLA-OBJECT)
  53.                                                 (progn
  54.                                                         (princ "\n******************** DUMP RESULTS: ********************")
  55.                                                         (vlax-dump-object o T)
  56.                                                         (princ "\n******************** END OF RESULTS ********************")
  57.                                                 )
  58.                                         )
  59.                                 )
  60.                         ); cond
  61.                 )
  62.                 (T ; if user pressed enter
  63.                         (princ "\nBye, user! ")
  64.                         (setvar 'errno 52)
  65.                         (mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'cadr SysVarLst))
  66.                         (vl-catch-all-apply (quote textscr) (list))
  67.                 )
  68.         ); cond
  69. ); while go
  70. (princ)
  71. );| defun |; (vl-load-com) (princ)
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

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

铜币
475
发表于 2022-7-5 18:05:40 | 显示全部楼层
非常酷的Grr!我唯一可以添加的(我已经添加到我的中)是可以选择进一步深入到特定的属性值(例如TrueColor,或者基本上是Civil 3D中的所有内容)。我通过在转储后提示用户输入属性值来实现这一点,如果用户愿意,可以进一步深入了解。
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 18:34:08 | 显示全部楼层
 
谢谢,broncos15!
你的想法听起来很好,但我对“探索”实体(使用entnext/entget、vanilla-lisp)还是比较生疏。
使用对象和集合的visual lisp方法似乎要简单得多(可能是因为我自己不需要翻译和理解任何相关的DXF组码)。
然而,我的计划是首先绘制ACAD对象模型的“地图”,类似于此:http://www.afralisp.net/reference/autocad-object-model.php或者至少找一个更好/更新的(正如你所见,也没有“TrueColor”)。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 07:07 , Processed in 0.548826 second(s), 58 queries .

© 2020-2025 乐筑天下

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