Srajcka 发表于 2022-7-6 08:58:48

区域标签更改

你好
 
我开始使用MAC LEE的程序区域标签,但我有一些问题,如果可以更改的话。
必须说,这是一个好节目。
我从事土木工程,我开始使用这个程序计算剖面中多段线的面积。现在结果是成排的,我试图在哥伦布得到它,但很不幸。我换了桌子,但结果在哥伦布不成立。
我想知道是否有可能在哥伦比亚获得结果(挖掘、路堤、砾石、腐殖质等)。这有助于轻松计算材料的体积。附加将能够结束一个配置文件并启动另一个配置文件,但在下一行中,然后将结果附加到上一个配置文件的表中。另外,程序如何读取层的名称,然后将其排序到适当的列中,这将是早期定义的(挖掘、路堤、砾石、腐殖质-表中的列,然后我将单击纵断面中砾石的多段线,程序将在砾石列中支持result,而不是在第一列的开头)。这将是有用的,因为一些配置文件没有相同的材料。
现在,如果这是一个简单的项目(不是很多配置文件),我用Civil做配置文件,因为它得到的配置文件是dinamic的,如果它是更改的东西,它支持它和计算,但它需要很多时间来做一个好的表面。我们有一些其他的剖面程序,但不是dinamic,我们必须单独绘制材料,如果我们改变面积,我们可以手动更改结果(excel)并计算它,。。。
现在,如果一切都可以在AC中完成,那么我们可以取出选项卡,将其插入excel,或者我们可以执行AF(到文件),然后在excel中修复它,。。。
 
类似这样(我们必须将材料的体积与轮廓一起添加)。

普里卡兹。xls公司

Srajcka 发表于 2022-7-6 09:09:35

我在这里写这个是因为我不能在你的页面上做连接(这是一个好页面,有用)

Lee Mac 发表于 2022-7-6 09:15:11

我很高兴你能发现我的程序很有用,但是我不希望修改这个程序到你描述的程度,以满足一个人的需要。

irneb 发表于 2022-7-6 09:17:08

只是想一下负荷。。。您是否可以使用Excel的VLookup/HLoopkup函数来实现您想要的?一、 e.从Lee代码生成的“表”您只需将其用作“数据库”的形式,然后生成的表使用Excel的一个或多个查找公式从Lee代码生成的表中提取相关数据项。
 
这是我过去从通过数据提取生成的表中执行的操作。我保留了那个文件,所以只要我需要更新这些区域,我就可以简单地覆盖它。然后只需打开我计算的Excel文件,更新就会自动提取。

Srajcka 发表于 2022-7-6 09:21:58

Irneb thanx,我会试着用这个做点什么,。。。。
现在问题更严重了,因为我还需要多段线的名称,因为我在命名层上有所有多段线。现在我可以把这些数字复制到excel中,但它不是dinamic。现在我必须修改LEE的代码,这个表将支持多段线的层和面积的nam,但我正在尝试,但我不像LEE那样是程序员,并尝试使用excel。
首先我用eattext做了这个,但我们必须在超链接上做所有的配置文件,然后在excel中编辑它。(但我想要迪纳米克)

irneb 发表于 2022-7-6 09:27:55

我不知道“动态”。。。也许您应该更深入地研究数据提取(您可以指定哪一层上哪种类型的实体的哪些属性等,然后将其放置在XLS文件的各个列中)。但我不确定你到底想要什么。

Srajcka 发表于 2022-7-6 09:34:24

