• Industries
  • Products
  • Buy
  • Services & Support
  • Communities
  • Discussion Groups

    Autodesk Inventor Customization

    Reply
    New Member
    Posts: 1
    Registered: ‎10-17-2012

    Create Mesh from Solid

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

    Hello,

     

    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.

     

    Example:

    FaceterDevNormal = 0.1;

    FaceterDevSurface = 0.1;

    FaceterMeshType = 2;

     

    Thanks for further help.

    Regards,

    Markus

    Please use plain text.
    ADN Support Specialist
    Posts: 202
    Registered: ‎06-02-2009

    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
            
        Next
        
        ThisApplication.ActiveView.Update
       
    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
            Err.clear
            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

     

    Regards,

    Philippe.

     



    Philippe Leefsma
    Developer Technical Services
    Autodesk Developer Network

    Please use plain text.