HoleFeature HoleFeatureProxy C#

Top  Previous  Next

To find the position of a hole which is in a part which is in an assembly you must get hold of the hole feauture's proxy.

 

The proxy will give you the position of the hole in assembly coordinates.

 

This function adds a fixed axis based on the position of a hole:

 

public static void AddFixedTest ()

{

       if (!CurrentDocIsAssembly())

       {

               MessageBox.Show("Not an assembly");

 

               return;

       }

 

       AssemblyDocument AsmDoc = m_Inventor.ActiveDocument as AssemblyDocument;

       AssemblyComponentDefinition AsmDef = AsmDoc.ComponentDefinition;

       ComponentOccurrences OccList = AsmDoc.ComponentDefinition.Occurrences;

 

       ComponentOccurrence SpallaOcc = null;

 

       // Find a component we know to contain "Hole7"

       foreach (ComponentOccurrence ThisOcc in OccList)

       {

               Debug.WriteLine("Found " + ThisOcc.Name);

 

               // Get "30084896" only (not "30084896:2") by stripping off all the trailing characters....

               string sCode = ThisOcc.Name.Substring(0, 8);

               if (sCode == "30084896")

               {

                       SpallaOcc = ThisOcc;

                       break;

               }

       }

 

       if (SpallaOcc == null)

       {

               MessageBox.Show("Spalla not found");

               return;

       }

 

       // The definition contains the list of holes...

       PartComponentDefinition SpallaDef = (PartComponentDefinition)SpallaOcc.Definition;

 

       Debug.WriteLine("The spalla has " + SpallaDef.Features.HoleFeatures.Count + " hole features");

 

       // Get it directly and hope it is there

       HoleFeature Hole7 = SpallaDef.Features.HoleFeatures["Hole7"] ;

 

 

       // CreateGeometryProxy needs an Object parameter

       Object Hole7ProxyObj = null;

 

       // Create the proxy of the hole...

       SpallaOcc.CreateGeometryProxy(Hole7, out Hole7ProxyObj);

 

       // Having created the general proxy cast it to a HoleFeatureProxy...

       HoleFeatureProxy Hole7Proxy = (HoleFeatureProxy)Hole7ProxyObj;

 

       Debug.WriteLine ("Hole7 has " +  Hole7Proxy.Faces.Count.ToString() + " faces");

 

       foreach (Face ThisHoleFace in Hole7Proxy.Faces)

       {

               if (ThisHoleFace.SurfaceType == SurfaceTypeEnum.kCylinderSurface)

               {

                       Cylinder faceCyl = (Cylinder)ThisHoleFace.Geometry;

                       StringBuilder sb = new StringBuilder("Cylinder In FaceFeature:" + "\r\n");

                       Point centerPt = faceCyl.BasePoint;

                       UnitVector axisVector = faceCyl.AxisVector;

                       sb.Append("Center Point: X = " + Math.Round(centerPt.X, 4) + "  Y = " + Math.Round(centerPt.Y, 4) + "  Z = " + Math.Round(centerPt.Z, 4) + "\r\n");

                       sb.Append("Axis: X = " + Math.Round(axisVector.X, 4) + "  Y = " + Math.Round(axisVector.Y, 4) + "  Z = " + Math.Round(axisVector.Z, 4));

 

                       Debug.WriteLine(sb.ToString());

 

                       AsmDef.WorkAxes.AddFixed(centerPt, axisVector);

               }

       }

}

 

 

This also illustrates getting a workaxis from a hole feature by uinsgthe faces of the hole.

 

There is a problem, being fixed the axis will not move if you move the part.

 

 

 

 

Text, images and diagrams © 2021 Owen F. Ransen. All rights reserved. (But copy the source code as much as you want!)