我宁愿使用eattext,也不愿导出到excel。
(defun C:FA(/ acsp adoc cpt elist en ent fld lead_obj lpt mtx oid osm)
(vl-load-com)
(or adoc
   (setq adoc
      (vla-get-activedocument
          (vlax-get-acad-object)
          )
       )
   )
(if (and
   (= (getvar "tilemode") 0)
   (= (getvar "cvport") 1)
   )
   (setq acsp (vla-get-paperspace adoc))
   (setq acsp (vla-get-modelspace adoc))
   )
(setq osm (getvar "osmode"))
(setvar "osmode" 0)

(while
   (setq ent (entsel "\nSelect pline or hit Enter to exit"))
    (setq en (car ent))
    (if (wcmatch (cdr (assoc 0 (setq elist (entget en)))) "*POLYLINE")
      (progn
    (setq cpt (trans (cadr ent)1 0)
          lpt (trans (getpoint cpt "\nPick the ending point of leader:") 1 0)
          )

    (setq oID (vla-get-objectid (vlax-ename->vla-object en)))
    (setq fld
       (strcat
         (strcat "%<\\AcObjProp Object(%<\\_ObjId "
             (itoa oID)
             ">%).Layer \\f \"%lu2%pr2\">%" " = " "%<\\AcObjProp Object(%<\\_ObjId "
             (itoa oID)
             ">%).Area \\f \"%lu2%pr2\">%" " M2 "
             ))
          )
    (setq mtx (vlax-invoke
            acsp 'AddMText lpt 0.0 fld)
          )
    (vlax-put mtx
          'AttachmentPoint
          (cond ((> (car cpt) (car lpt))
             6
             )
            ((< (car cpt) (car lpt))
             4
             )
            (T 4)
            )
          )
    (vlax-put mtx 'Height (getvar "textsize"))
    )
      )
    )
(setvar "osmode" osm)
(princ)
)
(princ "\n Start command with FA ...")
(princ)
或将做的表格,然后使用
(defun C:AREATT ( / en obj tblobj row col lst pt rows cols what fld)
;;;; Command: AREATT (AREA to table)
;;;; Posted http://dwg.ru/f/showthread.php?t=14528
;;;; This command allows you to insert into the specified table cell and the subsequent
;;;; Text field (FIELD), containing the value of the square of the selected object.
;;;; Depending on the choice of navigation options by rows or columns.
;;;; If rows or columns coming to an end, they are automatically added.
;;;; Formatting cell is taken as specified in the first cell.
;;;; Precision of rounding and scaling factor are given the option "Setting"
;;;; Since this field is associated with a particular object, if you change
;;;; Object field is recalculated (need updating field)
;;;; Code can be stored in a file areatt.lsp
;;;; Possible macro to a button or menu item:
;;;; ^ C ^ C (if (not C: AREATT) (load "AREATT")); AREATT;
(vl-load-com)
(or *SCALE* (setq *SCALE* 1))
(or *PREC* (setq *PREC* 2))
(or *TEXTSIZE* (setq *TEXTSIZE* (getvar "TEXTSIZE")))
(or *SUFF* (setq *SUFF* ""))(or *PREF* (setq *PREF* ""))
(setq *SUFF* (vl-princ-to-string *SUFF*))
(setq *PREF* (vl-princ-to-string *PREF*))
(princ "\nCurrent scale = ")(princ *SCALE*)
(princ " Current precision = ")(princ *PREC*)
(princ " Text size = ")(princ *TEXTSIZE*)
(princ " Prefix= ")(princ *PREF*)(princ " Suffix= ")(princ *SUFF*)
(setqtblobj nil tblobj (ssget "_X" '((0 . "ACAD_TABLE"))))
(setq lst (mapcar 'vlax-ename->vla-object(vl-remove-if 'listp (mapcar 'cadr (ssnamex tblobj)))))
(setqtblobj nil)
(cond
((and lst
      (or (initget "Row Col Setting _Row Col Setting") t)
      (or (while (=(setq what (getkword "\nNavigate <on the Columns>: "))
                     "Setting")
                  (princ "\nNew scale <")(princ *SCALE*)(princ "> : ")
   (initget 6)
   (if (setq en (getdist))(setq *SCALE* en))
   (princ "\nNewprecision <")(princ *PREC*)(princ "> : ")
   (initget 4)
   (if (setq en (getint))(setq *PREC* en))
   (princ "\nNew text size <")(princ *TEXTSIZE*)(princ "> : ")
   (initget 6)
   (if (setq en (getdist))(setq *TEXTSIZE* en))
   (princ "\nPrefix (space - clear) <")(princ *PREF*)(princ "> : ")
   (if (= (setq en (getstring t)) " ")(setq en ""))
   (if (= (substr (vl-string-left-trim "\/" en) 1 2) "U+")
   (setq en (strcat "\\" (vl-string-left-trim "\/" en))))(setq *PREF* en)
   (princ "\nSuffix? (space - clear) <")(princ *SUFF*)(princ "> : ")
   (if (= (setq en (getstring t)) " ")(setq en ""))
   (if (= (substr (vl-string-left-trim "\/" en) 1 2) "U+")
   (setq en (strcat "\\" (vl-string-left-trim "\/" en))))(setq *SUFF* en)
            (initget "Row Col Setting _Row Col Setting")
            )
            t
            )
      (or what (setq what "Col"))
      (or
       (while (nulltblobj)
         (initget 1)
         (setq pt (getpoint "\nSpecify a first table cell:"))
         (mapcar '(lambda (x)
          (or tblobj
            (and
                (= :vlax-true (vla-HitTest x
                              (vlax-3d-point (trans pt 1 0))
                              (vlax-3d-point (trans (getvar "VIEWDIR") 1 0))
                              'row 'col))
                (setq tblobj x)
                )
            )
          )
       lst)
         (if (nulltblobj)(princ " ** missing **"))
         )
       t)
      (or
          (vlax-write-enabled-p tblobj)
          (and
            (princ "\nTable on a locked layer!")
            nil
            )
          )
      (setq pt (vla-GetCellAlignment tblobj row col))
      )
   (setq rows (vla-get-rows tblobj))
   (setq cols (vla-get-columns tblobj))
   (while (setq en (car (entsel "\nSelect the entity to insert it square into the table (ENTER - exit): " )))
   (cond
      ((vlax-property-available-p (setq en (vlax-ename->vla-object en)) 'Area)
         (setq fld (strcat "%<\\AcObjProp Object(%<\\_ObjId "
            (vl-princ-to-string(Get-ObjectID-x86-x64 en))
               ">%).Area \\f \"%lu2%ps["*PREF* "," *SUFF*
               "]%pr"(itoa *PREC*) "%ct8["(vl-princ-to-string *SCALE*)"]\">%"
               ) ;_ strcat
         )
       (cond
         ((= col cols)
         (vla-insertColumns tblobj col (vla-GetColumnWidth tblobj (1- col)) 1)
         (vla-SetCellAlignment tblobj row col pt)
         (setq rows (vla-get-rows tblobj))
         (setq cols (vla-get-columns tblobj))
         
         )
         ((= row rows)
         (vla-insertRows tblobj row (vla-GetRowHeight tblobj (1- row)) 1)
          (vla-SetCellAlignment tblobj row col pt)
         (setq rows (vla-get-rows tblobj))
         (setq cols (vla-get-columns tblobj))
      )
         (t nil))
       (vla-SetText tblobj row col fld)
       (if (= what "Col")(setq col (1+ col))(setq row (1+ row)))
      
      )
      (t(princ "\nThis primitive can not get property Area!"))
   )
   
   )
)
(t
    (princ "\nTables not found!")
)
)
(princ)
)
;;------------------------------------------------ --------
;; Function gets a string representation ObjectID
;; Whether AutoCAD x86 or x64
;; Source: https: / / discussion.autodesk.com / forums / message.jspa? MessageID = 6172961
;; Http://forum.dwg.ru/showthread.php?t=51822
(defun Get-ObjectID-x86-x64 (obj / util)
(setq util (vla-get-Utility (vla-get-activedocument (vlax-get-acad-object))))
(if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj)))
(if (= (type obj) 'VLA-OBJECT)
    (if (> (vl-string-search "x64" (getvar "platform")) 0)
      (vlax-invoke-method util "GetObjectIdString" obj :vlax-False)
      (rtos (vla-get-objectid obj) 2 0)
    )
)
)
我认为有一个链接可能与AutoCAD中的内容相关,当AutoCAD中的内容更改时,Excel中的内容也会更改。

irneb 发表于 2022-7-6 09:40:49

最接近这一点的是数据提取。您想要的听起来像是DWG文件的ODBC驱动程序。是的,那么Excel文件可以通过SQL查询直接链接到DWG中的任何内容。但不幸的是,没有这样的事情-ADesk只提供了从另一个方向提取的数据(即从ACad中导出到Excel)。 
当然,您可以制作一个lisp,只需单击一个按钮即可更新Excel文件。这接近李的代码所做的。但是如果你想根据你的特殊需要定制它,那么你必须自己修改它,或者找一个手头有足够时间的人。如果希望更改在DWG中发生时反映在XLS中,可以通过向lisp添加反应器来实现。尽管我建议不要这样做,因为这会让你的ACad慢得无法衡量!

Srajcka 发表于 2022-7-6 09:47:30

非常感谢。我将使用数据提取,作为使用的场合,但如果它会改变表面轮廓,将是那些在Excel中手动引入的数据。
我认为这样的事情已经存在,因为我假设很多人或sprogramiralo使用动态普通AutoCAD Civil 3D作为纵断面,但它们在AutoCAD中不会更改,而是作为Excel中的一个区域,因为我假设这样做会更容易将Excel链接到AutoCAD,只有在AutoCAD中的数据更改时才会更改。

Srajcka 发表于 2022-7-6 09:49:02

 
我不是程序员,
我只使用AutoCAD,但我希望以一种简单的方式处理某些重复和例行的事情,使事情快速、高效地运行,并减少出错的机会
页: [1] 2
查看完整版本: 区域标签更改