Inventor Customization

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

Create Mesh from Solid

167 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

ADN Support Specialist
Posts: 467
Registered: ‎06-02-2009
Message 2 of 2 (147 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
        
    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

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

Announcements
Welcome to the new Autodesk Community!
If this is your first visit, click here to get started and make the most of the Community. Let us know what you think of the new experience in the Community Feedback Forum.

Need installation help?

Start with some of our most frequented solutions to get help installing your software.

Ask the Community


Inventor Exchange Apps

Created by the community for the community, Autodesk Exchange Apps for Autodesk Inventor helps you achieve greater speed, accuracy, and automation from concept to manufacturing.

Connect with Inventor

Twitter

Facebook

Blogs

Pinterest

Youtube