public Inventor.MateiMateDefinition iMate__(object oEdge, AssemblyComponentDefinition compDef, double offset = 0, InferredTypeEnum inf = InferredTypeEnum.kInferredLine) { MateiMateDefinition oImate = null; Inventor.Face oFace; Inventor.Point pt; switch (inf) { case InferredTypeEnum.kInferredLine: oFace = (((Edge)oEdge).Faces[1].SurfaceType == SurfaceTypeEnum.kCylinderSurface) ? ((Edge)oEdge).Faces[1] : ((Edge)oEdge).Faces[2]; if (((Edge)oEdge).TangentiallyConnectedEdges.Count == 1) { oImate = compDef.iMateDefinitions.AddMateiMateDefinition(oFace, offset, inf, oFace.PointOnFace); } break; case InferredTypeEnum.kInferredPoint: pt = (((Edge)oEdge).Geometry as Circle).Center; oImate = compDef.iMateDefinitions.AddMateiMateDefinition(oEdge, offset, inf); break; case InferredTypeEnum.kNoInference: oFace = (((Edge)oEdge).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? ((Edge)oEdge).Faces[1] : ((Edge)oEdge).Faces[2]; oImate = compDef.iMateDefinitions.AddMateiMateDefinition(oFace, offset, inf); break; default: break; } return(oImate); }
public Inventor.MateiMateDefinition iMate__(object oEdge, PartComponentDefinition compDef, double offset = 0) { MateiMateDefinition oImate = null; Inventor.Face oFace; WorkPoint wp; WorkAxis wa; SketchArc sa1, sa2; SketchLine lin; MidpointConstraint mpc; SketchPoint sp; object a = 0.0; oFace = (((Edge)oEdge).Faces[1].SurfaceType == SurfaceTypeEnum.kCylinderSurface)? ((Edge)oEdge).Faces[1] : ((Edge)oEdge).Faces[2]; if (((Edge)oEdge).TangentiallyConnectedEdges.Count == 1) { /*oFace = oEdge.Faces[1].SurfaceType == SurfaceTypeEnum.kCylinderSurface ? oEdge.Faces[1] : oEdge.Faces[2];*/ // wa = compDef.WorkAxes.AddByRevolvedFace(oFace); // wa.Visible = false; oImate = compDef.iMateDefinitions.AddMateiMateDefinition(oFace, 0, InferredTypeEnum.kInferredLine, oFace.PointOnFace); } else if (((Edge)oEdge).TangentiallyConnectedEdges.Count == 4 || ((Edge)oEdge).TangentiallyConnectedEdges.Count == 3) { ps = (((Edge)oEdge).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface)? compDef.Sketches.Add(((Edge)oEdge).Faces[1]): compDef.Sketches.Add(((Edge)oEdge).Faces[2]); switch (((Edge)((Edge)oEdge).TangentiallyConnectedEdges[1]).GeometryType) { case CurveTypeEnum.kCircularArcCurve: sa1 = (SketchArc)ps.AddByProjectingEntity(((Edge)oEdge).TangentiallyConnectedEdges[1]); sa2 = (SketchArc)ps.AddByProjectingEntity(((Edge)oEdge).TangentiallyConnectedEdges[3]); break; default: sa1 = (SketchArc)ps.AddByProjectingEntity(((Edge)oEdge).TangentiallyConnectedEdges[2]); sa2 = (SketchArc)ps.AddByProjectingEntity(((Edge)oEdge).TangentiallyConnectedEdges[4]); break; } oFace = (((Edge)oEdge).Faces[1].SurfaceType == SurfaceTypeEnum.kCylinderSurface) ? ((Edge)oEdge).Faces[2] : ((Edge)oEdge).Faces[1]; lin = ps.SketchLines.AddByTwoPoints(sa1.CenterSketchPoint, sa2.CenterSketchPoint); sp = ps.SketchPoints.Add(invApp.TransientGeometry.CreatePoint2d()); mpc = ps.GeometricConstraints.AddMidpoint(sp, lin); ps.Visible = false; wp = compDef.WorkPoints.AddByPoint(sp); wa = compDef.WorkAxes.AddByNormalToSurface(oFace, wp); wp.Visible = false; wa.Visible = false; oImate = compDef.iMateDefinitions.AddMateiMateDefinition(wa, a, InferredTypeEnum.kInferredLine, oFace.PointOnFace); } return(oImate); }
public Inventor.MateiMateDefinition iMateMate__(object oEdge, PartComponentDefinition compDef, InferredTypeEnum inf = InferredTypeEnum.kInferredPoint) { MateiMateDefinition def = null; Inventor.Face oFace; switch (inf) { case InferredTypeEnum.kInferredLine: break; case InferredTypeEnum.kInferredPoint: def = compDef.iMateDefinitions.AddMateiMateDefinition(oEdge, 0, inf); break; case InferredTypeEnum.kNoInference: oFace = (((Edge)oEdge).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? ((Edge)oEdge).Faces[1] : ((Edge)oEdge).Faces[2]; def = compDef.iMateDefinitions.AddMateiMateDefinition(oFace, 0, inf); break; default: break; } return(def); }
public void imate(string str, string name, double offset, Document Doc, object edge1, object edge2, bool close = false) { try { switch (Doc.DocumentType) { case DocumentTypeEnum.kAssemblyDocumentObject: AsmCompDef = ((AssemblyDocument)Doc).ComponentDefinition; break; case DocumentTypeEnum.kPartDocumentObject: PartCompDef = ((PartDocument)Doc).ComponentDefinition; break; default: break; } //offset = conv(this.comboBox2.Text); if (str == "Вставка") { switch (Doc.DocumentType) { case DocumentTypeEnum.kAssemblyDocumentObject: insIMateDef = iMate_(edge1, AsmCompDef, offset); objs.Add(insIMateDef); insIMateDef = iMate_(edge2, AsmCompDef, offset); objs.Add(insIMateDef); //if (comboBox3.Text != "") addName(AsmCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; case DocumentTypeEnum.kPartDocumentObject: insIMateDef = iMate_(edge1, PartCompDef, offset); objs.Add(insIMateDef); insIMateDef = iMate_(edge2, PartCompDef, offset); objs.Add(insIMateDef); addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; } } else if (str == "Совмещение по оси") { switch (Doc.DocumentType) { case DocumentTypeEnum.kPartDocumentObject: iMateDef = iMate__(edge1, PartCompDef, offset); objs.Add(iMateDef); iMateDef = iMate__(edge2, PartCompDef, offset); objs.Add(iMateDef); iMateDef = (((Edge)edge1).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? PartCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[1], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge) : PartCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[2], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge); objs.Add(iMateDef); addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; case DocumentTypeEnum.kAssemblyDocumentObject: iMateDef = iMate__(edge1, AsmCompDef, offset); objs.Add(iMateDef); iMateDef = iMate__(edge2, AsmCompDef, offset); objs.Add(iMateDef); iMateDef = (((Edge)edge1).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? AsmCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[1], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge) : AsmCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[2], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge); objs.Add(iMateDef); addName(AsmCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; } } else if (str == "Овал") { switch (Doc.DocumentType) { case DocumentTypeEnum.kPartDocumentObject: Face f1; f1 = (((Edge)edge1).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? ((Edge)edge1).Faces[1]: ((Edge)edge1).Faces[2]; iMateDef = findAxis(PartCompDef, edge1 as Edge); objs.Add(iMateDef); iMateDef = PartCompDef.iMateDefinitions.AddMateiMateDefinition(f1, offset / 10); objs.Add(iMateDef); addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; case DocumentTypeEnum.kAssemblyDocumentObject: Face fp1 = (((Edge)edge1).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? ((EdgeProxy)edge1).Faces[1] : ((Edge)edge1).Faces[2]; Face fp2 = (((Edge)edge1).Faces[1].SurfaceType == SurfaceTypeEnum.kCylinderSurface) ? ((Edge)edge1).Faces[1] : ((Edge)edge1).Faces[2]; iMateDef = AsmCompDef.iMateDefinitions.AddMateiMateDefinition(fp2, 0, InferredTypeEnum.kInferredLine); objs.Add(iMateDef); iMateDef = AsmCompDef.iMateDefinitions.AddMateiMateDefinition(fp1, 0); objs.Add(iMateDef); addName(AsmCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; } } else if (str == "ТЭН-резистор") { switch (Doc.DocumentType) { case DocumentTypeEnum.kAssemblyDocumentObject: insIMateDef = iMate_(edge1, AsmCompDef, offset); objs.Add(insIMateDef); iMateDef = iMate__(edge2, AsmCompDef, offset); objs.Add(iMateDef); addName(AsmCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; case DocumentTypeEnum.kPartDocumentObject: insIMateDef = iMate_(edge1, PartCompDef, offset); objs.Add(insIMateDef); iMateDef = iMate__(edge2, PartCompDef, offset); objs.Add(iMateDef); addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; } } else if (str == "ТЭН") { switch (Doc.DocumentType) { case DocumentTypeEnum.kAssemblyDocumentObject: iMateDef = iMate__(edge1, AsmCompDef, offset); objs.Add(iMateDef); iMateDef = (((Edge)edge1).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? PartCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[1], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge) : PartCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[2], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge); objs.Add(iMateDef); iMateDef = iMate__(edge2, AsmCompDef, offset); objs.Add(iMateDef); addName(AsmCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; case DocumentTypeEnum.kPartDocumentObject: iMateDef = iMate__(edge1, PartCompDef, offset); objs.Add(iMateDef); iMateDef = (((Edge)edge1).Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) ? PartCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[1], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge) : PartCompDef.iMateDefinitions.AddMateiMateDefinition(((Edge)edge1).Faces[2], offset / 10, BiasPoint: ((Edge)edge1).PointOnEdge); objs.Add(iMateDef); iMateDef = iMate__(edge2, PartCompDef, offset); objs.Add(iMateDef); addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; } } // else if (str == "Шип") // { // // //edge2 = (Edge)CmdMgr.Pick(SelectionFilterEnum.kAllLinearEntities, "Выберите верхнюю часть выреза под замыкающий шип"); // switch (Doc.DocumentType) // { // case DocumentTypeEnum.kAssemblyDocumentObject: // thorn<AssemblyComponentDefinition>(edge1, AsmCompDef, ref objs); // //thorn<AssemblyComponentDefinition>(edge2, AsmCompDef, ref objs); // addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs),name); // break; // case DocumentTypeEnum.kPartDocumentObject: // thorn<PartComponentDefinition>(edge1, PartCompDef, ref objs); // //thorn<PartComponentDefinition>(edge2, PartCompDef, ref objs); // addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs),name); // break; // } // } else if (str == "Одиночная вставка" || str == "По элементу") { //edge2 = (Edge)CmdMgr.Pick(SelectionFilterEnum.kAllLinearEntities, "Выберите верхнюю часть выреза под замыкающий шип"); switch (Doc.DocumentType) { case DocumentTypeEnum.kAssemblyDocumentObject: insIMateDef = iMate_(edge1, AsmCompDef, offset); addName(insIMateDef, name); break; case DocumentTypeEnum.kPartDocumentObject: insIMateDef = iMate_(edge1, PartCompDef, offset); addName(insIMateDef, name); break; } } else if (str == "DIN-рейка") { switch (Doc.DocumentType) { case DocumentTypeEnum.kAssemblyDocumentObject: iMateDef = iMate__(edge1, AsmCompDef, offset, InferredTypeEnum.kInferredPoint); objs.Add(iMateDef); iMateDef = iMate__(edge2, AsmCompDef, offset, InferredTypeEnum.kInferredPoint); objs.Add(iMateDef); iMateDef = iMate__(edge2, AsmCompDef, offset, InferredTypeEnum.kNoInference); objs.Add(iMateDef); addName(AsmCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; case DocumentTypeEnum.kPartDocumentObject: iMateDef = iMateMate__(edge1, PartCompDef, InferredTypeEnum.kInferredPoint); objs.Add(iMateDef); iMateDef = iMateMate__(edge2, PartCompDef, InferredTypeEnum.kInferredPoint); objs.Add(iMateDef); iMateDef = iMateMate__(edge2, PartCompDef, InferredTypeEnum.kNoInference); objs.Add(iMateDef); addName(PartCompDef.iMateDefinitions.AddCompositeiMateDefinition(objs), name); break; } } objs.Clear(); } catch (Exception ex) { tr.End(); MessageBox.Show(ex.ToString()); this.Close(); } finally { if (close) { this.Close(); } else { this.Show(); this.button1.Focus(); } } }
/// <summary> /// Add iMate definitions using AddMateiMateDefinition and AddInsertiMateDefinition. /// </summary> /// <remarks></remarks> public void CreateiMateDefinition() { // Create a new part document, using the default part template. PartDocument oPartDoc = (PartDocument)_InvApplication.Documents.Add(DocumentTypeEnum.kPartDocumentObject, _InvApplication.FileManager.GetTemplateFile(DocumentTypeEnum.kPartDocumentObject)); // Set a reference to the component definition. PartComponentDefinition oCompDef = default(PartComponentDefinition); oCompDef = oPartDoc.ComponentDefinition; // Create a new sketch on the X-Y work plane. PlanarSketch oSketch = default(PlanarSketch); oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes[3]); // Set a reference to the transient geometry object. TransientGeometry oTransGeom = default(TransientGeometry); oTransGeom = _InvApplication.TransientGeometry; // Draw a 4cm x 3cm rectangle with the corner at (0,0) SketchEntitiesEnumerator oRectangleLines = default(SketchEntitiesEnumerator); oRectangleLines = oSketch.SketchLines.AddAsTwoPointRectangle(oTransGeom.CreatePoint2d(0, 0), oTransGeom.CreatePoint2d(4, 3)); // Create a profile. Profile oProfile = default(Profile); oProfile = oSketch.Profiles.AddForSolid(); // Create a base extrusion 1cm thick. ExtrudeDefinition oExtrudeDef = default(ExtrudeDefinition); oExtrudeDef = oCompDef.Features.ExtrudeFeatures.CreateExtrudeDefinition(oProfile, PartFeatureOperationEnum.kNewBodyOperation); oExtrudeDef.SetDistanceExtent(1, PartFeatureExtentDirectionEnum.kNegativeExtentDirection); ExtrudeFeature oExtrude1 = default(ExtrudeFeature); oExtrude1 = oCompDef.Features.ExtrudeFeatures.Add(oExtrudeDef); // Get the top face of the extrusion to use for creating the new sketch. Face oFrontFace = default(Face); oFrontFace = oExtrude1.StartFaces[1]; // Create a new sketch on this face, but use the method that allows you to // control the orientation and orgin of the new sketch. oSketch = oCompDef.Sketches.AddWithOrientation(oFrontFace, oCompDef.WorkAxes[1], true, true, oCompDef.WorkPoints[1]); // Create a sketch circle with the center at (2, 1.5). SketchCircle oCircle = default(SketchCircle); oCircle = oSketch.SketchCircles.AddByCenterRadius(oTransGeom.CreatePoint2d(2, 1.5), 0.5); // Create a profile. oProfile = oSketch.Profiles.AddForSolid(); // Create the second extrude (a hole). ExtrudeFeature oExtrude2 = default(ExtrudeFeature); oExtrude2 = oCompDef.Features.ExtrudeFeatures.AddByThroughAllExtent(oProfile, PartFeatureExtentDirectionEnum.kNegativeExtentDirection, PartFeatureOperationEnum.kCutOperation); // Create a mate iMateDefinition on a side face of the first extrude. MateiMateDefinition oMateiMateDefinition = default(MateiMateDefinition); oMateiMateDefinition = oCompDef.iMateDefinitions.AddMateiMateDefinition(oExtrude1.SideFaces[1], 0, InferredTypeEnum.kNoInference, null, "MateA"); // Create a match list of names to use for the next iMateDefinition. string[] strMatchList = new string[3]; strMatchList[0] = "InsertA"; strMatchList[1] = "InsertB"; strMatchList[2] = "InsertC"; // Create an insert iMateDefinition on the cylindrical face of the second extrude. InsertiMateDefinition oInsertiMateDefinition = default(InsertiMateDefinition); oInsertiMateDefinition = oCompDef.iMateDefinitions.AddInsertiMateDefinition(oExtrude2.SideFaces[1], false, 0, null, "InsertA", strMatchList); }