Quantcast
Channel: Manufacturing DevBlog
Viewing all articles
Browse latest Browse all 516

Flipping direction of a Hem feature

$
0
0

By Balaji Ramamoorthy

The Hem feature relies on an edge to decide its direction. When editing the hem feature to flip its direction, Inventor identifies another edge and uses it for the hem feature. To do this programmatically, the HemDefinition.Edges collection is to be set. Currently the HemDefinition.Edges displays a "NotImplemented" error when trying to set it.

A workaround is to create a new Hem feature using the HemDefinition from the existing feature and use another edge in the process. The existing feature can be deleted after the new one is created. Also, it is important to set the end of part for retrieving the Edges collection from a Hem feature.

Here is a sample iLogic and C# code to flip the direction :

iLogic code snipet :

Dim  oPartDoc As  PartDocument
 oPartDoc = ThisApplication.ActiveDocument
Dim  oSheetMetalCompDef As  SheetMetalComponentDefinition
 oSheetMetalCompDef = oPartDoc.ComponentDefinition
Dim  smFeatures As  SheetMetalFeatures
 smFeatures = oSheetMetalCompDef.Features
Dim  oHems As  HemFeatures
 oHems = smFeatures.HemFeatures
Dim  oHemFeature As  HemFeature
 oHemFeature = oHems.Item(1)
Dim  oHemDef As  HemDefinition
 oHemDef = oHemFeature.Definition
 oHemFeature.SetEndOfPart(True)
Dim  currentHemEdge As  Edge
Dim  oHemEdgeColl As  EdgeCollection
 oHemEdgeColl = oHemDef.Edges
 currentHemEdge = oHemDef.Edges.Item(1)
Dim  oStartVertex As  Vertex
 oStartVertex = currentHemEdge.StartVertex
Dim  oStopVertex As  Vertex
 oStopVertex = currentHemEdge.StopVertex
Dim  edge1 As  Edge
 edge1 = oSheetMetalCompDef.SurfaceBodies(1).Edges(1)
Dim  edge2 As  Edge
 edge2 = oSheetMetalCompDef.SurfaceBodies(1).Edges(3)
Dim  oEdgeColl As  EdgeCollection
 = ThisApplication.TransientObjects.CreateEdgeCollection
If  edge1.StartVertex Is  oStartVertex  
And  edge1.StopVertex Is  oStopVertex Then
 	oEdgeColl.Add(edge2)
ElseIf  edge2.StartVertex Is  oStartVertex  
And  edge2.StopVertex Is  oStopVertex Then
 	oEdgeColl.Add(edge1)
Else
 	MessageBox.Show("Sorry, could not  flip direction. 
 	The hem Feature does Not  use a known edge", 
"iLogic HemFeature Flip direction")
 	oHemFeature.SetEndOfPart(False)
Return
EndIf
Dim  oHemDefNew As  HemDefinition
 oHemDefNew = oHemDef.Copy
 oHemDefNew.Edges = oEdgeColl
Dim  hemFeatureName AsString
 hemFeatureName = oHemFeature.Name
 oHemFeature.Delete 
Dim  oHemFeatureNew As  HemFeature
 oHemFeatureNew = oHems.Add(oHemDefNew)
 oHemFeatureNew.Name = hemFeatureName

C# code snipet :

 PartDocument oPartDoc 
 	= (PartDocument)_invApp.ActiveDocument;
 SheetMetalComponentDefinition oSheetMetalCompDef 
 	= oPartDoc.ComponentDefinition 
 	as SheetMetalComponentDefinition;
 SheetMetalFeatures smFeatures 
 	= oSheetMetalCompDef.Features as SheetMetalFeatures;
 HemFeatures oHems = smFeatures.HemFeatures;
 HemFeature oHemFeature = oHems[1];
 HemDefinition oHemDef = oHemFeature.Definition;
// Important to get the right edge from the HemDefinition
 oHemFeature.SetEndOfPart(true );
 EdgeCollection oHemEdgeColl = oHemDef.Edges;
 Edge currentHemEdge = oHemDef.Edges[1];
 Vertex oStartVertex = currentHemEdge.StartVertex;
 Vertex oStopVertex = currentHemEdge.StopVertex;
 Edge edge1 
 	= oSheetMetalCompDef.SurfaceBodies[1].Edges[1];
 Edge edge2 
 	= oSheetMetalCompDef.SurfaceBodies[1].Edges[3];
 EdgeCollection oEdgeColl = 
 	_invApp.TransientObjects.CreateEdgeCollection();
if  (object.ReferenceEquals(edge1.StartVertex, oStartVertex) && 
     object.ReferenceEquals(edge1.StopVertex, oStopVertex))
{
// edge1 is the hem edge. 
//'s use another edge to flip the hem feature
     oEdgeColl.Add(edge2);
}
elseif  (object.ReferenceEquals(edge2.StartVertex, oStartVertex) &&
     object.ReferenceEquals(edge2.StopVertex, oStopVertex))
{
// edge2 is the hem edge. 
//'s use another edge to flip the hem feature
     oEdgeColl.Add(edge1);
}
else
{
     MessageBox.Show(@"Sorry, could not flip direction. 
 		The hem feature does not use a known edge", 
"HemFeature Flip direction" );
     oHemFeature.SetEndOfPart(false );
return ;
}
 HemDefinition oHemDefNew = oHemDef.Copy();
 oHemDefNew.Edges = oEdgeColl;
 string hemFeatureName = null;
 hemFeatureName = oHemFeature.Name;
// Delete the existing hem feature
 oHemFeature.Delete();
 HemFeature oHemFeatureNew = default (HemFeature);
 oHemFeatureNew = oHems.Add(oHemDefNew);
 oHemFeatureNew.Name = hemFeatureName;

Viewing all articles
Browse latest Browse all 516

Trending Articles