double outerDia = Convert.ToDouble(outerdiameter.Text);
double outerHoleDia = Convert.ToDouble(outerholediameter.Text);
double innerHoleDia = Convert.ToDouble(innerholediameter.Text);
double innerDia = Convert.ToDouble(outerdiameter.Text) - 2 *
(Convert.ToDouble(Thickness.Text));
double biggerDia = findBiggerHole(outerHoleDia, innerHoleDia);
double crossSectionAreaOfCage = (22 / 28) * innerDia * innerDia;
double height = Convert.ToDouble(cageheight.Text);
int noOfHolesAlongCageHeight = (int)((height - biggerDia) / (biggerDia * 2) + 0.5);
int totalNoOfHoles = (int)((innerDia*innerDia)/(biggerDia*biggerDia));
int noOfHolesRadially = totalNoOfHoles / noOfHolesAlongCageHeight;
double angle = 360.0 / noOfHolesRadially;
angle = (angle * Math.PI) / 180;
Inventor.Application inventorApplication;
inventorApplication = (Inventor.Application)
Marshal.GetActiveObject("Inventor.Application");
PartDocument partDoc;
partDoc = (PartDocument)inventorApplication.Documents.Add
(DocumentTypeEnum.kPartDocumentObject,
inventorApplication.FileManager.GetTemplateFile
(DocumentTypeEnum.kPartDocumentObject));
PartComponentDefinition oPartCompDef;
oPartCompDef = partDoc.ComponentDefinition;
PlanarSketch oSketch;
oSketch = oPartCompDef.Sketches.Add(oPartCompDef.WorkPlanes[3]);
TransientGeometry oTransGeom;
oTransGeom = inventorApplication.TransientGeometry;
SketchCircle outerCircle,innerCircle;
outerCircle = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0, 0),
Convert.ToDouble(outerdiameter.Text)/2);
innerCircle = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0, 0),
(Convert.ToDouble(outerdiameter.Text) / 2)-
Convert.ToDouble(Thickness.Text));
Profile oProfile;
oProfile = oSketch.Profiles.AddForSolid();
ExtrudeDefinition oExtrudeDef;
oExtrudeDef = oPartCompDef.Features.ExtrudeFeatures.
CreateExtrudeDefinition(oProfile,
PartFeatureOperationEnum.kJoinOperation);
oExtrudeDef.SetDistanceExtent(Convert.ToDouble(cageheight.Text)
, PartFeatureExtentDirectionEnum.kPositiveExtentDirection);
ExtrudeFeature oExtrude;
oExtrude = oPartCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef);
WorkPlane outerHolePlane;
outerHolePlane = oPartCompDef.WorkPlanes.AddByPlaneAndOffset(oPartCompDef.
WorkPlanes[1], Convert.ToDouble(outerdiameter.Text)/2);
WorkPlane innerHolePlane;
innerHolePlane = oPartCompDef.WorkPlanes.AddByPlaneAndOffset(oPartCompDef.
WorkPlanes[1], innerDia/2);
PlanarSketch Sketch1;
Sketch1 = oPartCompDef.Sketches.Add(outerHolePlane);
List<SketchCircle> holes = new List<SketchCircle>(new SketchCircle[noOfHolesAlongCageHeight]);
double first = biggerDia;
for(int i=0;i<1;i++)
{
holes[i] = Sketch1.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0,first),
outerHoleDia / 2);
first = first + 2*biggerDia;
}
Profile newProfile;
newProfile = Sketch1.Profiles.AddForSolid();
ExtrudeDefinition newExtrudeDef;
newExtrudeDef = oPartCompDef.Features.ExtrudeFeatures.
CreateExtrudeDefinition(newProfile,
PartFeatureOperationEnum.kCutOperation);
newExtrudeDef.SetDistanceExtent(Convert.ToDouble(depth.Text),
PartFeatureExtentDirectionEnum.kNegativeExtentDirection);
ExtrudeFeature newExtrude;
newExtrude = oPartCompDef.Features.ExtrudeFeatures.Add(newExtrudeDef);
PlanarSketch Sketch2;
Sketch2 = oPartCompDef.Sketches.Add(innerHolePlane);
List<SketchCircle> innerHoles = new List<SketchCircle>(new SketchCircle[noOfHolesAlongCageHeight]);
double second = biggerDia;
for (int i = 0; i < 1; i++)
{
innerHoles[i] = Sketch2.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(0,second),
innerHoleDia / 2);
second = second + 2 * biggerDia;
}
Profile newsProfile;
newsProfile = Sketch2.Profiles.AddForSolid();
ExtrudeDefinition newsExtrudeDef;
newsExtrudeDef = oPartCompDef.Features.ExtrudeFeatures.
CreateExtrudeDefinition(newsProfile,
PartFeatureOperationEnum.kCutOperation);
newsExtrudeDef.SetDistanceExtent(Convert.ToDouble(depth.Text),
PartFeatureExtentDirectionEnum.kSymmetricExtentDirection);
ExtrudeFeature newsExtrude;
newsExtrude = oPartCompDef.Features.ExtrudeFeatures.Add(newsExtrudeDef);
ObjectCollection bodyCollection;
bodyCollection = inventorApplication.TransientObjects.CreateObjectCollection();
foreach (ExtrudeFeature item in oPartCompDef.Features.ExtrudeFeatures)
{
if ((item.Name == "Extrusion2") || (item.Name == "Extrusion3"))
bodyCollection.Add(item);
}
//bodyCollection.Add("Extrusion2");
innerHolePlane.Visible = false;
outerHolePlane.Visible = false;
object holy = noOfHolesRadially;
object oangle = 2 *Math.PI;
CircularPatternFeatureDefinition pattern1;
pattern1 = oPartCompDef.Features.CircularPatternFeatures.CreateDefinition(bodyCollection,oPartCompDef.WorkAxes[3],true,
holy,angle,false);
CircularPatternFeature pa = oPartCompDef.Features.CircularPatternFeatures.AddByDefinition(pattern1);