Inventor Customization

New Member
Posts: 1
Registered: ‎10-17-2012
Message 1 of 2 (180 Views)

Create Mesh from Solid

180 Views, 1 Replies
10-17-2012 08:35 AM



I try to migrate our ObjectArx Api to Inventor. Therefore I need a function to create a mesh from a solid.

With Autocad .Net Api, I can use GetObjectMesh(DbObject obj, MeshFaceterData parameter). Does in the Inventor Api a similiar function exist?

In the parameters I need to set the deviation in the same way as in the Autocad .Net Api.



FaceterDevNormal = 0.1;

FaceterDevSurface = 0.1;

FaceterMeshType = 2;


Thanks for further help.



ADN Support Specialist
Posts: 616
Registered: ‎06-02-2009
Message 2 of 2 (160 Views)

Re: Create Mesh from Solid

10-22-2012 12:18 AM in reply to: Markus67

Hi Markus,


There isn't a way to set the deviation similarly than in AutoCAD, but you need to use the "CalculateFacets" API where you can specify a tolerance. Below is a VBA sample, it can be used on SurfaceBody or Face objects, client graphics are used to visualize the result:


Public Sub GenerateFacets(facetable As Variant)

    Dim tolerance As Double
    Dim VertexCount As Long
    Dim FacetCount As Long
    Dim VertexCoords() As Double
    Dim normals() As Double
    Dim Indices() As Long
    tolerance = 0.003
    Call facetable.CalculateFacets(tolerance, VertexCount, FacetCount, VertexCoords, normals, Indices)
    Dim nbTriangles As Long
    nbTriangles = 0

    Dim i As Integer
    For i = 0 To UBound(Indices) Step 3
        Dim vIndex1 As Integer
        Dim vIndex2 As Integer
        Dim vIndex3 As Integer
        vIndex1 = (Indices(i) - 1) * 3
        vIndex2 = (Indices(i + 1) - 1) * 3
        vIndex3 = (Indices(i + 2) - 1) * 3

        Dim vertex1(2) As Double
        Dim vertex2(2) As Double
        Dim vertex3(2) As Double
        vertex1(0) = VertexCoords(vIndex1)
        vertex1(1) = VertexCoords(vIndex1 + 1)
        vertex1(2) = VertexCoords(vIndex1 + 2)
        vertex2(0) = VertexCoords(vIndex2)
        vertex2(1) = VertexCoords(vIndex2 + 1)
        vertex2(2) = VertexCoords(vIndex2 + 2)
        vertex3(0) = VertexCoords(vIndex3)
        vertex3(1) = VertexCoords(vIndex3 + 1)
        vertex3(2) = VertexCoords(vIndex3 + 2)
        'Call custom method to visualize facet edges
        Call DrawLineGraphics(vertex1, vertex2)
        Call DrawLineGraphics(vertex2, vertex3)
        Call DrawLineGraphics(vertex3, vertex1)
        nbTriangles = nbTriangles + 1
End Sub



Public Sub DrawLineGraphics(startpt() As Double, endpt() As Double)

    Dim doc As Document
    Set doc = ThisApplication.ActiveDocument
    Dim compDef As ComponentDefinition
    Set compDef = doc.ComponentDefinition
    On Error Resume Next
    Dim dataSets As GraphicsDataSets
    Set dataSets = doc.GraphicsDataSetsCollection("LineGraphics")
    Dim clientGraphics As clientGraphics
    Set clientGraphics = compDef.ClientGraphicsCollection("LineGraphics")
    If Err Then
        Set dataSets = doc.GraphicsDataSetsCollection.Add("LineGraphics")
        Set clientGraphics = compDef.ClientGraphicsCollection.Add("LineGraphics")
        Call dataSets.CreateCoordinateSet(1)
        Call clientGraphics.AddNode(1)
        Call clientGraphics(1).AddLineGraphics
    End If
    On Error GoTo 0
    Dim coordSet As GraphicsCoordinateSet
    Set coordSet = dataSets(1)

    Dim coords() As Double
    Call coordSet.GetCoordinates(coords)
    Dim idx As Long
    idx = 3 * coordSet.count
    ReDim Preserve coords(0 To idx + 5)
    coords(idx) = startpt(0)
    coords(idx + 1) = startpt(1)
    coords(idx + 2) = startpt(2)
    coords(idx + 3) = endpt(0)
    coords(idx + 4) = endpt(1)
    coords(idx + 5) = endpt(2)
    Call coordSet.PutCoordinates(coords)
    Dim lineGraphics As lineGraphics
    Set lineGraphics = clientGraphics(1).item(1)
    lineGraphics.CoordinateSet = coordSet
End Sub





Philippe Leefsma
Developer Technical Services
Autodesk Developer Network

Are you familiar with the Autodesk Expert Elites? The Expert Elite program is made up of customers that help other customers by sharing knowledge and exemplifying an engaging style of collaboration. To learn more, please visit our Expert Elite website.
Need installation help?

Start with some of our most frequented solutions or visit the Installation and Licensing Forum to get help installing your software.