标记对象
大家好!几天来,我一直在寻找解决我遇到的问题的方法。我见过几个人问了一个非常类似的问题,但没有找到答案。我的图纸中有数百条多段线,代表钢筋。。。我想使用数据提取来获取这些多段线的长度,对其进行一些简单的算术运算,并将这些信息导出到表格或excel电子表格中,以便显示切割长度、延伸率等。。。我遇到的问题是,我无法识别哪些多段线是哪些。我需要一种命名多段线的方法(即Tendon_1、Tendon_2等)因此,多段线的长度对我很有用。长度通常是许多不同的值。查看多段线的数据提取集,我可以使用几个类别,例如注释、主题、标题。。。虽然我不知道如何将此属性指定给特定的多段线。
所以我猜我需要一个lisp例程来用某种标记标记多段线???有人有什么想法吗?
非常感谢你。 试试下面我编的两个口吃
请随意将两者都换成你的西装
;; AXD.lsp
;; set xdata
(vl-load-com)
(defun C:AXD (/ acapp adoc appname counter obj ss xtype xvalue)
(setq acapp (vlax-get-acad-object)
adoc (vla-get-activedocument acapp)
)
;; define application name
(setq appname "STEEL_ENFORCE")
;; register application, if this registered earlier,
;; just ignore it
(vl-catch-all-apply
(function (lambda()
(regapp appname)))
(alert (strcat "Select steel enforcement,\n
then enter data for them,\n
then repeat the same for next one"))
;;
(setq counter 1)
(while ; loop
(setq ss (ssget "_+.:S:E" (list (cons 0 "*POLYLINE");|(cons 8 "M-STEEL-DETAIL")|));<==change layer name if you need it
(progn
(setq obj (vlax-ename->vla-object (ssname ss 0))
xtype (list 1001;|appname|;
1000;|Tendon#|;
1041;|length|;
1041;|elongation|;
1040;|diameter|;
1000;|subject|;
1000;|comments|;
1000;|title|;
)
)
(setq xvalue (list appname
(strcat "Tendon_" (itoa counter))
(vlax-curve-getdistatparam obj (vlax-curve-getendparam obj))
(getreal (strcat "\nEnter elongation for Tendon#"(itoa counter) ": "))
(getreal "\nEnter diameter: ")
(getstring T "\nEnter subject description (less than 256 characters!): ")
(getstring T "\nEnter comments (less than 256 characters!) : ")
(getstring T "\nEnter title : ")
)
)
(vlax-invoke
obj
'SetXdata
xType
xvalue
)
(setq counter (1+ counter))
(setq xvalue nil)
)
)
)
(princ)
)
(princ "\nType AXD to add xdata")
(princ)
;; XDT.lsp
;; read xdata and write it in .CSV file (comma separated)
(vl-load-com)
(defun C:XDT(/ appname data en fdesc fn obj ss xdv)
(setq appname "STEEL_ENFORCE")
(setq fn (strcat (getvar "dwgprefix") (vl-filename-base (getvar "dwgname")) ".csv"))
(if (not (findfile fn))
(setq fdesc (open fn "w"))
(setq fdesc (open fn "a"))
)
(setvar "cmdecho" 0)
(write-line "Name,Length,Elongation,Diameter,Subject,Description,Comments,Title" fdesc)
(setq ss (ssget "_X" (list (list -3 (list appname)))))
(while (setq en (ssname ss 0))
(setq obj (vlax-ename->vla-object (ssname ss 0)))
(vla-getXdata
obj
appname
'xtp
'xdv
)
(setq data
(cdr (mapcar 'vlax-variant-value
(vlax-safearray->list xdv)
)
)
)
(ssdel en ss)
(write-line (strcat (car data) ","
(rtos (cadr data) 2 2) ","
(rtos (caddr data) 2 2) ","
(rtos (cadddr data) 2 2) ","
(nth 4 data) ","
(nth 5 data) ","
(nth 6 data))
fdesc)
)
(close fdesc)
(setvar "cmdecho" 1)
(princ)
)
(princ "\nType XDT to write xdata to file")
(princ)
~'J'~ 非常感谢菲索。我以前从未使用过扩展数据,学习它对我来说是件好事。
再次感谢你。 不客气
快乐计算
~'J'~
页:
[1]