Community
Inventor Programming - iLogic, Macros, AddIns & Apprentice
Inventor iLogic, Macros, AddIns & Apprentice Forum. Share your knowledge, ask questions, and explore popular Inventor topics related to programming, creating add-ins, macros, working with the API or creating iLogic tools.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

VBA Enumerate true edges

0 REPLIES 0
Reply
Message 1 of 1
klemen_zivkovic
340 Views, 0 Replies

VBA Enumerate true edges

I wroted an vba program to cycle through edges, but my code also produces edges that are not "true" work edges and are result of spline connecting straight edge. I marked those edges that I do not want to be exported on picture "part.png" file.

For example edge number 200 (mark on capture...jpg file). Is there a way to distinguish such edge (a property in VBA) and prevent it to be exported to csv file?

 

Here is VBA code:

 

Sub ExportEdges()
Dim oApp As Application
Set oApp = ThisApplication
Dim oPart As PartDocument
Set oPart = oApp.ActiveDocument
Dim oCompDef As ComponentDefinition
Set oCompDef = oPart.ComponentDefinition
Dim oFaces As Faces
Dim oFace As Face
Dim oEdge As Edge
Dim x1 As Double
Dim y1 As Double
Dim z1 As Double
Dim x2 As Double
Dim y2 As Double
Dim z2 As Double
Dim cx As Double
Dim cy As Double
Dim cz As Double

Dim p As Point
Dim l As Long

Dim pline As Polyline3d

Dim points() As Double
Dim edgeNo As Integer
Dim vertexCoordinates() As Double

Dim vertexIndices() As Long

Open "c:\Users\klemen\Dropbox\TerasaBoris\grbl\data.csv" For Output As #1

Dim objUOM As UnitsOfMeasure
Dim oCOM As Point

Dim oDoc As Inventor.Document
Dim oWS As WorkSurface

Set objUOM = oPart.UnitsOfMeasure
Set oCOM = oCompDef.MassProperties.CenterOfMass

maxX = oCompDef.RangeBox.MaxPoint.X
maxY = oCompDef.RangeBox.MaxPoint.Y
maxZ = oCompDef.RangeBox.MaxPoint.Z

minX = oCompDef.RangeBox.MinPoint.X
minY = oCompDef.RangeBox.MinPoint.Y
minZ = oCompDef.RangeBox.MinPoint.Z

centerX = (maxX + minX) / 2
centerY = (maxY + minY) / 2
centerZ = (maxZ + minZ) / 2

cogx = objUOM.GetStringFromValue(oCOM.X, UnitsTypeEnum.kDefaultDisplayLengthUnits)
cogy = objUOM.GetStringFromValue(oCOM.Y, UnitsTypeEnum.kDefaultDisplayLengthUnits)
cogz = objUOM.GetStringFromValue(oCOM.Z, UnitsTypeEnum.kDefaultDisplayLengthUnits)

'This can be changed to .SideFaces, .EndFaces, or .StartFaces
'But .Faces will let you choose between all faces
Set oFaces = oCompDef.SurfaceBodies.Item(1).Faces
edgeNo = 0
Set oFaces = oCompDef.SurfaceBodies.Item(1).Faces

surfaceNo = 0
pointNo = 0

'oAssyDoc = ThisApplication.ActiveDocument
Set oDoc = ThisApplication.ActiveDocument


'For Each oDoc In oAssyDoc.AllReferencedDocuments
'set surface bodies visibility
For Each oFace In oDoc.ComponentDefinition.SurfaceBodies.Item(1).Faces

surfaceNo = surfaceNo + 1
For Each oEdge In oFace.Edges

'Debug.Print oEdge.GeometryForm & " " & oEdge.GeometryType

If oEdge.GeometryType = kBSplineCurve Then
Debug.Print "kLineSegmentCurve"
ElseIf oEdge.GeometryType = kCircleCurve Then
'Debug.Print "kCircleCurve"
ElseIf oEdge.GeometryType = kPolylineCurve Then
ElseIf oEdge.GeometryType = kPolylineCurve Then
ElseIf oEdge.GeometryType = kPolylineCurve Then
ElseIf oEdge.GeometryType = kPolylineCurve Then
ElseIf oEdge.GeometryType = kPolylineCurve Then
ElseIf oEdge.GeometryType = kPolylineCurve Then
ElseIf oEdge.GeometryType = kPolylineCurve Then
ElseIf oEdge.GeometryType = kPolylineCurve Then

Else
'Debug.Print oEdge.GeometryType
End If


Debug.Print oEdge.Type

If edgeNo = 199 Or edgeNo = 200 Then
Debug.Print oEdge.TangentiallyConnectedEdges.Count
Debug.Print oEdge.Parent.AppearanceSourceType
For k = 1 To oEdge.EdgeUses.Count
Debug.Print oEdge.EdgeUses.Item(k).GeometryForm
Next k
Debug.Print oEdge.TransientKey


': AppearanceSourceType: kPartAppearance: AppearanceSourceTypeEnum: Module1.Sketch2Face2
End If
Debug.Print oEdge.TransientKey

edgeNo = edgeNo + 1

Set pline = ThisApplication.TransientGeometry.CreatePolyline3dFromCurve(oEdge.Geometry, 0.005)
pointsStr = ""
For l = 1 To pline.PointCount
pointNo = pointNo + 1
Set p = pline.PointAtIndex(l)
pointsStr = pointsStr & (p.X - centerX) & ";" & (p.Y - centerY) & ";" & (p.Z - centerZ) & ";"
Next l
pointsStr = Left(pointsStr, Len(pointsStr) - 1)
Print #1, "POLY_" & Trim(Str(surfaceNo)) & "_" & Trim(Str(edgeNo)) & "_" & pointNo & ";" & pointsStr

Next
Next
'Next
Close #1

End Sub

 

0 REPLIES 0

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report