Здравствуйте!
То ли действительно есть такой недочёт в Civil 3D COM API, то ли я куда-то не туда смотрю... Но мне не удалось найти никакого относительно простого способа узнать имя сети, к которой принадлежит труба или колодец на чертеже. В .NET вообще нет с этим проблем, есть специальное свойство:
http://docs.autodesk.com/CIV3D/2019/ENU/API_Reference_Guide/html/755b6e1e-e16a-ac8f-6086-f1db4a32bc74.htm. А вот в COM - ничего! Ни ссылку на сеть не получить, ни имя её, ни каких-то ещё данных, по которым её можно быстро вычислить... Единственный способ, которым мне удалось получить имя сети - это перебор всех сетей чертежа и перебор объектов этих сетей, пока не найдётся элемент с именем, которое соответствует элементу, для которого ищется сеть (lisp для Civil 3d 2020):
(defun c:GetPartNetName (/ part isPipe partName pipeApp
pipeDoc nets i j net
parts curPartName netName
)
(setq
part (vlax-ename->vla-object (car (entsel)))
isPipe (= (vla-get-ObjectName part) "AeccDbPipe")
partName (vla-get-Name part)
)
(setq pipeApp (vlax-get-or-create-object
"AeccXUiPipe.AeccPipeApplication.13.2"
)
)
(setq pipeDoc (vlax-get-property pipeApp 'ActiveDocument))
(setq nets (vlax-get-property pipeDoc 'PipeNetworks))
(setq i (vla-get-Count nets))
(while (and (> i 0) (not netName))
(setq
i (- i 1)
net (vla-item nets i)
)
(setq
parts (if isPipe
(vlax-get-property net 'Pipes)
(vlax-get-property net 'Structures)
)
)
(setq j (vla-get-count parts))
(while (and (> j 0) (not netName))
(setq j (- j 1)
curPartName
(vla-get-Name (vla-item parts j))
)
(if (= curPartName partName)
(setq netName (vla-get-Name net))
)
)
)
(alert netName)
(princ)
)
Может быть, я что-то упускаю?
Пример дампа для трубы:
; IAeccPipe: Интерфейс "Труба"
; Значения свойств:
; Alignment = nil
; Application (RO) = #<VLA-OBJECT IAeccApplication 00000276ae9237f0>
; ClosestPointTo (RO) = ...Индексированное содержимое не выводится...
; Connectors (RO) = #<VLA-OBJECT IAeccConnectors 00000276ae924480>
; Description = "300 ПЭ КОРСИС ID SN8"
; DisplayName (RO) = "Труба-(283)"
; Document (RO) = #<VLA-OBJECT IAeccDocument 00000276ae9240c0>
; EGLDown = 0.0
; EGLUp = 0.0
; EndPoint (RO) = #<VLA-OBJECT 00000276ae9251d0>
; EndStructure (RO) = #<VLA-OBJECT IAeccStructure 00000276a46e6870>
; EntityTransparency = "ПоСлою"
; FlowDirection (RO) = 1
; FlowDirectionMethod = 1
; Handle (RO) = "20555"
; HasExtensionDictionary (RO) = 0
; HGLDown = 0.0
; HGLUp = 0.0
; HoldOnResize = 0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000276aea11478>
; InnerDiameterOrWidth (RO) = 0.3
; InnerHeight (RO) = 0.3
; IsMaxCoverViolated (RO) = ...Индексированное содержимое не выводится...
; IsMinCoverViolated (RO) = ...Индексированное содержимое не выводится...
; Labels (RO) = #<VLA-OBJECT IAeccPipeLabels 00000276ae9d49d0>
; Layer = "К2П_План"
; Length2D (RO) = 39.7856
; Length3D (RO) = 39.7856
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "Global"
; MaximumCover (RO) = 0.0
; MinimumCover (RO) = 0.0
; Name = "Труба-(283)"
; ObjectID (RO) = 42
; ObjectName (RO) = "AeccDbPipe"
; OuterDiameterOrWidth (RO) = 0.364
; OuterHeight (RO) = 0.364
; OwnerID (RO) = 43
; ParamsBool (RO) = #<VLA-OBJECT 00000276ae926970>
; ParamsDouble (RO) = #<VLA-OBJECT 00000276ae926610>
; ParamsLong (RO) = #<VLA-OBJECT 00000276ae926340>
; ParamsString (RO) = #<VLA-OBJECT 00000276ae9262e0>
; PartDataRecord = #<VLA-OBJECT IAeccPartDataRecord 00000276ae926370>
; PartFamily (RO) = #<VLA-OBJECT IAeccPartFamily 0000027695e4e750>
; PartSizeName (RO) = "300 ПЭ КОРСИС ID SN8"
; PartType (RO) = 10
; PlotStyleName = "ByLayer"
; PointAtParam (RO) = ...Индексированное содержимое не выводится...
; Position (RO) = #<VLA-OBJECT IAeccPoint3d 00000276ae926a00>
; ProfileNetworkParts (RO) = #<VLA-OBJECT IAeccGraphProfileNetworkParts 00000276ae9d4fc0>
; Radius (RO) = 0.0
; ShowToolTip = -1
; Slope (RO) = 0.0
; StartPoint (RO) = #<VLA-OBJECT 00000276ae927210>
; StartStructure (RO) = #<VLA-OBJECT IAeccStructure 00000276a46e4470>
; STMPipeMetadata = неподдерживаемый тип результата: 65
; Style = #<VLA-OBJECT IAeccPipeStyle 0000027695e4d310>
; SubEntityType (RO) = 0
; Surface = nil
; SweptShape (RO) = 2
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000276aea11890>
; Visible = -1
; WallThickness (RO) = 0.032
; Поддерживаемые методы:
; ArrayPolar (3)
; ArrayRectangular (6)
; ConnectToPipe (3)
; ConnectToStructure (2)
; Copy ()
; Delete ()
; Disconnect (1)
; GetBoundingBox (2)
; GetExtensionDictionary ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; IsReferenceObject ()
; IsReferenceStale ()
; IsReferenceSubObject ()
; IsReferenceValid ()
; Mirror (2)
; Mirror3D (3)
; Move (2)
; Project2dPointVertically (1)
; ResizeByInnerDiaOrWidth (3)
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetStartAndEndPoints (2)
; SetXData (2)
; SwapPartFamilyAndSize (2)
; TransformBy (1)
; Update ()
Пример дампа для колодца:
; IAeccStructure: Интерфейс "Колодец"
; Значения свойств:
; Alignment = nil
; Application (RO) = #<VLA-OBJECT IAeccApplication 00000276af19a680>
; AutomaticRimSurfaceAdjustment = 1
; BoundingShape (RO) = 1
; ConnectedPipe (RO) = ...Индексированное содержимое не выводится...
; ConnectedPipeNames (RO) = "Труба-(295)"
; ConnectedPipesCount (RO) = 1
; Connectors (RO) = #<VLA-OBJECT IAeccConnectors 00000276af19a740>
; ControlSumpBy = 0
; Description = "Колодец 1 000 мм"
; DisplayName (RO) = "Л-(132)"
; Document (RO) = #<VLA-OBJECT IAeccDocument 00000276af19a920>
; EntityTransparency = "ПоСлою"
; Handle (RO) = "205E1"
; HasExtensionDictionary (RO) = 0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 00000276af0a2db8>
; InnerDiameter (RO) = ...Индексированное содержимое не выводится...
; InnerLength (RO) = ...Индексированное содержимое не выводится...
; InnerWidth (RO) = ...Индексированное содержимое не выводится...
; Labels (RO) = #<VLA-OBJECT IAeccStructureLabels 00000276af27c880>
; Layer = "К2П_План"
; Linetype = "ByLayer"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Name = "Л-(132)"
; ObjectID (RO) = 44
; ObjectName (RO) = "AeccDbStructure"
; OwnerID (RO) = 43
; ParamsBool (RO) = #<VLA-OBJECT 00000276af19a290>
; ParamsDouble (RO) = #<VLA-OBJECT 00000276af19a650>
; ParamsLong (RO) = #<VLA-OBJECT 00000276af199db0>
; ParamsString (RO) = #<VLA-OBJECT 00000276af19a5c0>
; PartDataRecord = #<VLA-OBJECT IAeccPartDataRecord 00000276af19a950>
; PartFamily (RO) = #<VLA-OBJECT IAeccPartFamily 00000276af22dd60>
; PartSizeName (RO) = "Колодец 1 000 мм"
; PartType (RO) = 102
; PipeCenterDepth (RO) = ...Индексированное содержимое не выводится...
; PipeInnerDiaOrWidth (RO) = ...Индексированное содержимое не выводится...
; PipeInvertDepth (RO) = ...Индексированное содержимое не выводится...
; PipeLowestBottomDepth (RO) = 0.425
; PipeOuterBottomDepth (RO) = ...Индексированное содержимое не выводится...
; PipeOuterTopDepth (RO) = ...Индексированное содержимое не выводится...
; PipeUpperTopDepth (RO) = 0.2
; PipeWallThickness (RO) = ...Индексированное содержимое не выводится...
; PlotStyleName = "ByLayer"
; Position (RO) = #<VLA-OBJECT IAeccPoint3d 00000276af19a860>
; ProfileNetworkParts (RO) = #<VLA-OBJECT IAeccGraphProfileNetworkParts 00000276af27c6a0>
; RimElevation = 0.3125
; Rotation = 5.84866
; ShowToolTip = -1
; StructureDiameterOrWidth (RO) = 1.004
; StructureHeight (RO) = 0.4375
; StructureInnerDiameterOrWidth (RO) = 1.0
; StructureInnerLength (RO) = 0.0
; StructureLength (RO) = 0.0
; Style = #<VLA-OBJECT IAeccStructureStyle 00000276af22e6f0>
; SumpDepth = 0.0
; SumpElevation = -0.1
; Surface = nil
; SurfaceAdjustmentValue = 0.0
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 00000276af0a32f0>
; Visible = -1
; Поддерживаемые методы:
; ArrayPolar (3)
; ArrayRectangular (6)
; ConnectToPipe (2)
; Copy ()
; Delete ()
; Disconnect (1)
; GetBoundingBox (2)
; GetExtensionDictionary ()
; GetNextPipeElevation ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; IsConnectedPipeFlowingIn (1)
; IsConnectedPipeFlowingOut (1)
; IsPointInsideStructureRegion (1)
; IsReferenceObject ()
; IsReferenceStale ()
; IsReferenceSubObject ()
; IsReferenceValid ()
; Mirror (2)
; Mirror3D (3)
; Move (2)
; ResizeByPipeDepths ()
; ResizeJunctionStructureByRimAndSumpElevations (3)
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetLocation (1)
; SetXData (2)
; SwapPartFamilyAndSize (2)
; TransformBy (1)
; Update ()
В Object Browser та же картина (ниже - скрины имён свойств для труб)