扩展数据-电气导管、电缆和
大家好,经过几个月的胡闹(拉扯我的头发),我终于发布了我的问题,因为我被这个问题难住了。我的lisp技能是一个正在进行的工作,是一个产品或多年来扫描论坛页面。
我是一名电气设计师,主要从事地下高压和低压网络的设计。我正在尝试使用lisp简化我起草设计的方式,lisp能够导出数据以填充计划等。
标准设计包括(A)电气支柱(具有支柱类型属性和可见性状态的动态块),(B)支柱之间的导管路径(多段线),©沟槽细节块(确定导管布置的可见性状态)和(D)电缆块(确定电缆类型的可见性状态)。
https://www.cadtutor.net/forum/attachment.php?attachmentid=59049&cid=1&stc=1
这是我脑海中一直在想象的Lisp程序的分解:
[列表]
[*]选择起始支柱/设备(A)-Lisp以记录支柱桩号属性和可见性状态。
[*]选择端柱/设备(A)-同上。
[*]选择上述支柱之间的沟槽路线(B)-拾取导管多段线。
[*]选择trench detail©-Lisp以记录trench details当前的可见性状态。
[*]选择cable-Lisp以记录选定电缆的可见性状态。
[/列表]
从我所做的所有阅读中,我认为最好的方法是使用扩展数据将所有收集的信息写入导管/多段线。实际上,导管多段线扩展数据将具有起点/终点支柱桩号、导管布置和电缆细节。在将扩展数据写入每个导管/多段线后,我希望能够将所有数据以及每个多段线的长度导出到电子表格中。
下面的链接可能是我找到的最接近我需要的链接,它给了我一些导出问题,我不太确定数据是如何编写的。
http://www.cadtutor.net/forum/showthread.php?31153-将数据添加到多段线并将此数据提取到表中
我附上了一个包含我使用的标准块的文件。
如果有人能帮助我,我将不胜感激,因为你会把我从许多白发中拯救出来!
非常感谢!
AJ公司
样品图纸 如果你在第一篇文章中看到asmi代码,它几乎就是你想要的,你需要一次只做一步,而不是只做一个大程序,然后就完全迷失了方向。
选择块并获取属性详细信息
选择块并获取属性详细信息
根据asmi选择pline
选择block get att settings(块获取att设置)查看下面的转储显示有多少变量连接到一个atribute
;This may be helpfull to add to asmi code
(setq len (vla-get-length plobj)) ; length of pline
(setq stbl (vlax-ename->vla-object (car (entsel "\nSelect 'Begin' block > "))))
(setq atts1 '())
(foreach att (vlax-invoke stbl 'getattributes)
(setq atts1 (cons (vla-get-textstring att) atts1)) ; make a list of attributes textstring is value of attribute
)
; note visibility and visible
(foreach att (vlax-invoke stbl 'getattributes)(vlax-Dump-Object att) )
; IAcadAttributeReference: AutoCAD Attribute Reference Interface
; Property values:
; Alignment = 10
; Application (RO) = #<VLA-OBJECT IAcadApplication 00007ff61bf53318>
; Backward = 0
; Constant (RO) = 0
; Document (RO) = #<VLA-OBJECT IAcadDocument 00000000303ae0c8>
; EntityTransparency = "ByLayer"
; FieldLength = 0
; Handle (RO) = "1FE"
; HasExtensionDictionary (RO) = 0
; Height = 2.0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000038659948>
; InsertionPoint = (275.914 179.372 -999.0)
; Invisible = 0
; Layer = "0 PE Stations"
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; LockPosition (RO) = -1
; Material = "ByLayer"
; MTextAttribute = 0
; MTextAttributeContent = ""
; MTextBoundaryWidth = 0.0
; MTextDrawingDirection = 5
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 49
; ObjectID32 (RO) = 49
; ObjectName (RO) = "AcDbAttribute"
; ObliqueAngle = 0.0
; OwnerID (RO) = 46
; OwnerID32 (RO) = 46
; PlotStyleName = "Color_7"
; Rotation = 0.0
; ScaleFactor = 1.0
; StyleName = "Standard"
; TagString = "STN"
; TextAlignmentPoint = (277.248 180.372 -999.0)
; TextGenerationFlag = 0
; TextString = "S1"
; Thickness = 0.0
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000000386594c0>
; UpsideDown = 0
; Visible = -1
非常感谢您抽出时间回复Al。这是我迈向目标的下一块垫脚石,我会在有时间的时候看看能拼凑出什么,然后发回更新(更多问题)。干杯 我已经缩减了所有内容,并尽可能地简化它,现在我正在使用警报框来显示我的结果(稍后将添加导出功能)。
折线长度给了我一些问题,我无法将其添加到列表中,然后显示在警报框中。下一个问题是获取属性设置,我尝试合并BIGAL的建议,但一直得到“AutoCAD变量设置被拒绝:”OSMODE“nil”。现在,我已经将其设置为返回每个项目的句柄,我想让它显示开始和结束块属性“STN”和沟槽细节可见性状态(或将可见性状态作为字段的属性,这是最简单的)
如有任何意见,我们将不胜感激。
干杯
(defun c:TESTW(/ plObj stBl enBl tren len datLst)
(vl-load-com)
(if
(and
(setq plObj(vlax-ename->vla-object (car (entsel "\nSelect trench to write > "))))
(setq stBl(entsel "\nSelect 'start' block > "))
(setq enBl(entsel "\nSelect 'end' block > "))
(setq tren(entsel "\nSelect trench detail > "))
); end and
(progn
(setq
len (vla-get-length plObj)
stBl(cdr(assoc 5(entget(car stBl))))
enBl(cdr(assoc 5(entget(car enBl))))
tren(cdr(assoc 5(entget(car tren))))
datLst(list(cons 1 stBl)(cons 2 enBl)(cons 3 tren)
;(cons 4 len)
)
); end setq
(vlax-ldata-put plObj "Trench Data" datLst)
); end progn
);end if
(princ)
); c:TESTW
(defun c:TESTR(/ rObj datLst)
(vl-load-com)
(if(and
(setq rObj(entsel "\nSelect trench to read > "))
(setq datLst(vlax-ldata-get(car rObj) "Trench Data"))
); and
(alert(strcat "Start block: "(cdr(assoc 1 datLst))
"\n\nEnd block: "(cdr(assoc 2 datLst))
"\n\nTrench detail: "(cdr(assoc 3 datLst))
"\n\nLength: can't get length here?" ))
(alert "\nNo data found. ")
); end if
(princ)
); end of c:TESTR
页:
[1]