区域标签更改
你好我开始使用MAC LEE的程序区域标签,但我有一些问题,如果可以更改的话。
必须说,这是一个好节目。
我从事土木工程,我开始使用这个程序计算剖面中多段线的面积。现在结果是成排的,我试图在哥伦布得到它,但很不幸。我换了桌子,但结果在哥伦布不成立。
我想知道是否有可能在哥伦比亚获得结果(挖掘、路堤、砾石、腐殖质等)。这有助于轻松计算材料的体积。附加将能够结束一个配置文件并启动另一个配置文件,但在下一行中,然后将结果附加到上一个配置文件的表中。另外,程序如何读取层的名称,然后将其排序到适当的列中,这将是早期定义的(挖掘、路堤、砾石、腐殖质-表中的列,然后我将单击纵断面中砾石的多段线,程序将在砾石列中支持result,而不是在第一列的开头)。这将是有用的,因为一些配置文件没有相同的材料。
现在,如果这是一个简单的项目(不是很多配置文件),我用Civil做配置文件,因为它得到的配置文件是dinamic的,如果它是更改的东西,它支持它和计算,但它需要很多时间来做一个好的表面。我们有一些其他的剖面程序,但不是dinamic,我们必须单独绘制材料,如果我们改变面积,我们可以手动更改结果(excel)并计算它,。。。
现在,如果一切都可以在AC中完成,那么我们可以取出选项卡,将其插入excel,或者我们可以执行AF(到文件),然后在excel中修复它,。。。
类似这样(我们必须将材料的体积与轮廓一起添加)。
普里卡兹。xls公司 我在这里写这个是因为我不能在你的页面上做连接(这是一个好页面,有用) 我很高兴你能发现我的程序很有用,但是我不希望修改这个程序到你描述的程度,以满足一个人的需要。 只是想一下负荷。。。您是否可以使用Excel的VLookup/HLoopkup函数来实现您想要的?一、 e.从Lee代码生成的“表”您只需将其用作“数据库”的形式,然后生成的表使用Excel的一个或多个查找公式从Lee代码生成的表中提取相关数据项。
这是我过去从通过数据提取生成的表中执行的操作。我保留了那个文件,所以只要我需要更新这些区域,我就可以简单地覆盖它。然后只需打开我计算的Excel文件,更新就会自动提取。 Irneb thanx,我会试着用这个做点什么,。。。。
现在问题更严重了,因为我还需要多段线的名称,因为我在命名层上有所有多段线。现在我可以把这些数字复制到excel中,但它不是dinamic。现在我必须修改LEE的代码,这个表将支持多段线的层和面积的nam,但我正在尝试,但我不像LEE那样是程序员,并尝试使用excel。
首先我用eattext做了这个,但我们必须在超链接上做所有的配置文件,然后在excel中编辑它。(但我想要迪纳米克) 我不知道“动态”。。。也许您应该更深入地研究数据提取(您可以指定哪一层上哪种类型的实体的哪些属性等,然后将其放置在XLS文件的各个列中)。但我不确定你到底想要什么。 我宁愿使用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中的内容也会更改。 最接近这一点的是数据提取。您想要的听起来像是DWG文件的ODBC驱动程序。是的,那么Excel文件可以通过SQL查询直接链接到DWG中的任何内容。但不幸的是,没有这样的事情-ADesk只提供了从另一个方向提取的数据(即从ACad中导出到Excel)。
当然,您可以制作一个lisp,只需单击一个按钮即可更新Excel文件。这接近李的代码所做的。但是如果你想根据你的特殊需要定制它,那么你必须自己修改它,或者找一个手头有足够时间的人。如果希望更改在DWG中发生时反映在XLS中,可以通过向lisp添加反应器来实现。尽管我建议不要这样做,因为这会让你的ACad慢得无法衡量! 非常感谢。我将使用数据提取,作为使用的场合,但如果它会改变表面轮廓,将是那些在Excel中手动引入的数据。
我认为这样的事情已经存在,因为我假设很多人或sprogramiralo使用动态普通AutoCAD Civil 3D作为纵断面,但它们在AutoCAD中不会更改,而是作为Excel中的一个区域,因为我假设这样做会更容易将Excel链接到AutoCAD,只有在AutoCAD中的数据更改时才会更改。
我不是程序员,
我只使用AutoCAD,但我希望以一种简单的方式处理某些重复和例行的事情,使事情快速、高效地运行,并减少出错的机会
页:
[1]
2