/// ////////////////////////////////////////////////////////////////////////////////////////////////////// private static void DrawClientGraphicSolid(ref Inventor.Application _InvApplication, ref Inventor.ClientGraphics ClientGraphics, ref Inventor.AssemblyDocument assemblyDocument, string AssetName) {//"Clear - Green 1" "Clear" Inventor.Asset localAsset; localAsset = assemblyDocument.Assets[AssetName]; Inventor.GraphicsNode SurfacesNode = ClientGraphics.AddNode(1); SurfacesNode.Appearance = localAsset; Inventor.Box box = null; Inventor.SurfaceBody SurfaceBody; Inventor.TransientBRep TransientBRep; TransientBRep = _InvApplication.TransientBRep; Inventor.SurfaceGraphics SurfaceGraphics; int length = assemblyDocument.ComponentDefinition.Occurrences.Count; for (int i = length; i >= 1; i--) { if (GetInventorObjType(assemblyDocument.ComponentDefinition.Occurrences[i]) == Inventor.ObjectTypeEnum.kComponentOccurrenceObject) { Inventor.ComponentOccurrence componentOccurrence = assemblyDocument.ComponentDefinition.Occurrences[i]; box = componentOccurrence.RangeBox; SurfaceBody = TransientBRep.CreateSolidBlock(box.Copy()); SurfaceGraphics = SurfacesNode.AddSurfaceGraphics(SurfaceBody); SurfacesNode.Appearance = localAsset; } } _InvApplication.ActiveView.Update(); }
////////////////////////////////////////////////////////////////////////////////////////////// // Starts dimension command // ////////////////////////////////////////////////////////////////////////////////////////////// void StartCommand() { Inventor.Application InvApp = AdnInventorUtilities.InvApplication; _Tg = InvApp.TransientGeometry; _TBrep = InvApp.TransientBRep; _interactionManager = new AdnInteractionManager(InvApp); _interactionManager.Initialize(); _interactionManager.OnTerminateEvent += new AdnInteractionManager.OnTerminateHandler(OnTerminateEvent); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kVertexObject); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kVertexProxyObject); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kWorkPointObject); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kWorkPointProxyObject); _interactionManager.SelectEvents.SingleSelectEnabled = true; _interactionManager.SelectEvents.OnSelect += new SelectEventsSink_OnSelectEventHandler(SelectEvents_OnSelect); _interactionManager.Start("Select dimension first point: "); _clientGraphicsMng = new AdnClientGraphicsManager( AdnInventorUtilities.InvApplication, AdnInventorUtilities.AddInGuid); _clientGraphicsMng.SetGraphicsSource( _interactionManager.InteractionEvents); }
// ! Aggiunge il piano in mezzo alla lamiera public static WorkPlane addPlaneInTheMiddleOfBox(PartDocument oDoc) { SheetMetalComponentDefinition oComp = (SheetMetalComponentDefinition)oDoc.ComponentDefinition; try { return(oComp.WorkPlanes["Manual"]); } catch { } Box oRb = oComp.SurfaceBodies[1].RangeBox; TransientBRep oTransientBRep = iApp.TransientBRep; SurfaceBody oBody = oTransientBRep.CreateSolidBlock(oRb); NonParametricBaseFeature oBaseFeature = oComp.Features.NonParametricBaseFeatures.Add(oBody); FaceCollection oFaceColl = iApp.TransientObjects.CreateFaceCollection(); foreach (Face f in oBaseFeature.SurfaceBodies[1].Faces) { WorkPlane tmpWp = oComp.WorkPlanes.AddByPlaneAndOffset(f, 0); //if (tmpWp.Plane.IsParallelTo[oComp.WorkPlanes[1].Plane]) if (tmpWp.Plane.IsParallelTo[oComp.WorkPlanes[1].Plane]) { oFaceColl.Add(f); } tmpWp.Delete(); } WorkPlane wpWork = null; if (oFaceColl.Count >= 2) { WorkPlane wp1 = oComp.WorkPlanes.AddByPlaneAndOffset(oFaceColl[1], 0); WorkPlane wp2 = oComp.WorkPlanes.AddByPlaneAndOffset(oFaceColl[2], 0); wpWork = oComp.WorkPlanes.AddByTwoPlanes(wp1, wp2); wpWork.Name = "wpWorkReference"; wpWork.Grounded = true; wpWork.Visible = false; oBaseFeature.Delete(false, true, true); wp1.Delete(); wp2.Delete(); } return(wpWork); }
////////////////////////////////////////////////////////////////////////////////////////////// // Description: Copies SurfaceBody 1 of current part and performs boolean operation // to displays result as SurfaceGraphics. ////////////////////////////////////////////////////////////////////////////////////////////// static public void SurfaceGraphicsDemo() { PartDocument doc = AdnInventorUtilities.InvApplication.ActiveDocument as PartDocument; string clientId = "{Add-in Guid}"; ClientGraphics graphics = null; try { graphics = doc.ComponentDefinition.ClientGraphicsCollection[clientId]; } catch { graphics = doc.ComponentDefinition.ClientGraphicsCollection.Add(clientId); } // Store utility objects TransientGeometry geom = AdnInventorUtilities.InvApplication.TransientGeometry; TransientBRep brep = AdnInventorUtilities.InvApplication.TransientBRep; GraphicsNode node = graphics.AddNode(graphics.Count + 1); // We will work on the first surface body in our document SurfaceBody nativeBody = doc.ComponentDefinition.SurfaceBodies[1]; // Create a transient copy of the native body to work on it SurfaceBody body = brep.Copy(nativeBody); // Compute bottom/top points based on body bounding box Point bottom = geom.CreatePoint( (nativeBody.RangeBox.MinPoint.X + nativeBody.RangeBox.MaxPoint.X) / 2, (nativeBody.RangeBox.MinPoint.Y + nativeBody.RangeBox.MaxPoint.Y) / 2, nativeBody.RangeBox.MinPoint.Z); Point top = geom.CreatePoint( (nativeBody.RangeBox.MinPoint.X + nativeBody.RangeBox.MaxPoint.X) / 2, (nativeBody.RangeBox.MinPoint.Y + nativeBody.RangeBox.MaxPoint.Y) / 2, nativeBody.RangeBox.MaxPoint.Z); // Create transient cylinder tool body double radius = bottom.DistanceTo(top); SurfaceBody tool = brep.CreateSolidCylinderCone(bottom, top, radius, radius, radius, null); // Do boolean operation between transient bodies to remove cylinder brep.DoBoolean(body, tool, BooleanTypeEnum.kBooleanTypeDifference); // Add SurfaceGraphics primitive SurfaceGraphics surfGraphPrimitive = node.AddSurfaceGraphics(body); // Copy render style of native body if any StyleSourceTypeEnum source; RenderStyle style = nativeBody.GetRenderStyle(out source); node.RenderStyle = style; // Hide native body nativeBody.Visible = false; doc.Views[1].Update(); }
////////////////////////////////////////////////////////////////////////////////////////////// // Starts dimension command // ////////////////////////////////////////////////////////////////////////////////////////////// void StartCommand() { Inventor.Application InvApp = AdnInventorUtilities.InvApplication; _Tg = InvApp.TransientGeometry; _TBrep = InvApp.TransientBRep; _interactionManager = new AdnInteractionManager(InvApp); _interactionManager.Initialize(); _interactionManager.OnTerminateEvent += new AdnInteractionManager.OnTerminateHandler(OnTerminateEvent); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kVertexObject); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kVertexProxyObject); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kWorkPointObject); _interactionManager.AddPreSelectionFilter(ObjectTypeEnum.kWorkPointProxyObject); _interactionManager.SelectEvents.SingleSelectEnabled = true; _interactionManager.SelectEvents.OnSelect += new SelectEventsSink_OnSelectEventHandler(SelectEvents_OnSelect); _interactionManager.Start("Select dimension first point: "); _clientGraphicsMng = new AdnClientGraphicsManager( AdnInventorUtilities.InvApplication, AdnInventorUtilities.AddInGuid); _clientGraphicsMng.SetGraphicsSource( _interactionManager.InteractionEvents); }
static public void StandartTest() { // Set Inventor Application and "activate it" TrAddInServer.MApp = null; inventordoc = null; // Enable error handling. TransientBRep oTransBRep = TrAddInServer.MApp.TransientBRep; SurfaceBodyDefinition oSurfaceBodyDef = oTransBRep.CreateSurfaceBodyDefinition(); TransientGeometry oTG = TrAddInServer.MApp.TransientGeometry; LumpDefinition oLumpDef = oSurfaceBodyDef.LumpDefinitions.Add(); FaceShellDefinition oShell = oLumpDef.FaceShellDefinitions.Add(); // Define the six planes of the box. Plane oPosX; Plane oNegX; Plane oPosY; Plane oNegY; Plane oPosZ; Plane oNegZ; oPosX = oTG.CreatePlane(oTG.CreatePoint(1, 0, 0), oTG.CreateVector(1, 0, 0)); oNegX = oTG.CreatePlane(oTG.CreatePoint(-1, 0, 0), oTG.CreateVector(-1, 0, 0)); oPosY = oTG.CreatePlane(oTG.CreatePoint(0, 1, 0), oTG.CreateVector(0, 1, 0)); oNegY = oTG.CreatePlane(oTG.CreatePoint(0, -1, 0), oTG.CreateVector(0, -1, 0)); oPosZ = oTG.CreatePlane(oTG.CreatePoint(0, 0, 1), oTG.CreateVector(0, 0, 1)); oNegZ = oTG.CreatePlane(oTG.CreatePoint(0, 0, -1), oTG.CreateVector(0, 0, -1)); // Create the six faces. FaceDefinition oFaceDefPosX; FaceDefinition oFaceDefNegX; FaceDefinition oFaceDefPosY; FaceDefinition oFaceDefNegY; FaceDefinition oFaceDefPosZ; FaceDefinition oFaceDefNegZ; oFaceDefPosX = oShell.FaceDefinitions.Add(oPosX, false); oFaceDefNegX = oShell.FaceDefinitions.Add(oNegX, false); oFaceDefPosY = oShell.FaceDefinitions.Add(oPosY, false); oFaceDefNegY = oShell.FaceDefinitions.Add(oNegY, false); oFaceDefPosZ = oShell.FaceDefinitions.Add(oPosZ, false); oFaceDefNegZ = oShell.FaceDefinitions.Add(oNegZ, false); // Create the vertices. VertexDefinition oVertex1; VertexDefinition oVertex2; VertexDefinition oVertex3; VertexDefinition oVertex4; VertexDefinition oVertex5; VertexDefinition oVertex6; VertexDefinition oVertex7; VertexDefinition oVertex8; oVertex1 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(1, 1, 1)); oVertex2 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(1, 1, -1)); oVertex3 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(-1, 1, -1)); oVertex4 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(-1, 1, 1)); oVertex5 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(1, -1, 1)); oVertex6 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(1, -1, -1)); oVertex7 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(-1, -1, -1)); oVertex8 = oSurfaceBodyDef.VertexDefinitions.Add(oTG.CreatePoint(-1, -1, 1)); // Define the edges at intersections of the defined planes. EdgeDefinition oEdgeDefPosXPosY; EdgeDefinition oEdgeDefPosXNegZ; EdgeDefinition oEdgeDefPosXNegY; EdgeDefinition oEdgeDefPosXPosZ; EdgeDefinition oEdgeDefNegXPosY; EdgeDefinition oEdgeDefNegXNegZ; EdgeDefinition oEdgeDefNegXNegY; EdgeDefinition oEdgeDefNegXPosZ; EdgeDefinition oEdgeDefPosYNegZ; EdgeDefinition oEdgeDefPosYPosZ; EdgeDefinition oEdgeDefNegYNegZ; EdgeDefinition oEdgeDefNegYPosZ; oEdgeDefPosXPosY = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex1, oVertex2, oTG.CreateLineSegment(oVertex1.Position, oVertex2.Position)); oEdgeDefPosXNegZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex2, oVertex6, oTG.CreateLineSegment(oVertex2.Position, oVertex6.Position)); oEdgeDefPosXNegY = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex6, oVertex5, oTG.CreateLineSegment(oVertex6.Position, oVertex5.Position)); oEdgeDefPosXPosZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex5, oVertex1, oTG.CreateLineSegment(oVertex5.Position, oVertex1.Position)); oEdgeDefNegXPosY = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex4, oVertex3, oTG.CreateLineSegment(oVertex4.Position, oVertex3.Position)); oEdgeDefNegXNegZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex3, oVertex7, oTG.CreateLineSegment(oVertex3.Position, oVertex7.Position)); oEdgeDefNegXNegY = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex7, oVertex8, oTG.CreateLineSegment(oVertex7.Position, oVertex8.Position)); oEdgeDefNegXPosZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex8, oVertex4, oTG.CreateLineSegment(oVertex8.Position, oVertex4.Position)); oEdgeDefPosYNegZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex2, oVertex3, oTG.CreateLineSegment(oVertex2.Position, oVertex3.Position)); oEdgeDefPosYPosZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex4, oVertex1, oTG.CreateLineSegment(oVertex4.Position, oVertex1.Position)); oEdgeDefNegYNegZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex7, oVertex6, oTG.CreateLineSegment(oVertex7.Position, oVertex6.Position)); oEdgeDefNegYPosZ = oSurfaceBodyDef.EdgeDefinitions.Add(oVertex5, oVertex8, oTG.CreateLineSegment(oVertex5.Position, oVertex8.Position)); // Define the loops on the faces. EdgeLoopDefinition oPosXLoop = oFaceDefPosX.EdgeLoopDefinitions.Add(); oPosXLoop.EdgeUseDefinitions.Add(oEdgeDefPosXPosY, true); oPosXLoop.EdgeUseDefinitions.Add(oEdgeDefPosXNegZ, true); oPosXLoop.EdgeUseDefinitions.Add(oEdgeDefPosXNegY, true); oPosXLoop.EdgeUseDefinitions.Add(oEdgeDefPosXPosZ, true); EdgeLoopDefinition oNegXLoop = oFaceDefNegX.EdgeLoopDefinitions.Add(); oNegXLoop.EdgeUseDefinitions.Add(oEdgeDefNegXPosY, false); oNegXLoop.EdgeUseDefinitions.Add(oEdgeDefNegXNegZ, false); oNegXLoop.EdgeUseDefinitions.Add(oEdgeDefNegXNegY, false); oNegXLoop.EdgeUseDefinitions.Add(oEdgeDefNegXPosZ, false); EdgeLoopDefinition oPosYLoop = oFaceDefPosY.EdgeLoopDefinitions.Add(); oPosYLoop.EdgeUseDefinitions.Add(oEdgeDefPosXPosY, false); oPosYLoop.EdgeUseDefinitions.Add(oEdgeDefPosYNegZ, false); oPosYLoop.EdgeUseDefinitions.Add(oEdgeDefNegXPosY, true); oPosYLoop.EdgeUseDefinitions.Add(oEdgeDefPosYPosZ, false); EdgeLoopDefinition oNegYLoop = oFaceDefNegY.EdgeLoopDefinitions.Add(); oNegYLoop.EdgeUseDefinitions.Add(oEdgeDefPosXNegY, false); oNegYLoop.EdgeUseDefinitions.Add(oEdgeDefNegYPosZ, false); oNegYLoop.EdgeUseDefinitions.Add(oEdgeDefNegXNegY, true); oNegYLoop.EdgeUseDefinitions.Add(oEdgeDefNegYNegZ, false); EdgeLoopDefinition oPosZLoop = oFaceDefPosZ.EdgeLoopDefinitions.Add(); oPosZLoop.EdgeUseDefinitions.Add(oEdgeDefNegXPosZ, true); oPosZLoop.EdgeUseDefinitions.Add(oEdgeDefNegYPosZ, true); oPosZLoop.EdgeUseDefinitions.Add(oEdgeDefPosXPosZ, false); oPosZLoop.EdgeUseDefinitions.Add(oEdgeDefPosYPosZ, true); EdgeLoopDefinition oNegZLoop = oFaceDefNegZ.EdgeLoopDefinitions.Add(); oNegZLoop.EdgeUseDefinitions.Add(oEdgeDefNegXNegZ, true); oNegZLoop.EdgeUseDefinitions.Add(oEdgeDefNegYNegZ, true); oNegZLoop.EdgeUseDefinitions.Add(oEdgeDefPosXNegZ, false); oNegZLoop.EdgeUseDefinitions.Add(oEdgeDefPosYNegZ, true); //Create a transient surface body. NameValueMap oErrors; SurfaceBody oNewBody = oSurfaceBodyDef.CreateTransientSurfaceBody(out oErrors); // Create client graphics to display the transient body. PartDocument oDoc = (PartDocument)TrAddInServer.MApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject); PartComponentDefinition oDef = oDoc.ComponentDefinition; ClientGraphics oClientGraphics = oDef.ClientGraphicsCollection.Add("Sample3DGraphicsID"); // Create a new graphics node within the client graphics objects. GraphicsNode oSurfacesNode = oClientGraphics.AddNode(1); // Create client graphics based on the transient body SurfaceGraphics oSurfaceGraphics = oSurfacesNode.AddSurfaceGraphics(oNewBody); // Update the view. TrAddInServer.MApp.ActiveView.Update(); }