06-05-2020
04:22 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
06-05-2020
04:22 PM
Hi,
I have a code that is working in Visual studio. But when i copy it to an iLogic rule it does not work for the 2e connector. it looks like your previous problem. the connector does not get selected. therefore executing the edit command does not work. (i left 2 msgboxes in the code that will help you see it.) Anyway im trying to get it to work for a couple of hours now and i realy need to get to bed. but here is what i have so far. Maby some one else is seeing why the 2e connector is not getting selected.
Public Class ThisRule 'Private Shared docEvents As DocumentEvents Private busy As Boolean = False Sub Main() ' Get the collection of control definitions. Dim oControlDefs As ControlDefinitions = ThisApplication.CommandManager.ControlDefinitions ' check if this document is a part document If ThisDoc.Document.DocumentType <> DocumentTypeEnum.kPartDocumentObject Then MessageBox.Show("The current document must be a part file", "Incorrect Document Type") Return End If 'Enter the BIM Content environment ThisApplication.CommandManager.ControlDefinitions.Item("AEC_Exchange:Environment").Execute() 'Access the Browser and Activate the "Bim Content" Browser Pane Dim oPartDoc As PartDocument = ThisDoc.Document Dim bps = oPartDoc.BrowserPanes Dim bimContentPane As BrowserPane = Nothing For Each BP As BrowserPane In bps ' the name is case sensitive original it worked only accidentally (BIM should be with capital letters) ' ' i made the if statement case insensitive ;-) If BP.Name.Equals("Bim Content", StringComparison.InvariantCultureIgnoreCase) Then BP.Activate() bimContentPane = BP End If Next 'Define the Appearance variables Dim oElecAppearance As Asset = oPartDoc.Assets.Item("Connection_Electrical") Dim oMechAppearance As Asset = oPartDoc.Assets.Item("Connection_Mechanical") Dim oPipeAppearance As Asset = oPartDoc.Assets.Item("Connection_Piping") 'Define the BIM Component Information Dim oPartDocBIM As BIMComponent = oPartDoc.ComponentDefinition.BIMComponent 'Check through each Face on the body and see if uses the special appearance. For Each oSrfBody As SurfaceBody In oPartDoc.ComponentDefinition.SurfaceBodies For Each oFace As Face In oSrfBody.Faces If oFace.Appearance.DisplayName = oElecAppearance.DisplayName Then Dim Elec_Coll As ObjectCollection Elec_Coll = ThisApplication.TransientObjects.CreateObjectCollection Elec_Coll.Add(oFace) 'Create Electrical Connector Definition Dim oElecConn As BIMElectricalConnectorDefinition oElecConn = oPartDocBIM.Connectors.CreateElectricalConnectorDefinition(Elec_Coll) oElecConn.SystemType = BIMElectricalSystemTypeEnum.kPowerBalancedElectricalSystemType 'Add the Electrical BIM Connection Dim con As BIMConnector = oPartDocBIM.Connectors.Add(oElecConn) con.Name = "Elec_Conn_" & oPartDocBIM.Connectors.Count 'Create a Browser Node and select the new connector via the Browser Dim oTopBrowserNode As BrowserNode = bimContentPane.TopNode For Each oNode As BrowserNode In oTopBrowserNode.BrowserNodes If Right(oNode.FullPath, 22) = "MEP System Connections" Then oNode.Expanded = True '<-- this is an important change Dim oSubNode As BrowserNode = oNode.BrowserNodes.Item(5) oSubNode.Expanded = True '<-- this is an important change Dim oConnNode As BrowserNode = oSubNode.BrowserNodes.Item(con.Name) MsgBox("before select") oConnNode.DoSelect() msgbox("After select") 'Open and edit the new Electrical BIM Connector Dim oControlDef As ControlDefinition = oControlDefs.Item("AEC_Exchange:Command:Connector:Edit") ' Execute the command. oControlDef.Execute() Dim docEvents As DocumentEvents = ThisApplication.ActiveDocument.DocumentEvents AddHandler docEvents.OnChange, AddressOf docEvents_OnChange busy = True While (busy = True) System.Threading.Thread.Sleep(50) ThisApplication.UserInterfaceManager.DoEvents() End While RemoveHandler docEvents.OnChange, AddressOf docEvents_OnChange End If Next End If Next Next End Sub Private Sub docEvents_OnChange(ReasonsForChange As CommandTypesEnum, BeforeOrAfter As EventTimingEnum, Context As NameValueMap, ByRef HandlingCode As HandlingCodeEnum) If (BeforeOrAfter = EventTimingEnum.kAfter And Context(1) = "API Change") Then busy = False End If End Sub End Class
Jelte de Jong
Did you find this post helpful? Feel free to Like this post.
Did your question get successfully answered? Then click on the ACCEPT SOLUTION button.
Blog: hjalte.nl - github.com