Selection of Surface Graphics Primitives
Description
This demonstrates the ability to select client graphic primitives, by creating SurfaceGraphics and showing how you can select B-Rep entities within the graphics. You must have a part or assembly open and select a part of sat file which will be read in and displayed as client graphics. Depending on our responses to the program it will create the graphics so that only the node is selectable (which is all that was supported before), so that all of the primitives are selected, or so that only certain primitives are selectable (every other face in this case).Code Samples
To use this sample a part or assembly must be active.
Public Sub SelectablePrimitives() ' Make sure a part or assembly is active. If ThisApplication.ActiveDocumentType <> kAssemblyDocumentObject And ThisApplication.ActiveDocumentType <> kPartDocumentObject Then MsgBox "A part or assembly must be active." Exit Sub End If ' Get the document and it's associated definition. Dim doc As Document Set doc = ThisApplication.ActiveDocument Dim def As ComponentDefinition Set def = doc.ComponentDefinition ' Get an .ipt or SAT filename from the user. Dim dialog As FileDialog Dim filename As String Call ThisApplication.CreateFileDialog(dialog) With dialog .Filter = "Inventor Part File (*.ipt)|*.ipt|ACIS SAT File (*.sat)|*.sat" .FilterIndex = 0 .ShowOpen If .filename = "" Then Exit Sub Else filename = .filename End If End With ' Get the transient B-Rep object. Dim tb As TransientBRep Set tb = ThisApplication.TransientBRep ' If a part was selected, open it inivisibly and get the body. Dim body As SurfaceBody If UCase(Right$(filename, 4)) = ".IPT" Then Dim newPart As PartDocument Set newPart = ThisApplication.Documents.Open(filename, False) ' Copy out the first body of the part. Set body = tb.Copy(newPart.ComponentDefinition.SurfaceBodies.Item(1)) Else ' Read in the sat file. Dim bodies As SurfaceBodies Set bodies = tb.ReadFromFile(filename) Set body = bodies.Item(1) End If ' Create the client graphics object. Dim graphics As ClientGraphics On Error Resume Next Set graphics = def.ClientGraphicsCollection.Item("Test") If Err.Number = 0 Then graphics.Delete End If On Error GoTo 0 Set graphics = def.ClientGraphicsCollection.Add("Test") Dim node As GraphicsNode Set node = graphics.AddNode(1) node.Selectable = True node.DisplayName = "My Solid" Dim answer As VbMsgBoxResult answer = MsgBox("Yes=Node Selectable, No=All Selectable, Cancel=Every other face selectable", vbYesNoCancel + vbQuestion) Dim solidGraphics As SurfaceGraphics Set solidGraphics = node.AddSurfaceGraphics(body) ThisApplication.ActiveView.Update If answer = vbYes Then solidGraphics.ChildrenAreSelectable = False Else solidGraphics.ChildrenAreSelectable = True If answer = vbCancel Then Dim i As Integer For i = 1 To solidGraphics.DisplayedVertices.Count solidGraphics.DisplayedVertices.Item(i).Selectable = False Next For i = 1 To solidGraphics.DisplayedEdges.Count solidGraphics.DisplayedEdges.Item(i).Selectable = False Next For i = 1 To solidGraphics.DisplayedFaces.Count If i Mod 2 = 0 Then solidGraphics.DisplayedFaces.Item(i).Selectable = False End If Next End If End If End Sub