Quantcast
Channel: Manufacturing DevBlog
Viewing all articles
Browse latest Browse all 518

Create transient 3D arrow with ClientGraphics

$
0
0

By Adam Nagy

As mentioned here, you can create TransientBRep objects and then use them for ClientGraphics. This makes it easy to create 3D shapes, e.g. cylinders and cones, that we could use to create a 3D arrow.

The Inventor API Help already contains a VBA sample that does just that :)

Public Sub ClientGraphics3DPrimitives()
  Dim oDoc As Document
  Set oDoc = ThisApplication.ActiveDocument' Set a reference to component definition of the active document.' This assumes that a part or assembly document is active
  Dim oCompDef As ComponentDefinition
  Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition' Check to see if the test graphics data object already exists.' If it does clean up by removing all associated of the client ' graphics from the document. If it doesn't create it
  On Error Resume Next
  Dim oClientGraphics As ClientGraphics
  Set oClientGraphics = _
    oCompDef.ClientGraphicsCollection.Item("Sample3DGraphicsID")
  If Err.Number = 0 Then
    On Error GoTo 0' An existing client graphics object was successfully ' obtained so clean up
    oClientGraphics.Delete' Update the display to see the results
    ThisApplication.ActiveView.Update
  Else
    Err.Clear
    On Error GoTo 0' Set a reference to the transient geometry object ' for user later
    Dim oTransGeom As transientGeometry
    Set oTransGeom = ThisApplication.transientGeometry' Create the ClientGraphics object.
    Set oClientGraphics = _
      oCompDef.ClientGraphicsCollection.Add("Sample3DGraphicsID")' Create a new graphics node within the client graphics objects
    Dim oSurfacesNode As GraphicsNode
    Set oSurfacesNode = oClientGraphics.AddNode(1)

    Dim oTransientBRep As TransientBRep
    Set oTransientBRep = ThisApplication.TransientBRep

    ' Create a point representing the center of the bottom of ' the cone
    Dim oBottom As Point
    Set oBottom = _
      ThisApplication.transientGeometry.CreatePoint(0, 0, 0)' Create a point representing the tip of the cone
    Dim oTop As Point
    Set oTop = _
      ThisApplication.transientGeometry.CreatePoint(0, 10, 0)' Create a transient cone body
    Dim oBody As SurfaceBody
    Set oBody = oTransientBRep.CreateSolidCylinderCone( _
      oBottom, oTop, 5, 5, 0)' Reset the top point indicating the center of the top of ' the cylinder
    Set oTop = ThisApplication.transientGeometry.CreatePoint( _
      0, -40, 0)' Create a transient cylinder body
    Dim oCylBody As SurfaceBody
    Set oCylBody = oTransientBRep.CreateSolidCylinderCone( _
      oBottom, oTop, 2.5, 2.5, 2.5)' Union the cone and cylinder bodies
    Call oTransientBRep.DoBoolean( _
      oBody, oCylBody, kBooleanTypeUnion)' Create client graphics based on the transient body
    Dim oSurfaceGraphics As SurfaceGraphics
    Set oSurfaceGraphics = oSurfacesNode.AddSurfaceGraphics(oBody)' Update the view to see the resulting curves
    ThisApplication.ActiveView.Update
  End If
End Sub

The result:

Arrow
 

 


Viewing all articles
Browse latest Browse all 518

Trending Articles