Message 1 of 3
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I'm having trouble creating a list of sketch entities. I keep getting an "Unable to cast COM object of type 'System.__ComObject' " error. I've tried other things, such as an Object Collection or a generic list.
In the example below create a new sketch and draw a couple of lines. Run the code and select a line. How do I convert selected sketch entities into a SketchEntitiesEnumerator? The issue that lead to this is that if I create a point or circle, then the oSelectSet count goes to 0, but I still need to reference the lines further in the code.
Private Sub Main
'In Part document, with sketch activated!
Dim oPartDoc As PartDocument = ThisApplication.ActiveDocument
'activate the sketch first
Dim oActiveEdit As Object = ThisApplication.ActiveEditObject
'oPartDoc.ComponentDefinition.Sketches
Dim oPicked As Object = ThisApplication.CommandManager.Pick(SelectionFilterEnum.kSketchCurveFilter, "Select a sketch object")
Dim oSelectSet As SelectSet = oPartDoc.SelectSet
oSelectSet.Select(oPicked)
'Dim oCurve As SketchEntity = Nothing
AddSelectedMember(oPicked, oSelectSet)
Dim sketchEntities As SketchEntitiesEnumerator
sketchEntities = oSelectSet
MessageBox.Show(sketchEntities.Count, "Title")
End Sub
Private Sub AddSelectedMember(ByVal sketchObject As Object, ByVal SelectSet As SelectSet)
Select Case sketchObject.Type
Case ObjectTypeEnum.kSketchLineObject
Dim oSketchline As SketchLine = sketchObject
For Each oSketchEntity As Object In oSketchline.EndSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
For Each oSketchEntity As Object In oSketchline.StartSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
Case ObjectTypeEnum.kSketchCircleObject
Case ObjectTypeEnum.kSketchEllipseObject
Case ObjectTypeEnum.kSketchArcObject
Dim oSketchArc As SketchArc = sketchObject
For Each oSketchEntity As Object In oSketchArc.EndSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
For Each oSketchEntity As Object In oSketchArc.StartSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
Case ObjectTypeEnum.kSketchEllipticalArcObject
Dim oEllipticalArc As SketchEllipticalArc = sketchObject
For Each oSketchEntity As Object In oEllipticalArc.EndSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
For Each oSketchEntity As Object In oEllipticalArc.StartSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
Case ObjectTypeEnum.kSketchEquationCurveObject
Dim oSketchEquation As SketchEquationCurve = sketchObject
For Each oSketchEntity As Object In oSketchEquation.EndSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
For Each oSketchEntity As Object In oSketchEquation.StartSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
Case ObjectTypeEnum.kSketchSplineObject
Dim oSpline As SketchSpline = sketchObject
For Each oSketchEntity As Object In oSpline.EndSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
For Each oSketchEntity As Object In oSpline.StartSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
Case ObjectTypeEnum.kSketchControlPointSplineObject
Dim oCtrlPointSpline As SketchControlPointSpline = sketchObject
For Each oSketchEntity As Object In oCtrlPointSpline.EndSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
For Each oSketchEntity As Object In oCtrlPointSpline.StartSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
Case ObjectTypeEnum.kSketchOffsetSplineObject
Dim oOffsetSpline As SketchOffsetSpline = sketchObject
For Each oSketchEntity As Object In oOffsetSpline.EndSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
For Each oSketchEntity As Object In oOffsetSpline.StartSketchPoint.AttachedEntities
Dim memberFound As Boolean = False
For Each SelectedMember As Object In SelectSet
If SelectedMember Is oSketchEntity Then
memberFound = True
Exit For
End If
Next
If memberFound = False Then
SelectSet.Select(oSketchEntity)
AddSelectedMember(oSketchEntity, SelectSet)
End If
Next
Case Else
MessageBox.Show("Unhandled type: " + sketchObject.Type, "Other type") 'should never happen...
End Select
End Sub
Solved! Go to Solution.