CADkitt 发表于 2022-7-5 16:36:33

从块生成bom表列表

编辑:
看了这个
起初我不想去excel,但看了之后。。。。这让我改变了主意。
 
 
 
我正在做一个自动化bom表的项目。
我在网上搜索了一下,发现:
用于制作属性表的c#程序:
http://through-the-interface.typepad.com/through_the_interface/2007/06/creating_a_tabl.html
不知道如何运行
用于创建属性表的lisp。
http://forums.cadalyst.com/showthread.php?t=6430
效果很好,但遗漏了一些非常重要的东西。请参见此图:

 
我用了eattext
这一功能强大的autocad功能与其他功能强大的autocad功能一样,只适用于90%的用户,但缺少以下功能:
没有气球数字添加,可以做到相当容易的手。
当块位于模型空间中时,不能在图纸空间中使用。这总是。。。
解决方法是使用chspace,但规模是错误的。AAAAA RGH
 
总之,对我来说最好的方法是更新lisp。
或者有人已经这样做了,想要分享或帮助?
我认为合并相同的块名将是最困难的,所以如果有人知道如何做到这一点?
从第二个链接到lisp表的属性:
(Defun c:attable (/ at>att at>item at>set atable cnt cw ena nc nr pt rh)
   (vl-load-com)
   ;; GET_ATTS BY BILL KRAMER
   (defun get_ATTS (EN / EL ATTS)
(setq EL (entget EN))
(setq ENA (cdr (assoc 2 EL))) ; wiz
(if (and (= (cdr (assoc 0 EL)) "INSERT")
       (= (cdr (assoc 66 EL)) 1)
    ) ;_ end and
    (progn
        (setq EN (entnext EN)
              EL (entget EN)
        ) ;_ end setq
        (while (= (cdr (assoc 0 EL)) "ATTRIB")
          (setq ATTS (cons (list
                               (vla-get-ObjectID
                                     (vlax-ename->vla-object EN)
                               ) ; wiz
                               (cdr
                                     (assoc 2 EL)
                               ) ;_ end_cdr
                               (cdr (assoc 1 EL))
                             ) ;_ end_list
                             ATTS
                     ) ;_ end_cons
                  EN   (entnext EN)
                  EL   (entget EN)
          ) ;_ end setq
        ) ;_ end while
        (list ena (reverse ATTS)) ; wiz
    ) ;_ end progn
) ;_ end if
   ) ;_ end_defun
   (if        (setq at>set (ssget '((0 . "INSERT"))))
(progn
    (setq at>att
             (mapcar 'get_atts
                     (vl-remove-if
                       'listp
                       (mapcar 'cadr (ssnamex at>set))
                     ) ;_ end_vl-remove-if
             ) ;_ end_mapcar
    ) ;_ end_setq
    (setq PT (getpoint "\nTable insertion point: ")
          RH (* 2.0 (getvar "TEXTSIZE"))
          CW (* 20.0 (getvar "TEXTSIZE"))
          NR (+ 2 (length at>att))
          NC (1+ (length (cadar at>att)))
    ) ;_ end_setq
    (setq
        aTable (vla-addtable
                   (vla-get-modelspace
                     (vla-get-activedocument
                           (vlax-get-acad-object)
                     ) ;_ end_vla-get-activedocument
                   ) ;_ end_vla-get-modelspace
                   (vlax-3d-point PT)
                   NR
                   NC
                   RH
                   CW
             ) ;_ end_vla-addtable
    ) ;_ end_setq
    (vla-setcellvalue aTable 0 0 "B.O.M.")
    (vla-setcellvalue aTable 1 0 "Block Name")
    (vla-setcellvalue aTable 1 1 "Attributes")
    (vla-MergeCells aTable 1 1 1 (length (cadar at>att)))
    (setq CNT 2) ;_ end_setq
    (foreach Item at>att
        (vla-setcellvalue aTable CNT 0 (car Item))
        (setq at>item 1)
        (while (<= at>item (length (cadar at>att)))
          (vl-catch-all-apply
                '(lambda ()
                     (vla-settext
                       aTable
                       CNT
                       at>item
                       (strcat
                             "%<\\AcObjProp Object(%<\\_ObjId "
                             (itoa (car (nth (1- at>item) (cadr Item))))
                             ">%).TextString>%"
                       ) ;_ end_strcat
                     ) ;_ end_vla-setcellvalue
               ) ;_ end_lambda
          ) ;_ end_vl-catch-all-apply
          (setq at>item (1+ at>item))
        ) ;_ end_while
        (setq CNT (1+ CNT))
        ;;ready next row
    ) ;_ end_foreach
) ;_ end_progn
   ) ;_ end_if
   (princ)
) ;_ end_Defun
编辑用于计算块的mac代码,并合并相同的块:
http://www.cadtutor.net/forum/showthread.php?51370-块列表&突出显示=列表+块
现在让Franken一起构建2

littlepeterpan8 发表于 2022-7-5 17:48:12

Hjx,我有同样的要求!有谁能帮帮我们吗!
页: [1]
查看完整版本: 从块生成bom表列表