Hallo zusammen,
ich suche nach einer Möglichkeit alle Kreise, die einen gemeinsamen Mittelpunkt haben zu ermitteln. Das Problem ist, dass wir 2D Zeichnungen haben. Diese haben z.B. Zylindersenkungen. Mit dem folgenden Programm kann ich die Kreise in Bohrungen umwandeln.
Wenn jedoch 2 Kreise mit unterschiedlichem Durchmesser am gleichen Punkt sind werden dann natürlich 2 Bohrungen erzeugt, was ich gerne vermeiden würde. Wie kann ich die gemeinsamen Kreise bzw. den inneren ermitteln?
Vielen Dank für Eure Hilfe
Goof
ich suche nach einer Möglichkeit alle Kreise, die einen gemeinsamen Mittelpunkt haben zu ermitteln. Das Problem ist, dass wir 2D Zeichnungen haben. Diese haben z.B. Zylindersenkungen. Mit dem folgenden Programm kann ich die Kreise in Bohrungen umwandeln.
Wenn jedoch 2 Kreise mit unterschiedlichem Durchmesser am gleichen Punkt sind werden dann natürlich 2 Bohrungen erzeugt, was ich gerne vermeiden würde. Wie kann ich die gemeinsamen Kreise bzw. den inneren ermitteln?
Quellcode
- Dim m_inventorApp As Inventor.Application = Nothing
- m_inventorApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application")
- Dim oDoc As PartDocument
- oDoc = m_inventorApp.ActiveDocument
- Dim oSK As PlanarSketch
- oSK = oDoc.ComponentDefinition.Sketches(1)
- Dim objCol As ObjectCollection
- objCol = m_inventorApp.TransientObjects.CreateObjectCollection
- Dim oskarc As SketchArc
- For Each oskarc In oSK.SketchArcs
- objCol.Add(oskarc)
- Next
- Dim oskline As SketchLine
- For Each oskline In oSK.SketchLines
- objCol.Add(oskline)
- Next
- Dim oRadiusList As ArrayList = New ArrayList
- Dim oCircle As SketchCircle
- For Each oCircle In oSK.SketchCircles
- If oRadiusList.Contains(Math.Round(oCircle.Radius, 3)) = False Then
- oRadiusList.Add(Math.Round(oCircle.Radius, 3))
- End If
- Next
- Dim oCircleCol(oRadiusList.Count) As ObjectCollection
- Dim i As Integer
- For i = 0 To oRadiusList.Count
- oCircleCol(i) = m_inventorApp.TransientObjects.CreateObjectCollection
- Next
- Dim j As Integer
- For j = 0 To oRadiusList.Count - 1
- For Each oCircle In oSK.SketchCircles
- If Math.Round(oCircle.Radius, 3).ToString = oRadiusList.Item(j).ToString Then
- oCircleCol(j).Add(oCircle)
- End If
- Next
- Next
- Dim oP1 As Profile
- oP1 = oSK.Profiles.AddForSolid(False, objCol)
- Dim oD1 As ExtrudeDefinition
- oD1 = oDoc.ComponentDefinition.Features.ExtrudeFeatures.CreateExtrudeDefinition(oP1, PartFeatureOperationEnum.kNewBodyOperation)
- oD1.SetDistanceExtent("6 mm", PartFeatureExtentDirectionEnum.kNegativeExtentDirection)
- Dim oF2 As ExtrudeFeature
- oF2 = oDoc.ComponentDefinition.Features.ExtrudeFeatures.Add(oD1)
- 'Create hole feature for the rest center point of the circles
- Dim oTempCol As ObjectCollection
- oTempCol = m_inventorApp.TransientObjects.CreateObjectCollection
- Dim oPD As HolePlacementDefinition
- For i = 0 To oRadiusList.Count - 1
- oTempCol.Clear()
- Dim dDiameter As Double
- For Each oCircle In oCircleCol(i)
- oTempCol.Add(oCircle.CenterSketchPoint)
- Next
- dDiameter = oCircleCol(i).Item(1).Radius * 2
- oPD = oDoc.ComponentDefinition.Features.HoleFeatures.CreateSketchPlacementDefinition(oTempCol)
- Dim oHole As HoleFeature
- oHole = oDoc.ComponentDefinition.Features.HoleFeatures.AddDrilledByThroughAllExtent(oPD, dDiameter, PartFeatureExtentDirectionEnum.kPositiveExtentDirection)
- dDiameter = dDiameter * 10
- Next
Vielen Dank für Eure Hilfe
Goof