Hi @FProcp,
Try the following iLogic code for PartDocument.
Dim oDoc As PartDocument
oDoc = ThisDoc.Document
Dim oSK As PlanarSketch
oSK = oDoc.ComponentDefinition.Sketches(1)
Dim objCol As ObjectCollection
objCol = ThisApplication.TransientObjects.CreateObjectCollection
For Each oskarc In oSK.SketchArcs
objCol.Add(oskarc)
Next
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
For i = 0 To oRadiusList.Count
oCircleCol(i) = ThisApplication.TransientObjects.CreateObjectCollection
Next
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)
oD1 = oDoc.ComponentDefinition.Features.ExtrudeFeatures.CreateExtrudeDefinition(oP1, kNewBodyOperation)
oD1.SetDistanceExtent("6 mm", kSymmetricExtentDirection)
oF2 = oDoc.ComponentDefinition.Features.ExtrudeFeatures.Add(oD1)
'Create hole feature for the rest center point of the circles
Dim oTempCol As ObjectCollection
oTempCol = ThisApplication.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
dDiameter = Math.Round(dDiameter, 1)
oPD = oDoc.ComponentDefinition.Features.HoleFeatures.CreateSketchPlacementDefinition(oTempCol)
Dim oHole As HoleFeature
oHole = oDoc.ComponentDefinition.Features.HoleFeatures.AddDrilledByThroughAllExtent(oPD, dDiameter, kSymmetricExtentDirection)
dDiameter = dDiameter * 10
oHole.Name = "HoleD" + dDiameter.ToString
Next
Below iLogic code strictly for Sheet metal part. Because, FaceFeature is available only for sheet metal document.
Dim oDoc As PartDocument
oDoc = ThisDoc.Document
Dim oSK As PlanarSketch
oSK = oDoc.ComponentDefinition.Sketches(1)
Dim objCol As ObjectCollection
objCol = ThisApplication.TransientObjects.CreateObjectCollection
'Store the large circles whose diameter are larger then 50mm
Dim oLarCircles As ObjectCollection
oLarCircles = ThisApplication.TransientObjects.CreateObjectCollection
For Each oskarc In oSK.SketchArcs
objCol.Add(oskarc)
Next
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
For i = 0 To oRadiusList.Count
oCircleCol(i) = ThisApplication.TransientObjects.CreateObjectCollection
Next
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 FaceFeatureDefinition
oD1 = oDoc.ComponentDefinition.Features.FaceFeatures.CreateFaceFeatureDefinition(oP1)
'Create first face feature including the whole block
Dim oF1 As FaceFeature
oF1 = oDoc.ComponentDefinition.Features.FaceFeatures.Add(oD1)
'Create hole feature for the rest center point of the circles
Dim oTempCol As ObjectCollection
oTempCol = ThisApplication.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
dDiameter = Math.Round(dDiameter, 1)
oPD = oDoc.ComponentDefinition.Features.HoleFeatures.CreateSketchPlacementDefinition(oTempCol)
Dim oHole As HoleFeature
oHole = oDoc.ComponentDefinition.Features.HoleFeatures.AddDrilledByThroughAllExtent(oPD, dDiameter, kSymmetricExtentDirection)
dDiameter = dDiameter * 10
oHole.Name = "HoleD" + dDiameter.ToString
Next
Please feel free to contact if there is any queries.
If solves problem, click on "Accept as solution" / give a "Kudo".
Thanks and regards,
CHANDRA SHEKAR G
Developer Advocate
Autodesk Developer Network