nimble87 发表于 2022-7-5 17:19:24

扩展数据-电气导管、电缆和

大家好,
 
经过几个月的胡闹(拉扯我的头发),我终于发布了我的问题,因为我被这个问题难住了。我的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公司

样品图纸

BIGAL 发表于 2022-7-5 17:53:13

如果你在第一篇文章中看到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

nimble87 发表于 2022-7-5 18:11:35

非常感谢您抽出时间回复Al。这是我迈向目标的下一块垫脚石,我会在有时间的时候看看能拼凑出什么,然后发回更新(更多问题)。干杯

nimble87 发表于 2022-7-5 18:37:26

我已经缩减了所有内容,并尽可能地简化它,现在我正在使用警报框来显示我的结果(稍后将添加导出功能)。
 
折线长度给了我一些问题,我无法将其添加到列表中,然后显示在警报框中。下一个问题是获取属性设置,我尝试合并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]
查看完整版本: 扩展数据-电气导管、电缆和