Projecting sketch from iPart member to another part in assembly

Projecting sketch from iPart member to another part in assembly

toni.georgiev
Explorer Explorer
299 Views
1 Reply
Message 1 of 2

Projecting sketch from iPart member to another part in assembly

toni.georgiev
Explorer
Explorer

Hello everyone,

 

I have assembly with few occurrences. In one of them (assembly) I want to project sketch from one sub occurrence to another, create cut extrude from this sketch and make second sub occurrence and projected sketch adaptive from position of first. Main important thing is first sub occurrence is iPart member.  

 

I try to do that like this:

 

 

 

private void iCut()
		{


			// Set a reference to the active assembly document
			Inventor.AssemblyDocument oDoc;
			oDoc = (Inventor.AssemblyDocument)ThisApplication.ActiveDocument;


			// Get Asembly Component Definition
			AssemblyComponentDefinition oTopAsmDef;
			oTopAsmDef = oDoc.ComponentDefinition;


			// Get First Occurrence reference from top level assembly (WallAssembly:1)
			ComponentOccurrence oWallAssembly = oTopAsmDef.Occurrences[1];


			// Get Assembly component definition
			AssemblyComponentDefinition oWallAssemblyDef = (AssemblyComponentDefinition)oWallAssembly.Definition;

			


			/////////////////////////////////
			//////// First Occurrence
			//////////////////////////////////

			// Get occurrence reference to the first sub occurence at oOcc.  "Plate:1"
			ComponentOccurrence oPlate = oWallAssemblyDef.Occurrences[1];
			
			//Create occurrence proxy to the Plate:1
			object oObject;
			oWallAssembly.CreateGeometryProxy(oPlate, out oObject);
			ComponentOccurrenceProxy oPlateProxy = (ComponentOccurrenceProxy)oObject;
			
			// Get part component definition
			PartComponentDefinition oPlateDef = (PartComponentDefinition)oPlateProxy.Definition;
			
			// Get Second sketch from "Plate:1". In this sketch will project cutout sketch from iPart
			PlanarSketch oPlateSketch = oPlateDef.Sketches[2];
			
			// Create sketch proxy to the above sketch
			oPlateProxy.CreateGeometryProxy(oPlateSketch, out oObject);
			PlanarSketchProxy oPlateSketchProxy = (PlanarSketchProxy)oObject;





			///////////////////////////////////////////////////////////////////////////////////
			//////// Second Occurrence
			//////////////////////////////////////////////////////////////////////////////////

			// Get occurrence reference to the second sub occurence at oOcc.  "Gasket_20:1"
			ComponentOccurrence oGasket = oWallAssemblyDef.Occurrences[2];


			//Create occurrence proxy to the second occurrence ("Gasket_20:1")
			oWallAssembly.CreateGeometryProxy(oGasket, out oObject);
			ComponentOccurrenceProxy oGasketProxy = (ComponentOccurrenceProxy)oObject;


			// Get Part component definition from ("Gasket_20:1"). This definition is iPart Member definition
			PartComponentDefinition oGasketDef = (PartComponentDefinition)oGasketProxy.Definition;

			
			//Get the actual factory document
			PartDocument factoryDoc = oGasketDef.iPartMember.ReferencedDocumentDescriptor.ReferencedDocument;


			// Get part definition
			PartComponentDefinition factoryDef = (PartComponentDefinition)factoryDoc.ComponentDefinition;


			// Get reference to the Sketch "CutOutSketch" from Gasket.ipt
			PlanarSketch oGasketSketch = factoryDef.Sketches["CutOutSketch"];



			// Get all lines from oGasketSketch
			SketchLines oGasketLines = oGasketSketch.SketchLines;

			// Get enumerator
			IEnumerator eGasketLines = oGasketLines.GetEnumerator();






			SketchEntity projLine = null;
			SketchLine oGasketLine = null;


			while (eGasketLines.MoveNext())
			{
				
				// Get current line from gasket sketch
				oGasketLine = (SketchLine)eGasketLines.Current;

				// Create proxy to this line
				oGasketProxy.CreateGeometryProxy(oGasketLine, out oObject);
				SketchLineProxy oGasketLineProxy = (SketchLineProxy)oObject;
				
				// Project line to the oPlateSketchProxy
				projLine = oPlateSketchProxy.AddByProjectingEntity(oGasketLineProxy);
				
			}



			// Create a profile.
			Profile oProfile = default(Profile);
			oProfile = oPlateSketchProxy.Profiles.AddForSolid();



			// Create a cut out
			ExtrudeDefinition oExtrudeDef = oPlateDef.Features.ExtrudeFeatures.
				CreateExtrudeDefinition(oProfile, PartFeatureOperationEnum.kCutOperation);
			oExtrudeDef.SetThroughAllExtent(PartFeatureExtentDirectionEnum.kNegativeExtentDirection);
			ExtrudeFeature oExtrude = oPlateDef.Features.ExtrudeFeatures.Add(oExtrudeDef);

			

		}

 

Unfortunately I got error when create proxy to the line just before project it in to the sketch.

 

oGasketProxy.CreateGeometryProxy(oGasketLine, out oObject);


Any Ideas how to fix this?

 

Many thanks in advance.

 

P.S.

In attached file you could find inventor files. 

0 Likes
300 Views
1 Reply
Reply (1)
Message 2 of 2

toni.georgiev
Explorer
Explorer

ANYBODY HELP Please

0 Likes