Trebuchet 发表于 2022-7-6 17:18:17

标记对象

大家好!几天来,我一直在寻找解决我遇到的问题的方法。我见过几个人问了一个非常类似的问题,但没有找到答案。
 
我的图纸中有数百条多段线,代表钢筋。。。我想使用数据提取来获取这些多段线的长度,对其进行一些简单的算术运算,并将这些信息导出到表格或excel电子表格中,以便显示切割长度、延伸率等。。。我遇到的问题是,我无法识别哪些多段线是哪些。我需要一种命名多段线的方法(即Tendon_1、Tendon_2等)因此,多段线的长度对我很有用。长度通常是许多不同的值。查看多段线的数据提取集,我可以使用几个类别,例如注释、主题、标题。。。虽然我不知道如何将此属性指定给特定的多段线。
 
所以我猜我需要一个lisp例程来用某种标记标记多段线???有人有什么想法吗?
 
非常感谢你。

fixo 发表于 2022-7-6 17:54:24

试试下面我编的两个口吃
请随意将两者都换成你的西装
 

;; 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'~

Trebuchet 发表于 2022-7-6 18:04:32

非常感谢菲索。我以前从未使用过扩展数据,学习它对我来说是件好事。
 
再次感谢你。

fixo 发表于 2022-7-6 18:25:04

不客气
快乐计算
 
~'J'~
页: [1]
查看完整版本: 标记对象