获取/转储图形对象
大家好,我没有任何问题,只是想分享我的一些工作。
我认为这会让你(程序员)的日常工作变得轻松/舒适(如果你还没有自己写过这样的开发版本的话)。
; Dump/Entget a graphical object (entsel behaviour), with options
; author: Grrr (thanks to Lee Mac & Tharwat that I've reached such level of coding)
(defun C:test ( / *error* SysVarLst R o m )
(setvar 'errno 0)
(defun *error* ( msg )
(mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'cadr SysVarLst))
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(princ (strcat "\nError: " msg))
)
(princ)
)
(setq SysVarLst
(mapcar '(lambda ( a b / ) (list a (getvar a) b))
(list "CLIPROMPTLINES" "CMDECHO" "PDMODE") ; PDMODE, because sometimes is hard to (entsel) a point with PDMODE of 0 value
(list 1 0 3) ; the new intended values
)
)
(while (/= 52 (getvar 'errno))
(mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'caddr SysVarLst))
(initget "Entget Dump eXit")
(if (not m) (setq m "Entget"))
(setq R (entsel (strcat "\nSelect entity or <\"" m "\">: ")))
(cond
((member (getvar 'errno) '( 7 ))
(princ "\nMissed, try again! ") ; non-nil return, stay in loop
(setvar 'errno 0)
)
((and (not (listp R))(member (strcase R) '("E" "ENTGET")))
(if (not (= m "Entget")) (setq m "Entget"))
)
((and (not (listp R))(member (strcase R) '("D" "DUMP")))
(if (not (= m "Dump")) (setq m "Dump"))
)
((and (not (listp R))(member (strcase R) '("X" "EXIT")))
(princ "\nI hope this routine helped! ")
(mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'cadr SysVarLst))
(setvar 'errno 52)
(vl-cmdf "_.textscr")
)
(R
(cond
((= (strcase m) "ENTGET")
(if (= (type (car R)) 'ENAME)
(progn
(princ "\n******************** ENTGET RESULTS: ********************")
(foreach x (entget (car R)) (princ "\n")(print x))
(princ "\n******************** END OF RESULTS ********************")
)
)
)
((= (strcase m) "DUMP")
(if (= (type (setq o (vlax-ename->vla-object (car R)))) 'VLA-OBJECT)
(progn
(princ "\n******************** DUMP RESULTS: ********************")
(vlax-dump-object o T)
(princ "\n******************** END OF RESULTS ********************")
)
)
)
); cond
)
(T ; if user pressed enter
(princ "\nBye, user! ")
(setvar 'errno 52)
(mapcar '(lambda ( n v / ) (setvar n v)) (mapcar 'car SysVarLst) (mapcar 'cadr SysVarLst))
(vl-catch-all-apply (quote textscr) (list))
)
); cond
); while go
(princ)
);| defun |; (vl-load-com) (princ) 非常酷的Grr!我唯一可以添加的(我已经添加到我的中)是可以选择进一步深入到特定的属性值(例如TrueColor,或者基本上是Civil 3D中的所有内容)。我通过在转储后提示用户输入属性值来实现这一点,如果用户愿意,可以进一步深入了解。
谢谢,broncos15!
你的想法听起来很好,但我对“探索”实体(使用entnext/entget、vanilla-lisp)还是比较生疏。
使用对象和集合的visual lisp方法似乎要简单得多(可能是因为我自己不需要翻译和理解任何相关的DXF组码)。
然而,我的计划是首先绘制ACAD对象模型的“地图”,类似于此:http://www.afralisp.net/reference/autocad-object-model.php或者至少找一个更好/更新的(正如你所见,也没有“TrueColor”)。
页:
[1]