// ASSEMBLY string Load(string name, double x = 0, double y = 0, double z = 0) { sw.OpenDoc6(ApplicationPath + name + ".SLDPRT", 1, 32, "", 0, 0); Model = sw.ActivateDoc(name); swAssembly.AddComponent(ApplicationPath + name + ".SLDPRT", x * mm, y * mm, z * mm); sw.CloseDoc(ApplicationPath + name + ".SLDPRT"); Model = (ModelDoc2)swAssembly; return(Last(-1).Name); }
private void insertCamera() { int loadErrs = 0; int loadWarns = 0; swApp.OpenDoc6(FOV_FILE, (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref loadErrs, ref loadWarns); if (loadErrs > 0) { swApp.SendMsgToUser2("something went wrong, try again", (int)swMessageBoxIcon_e.swMbWarning, (int)swMessageBoxBtn_e.swMbOk); } swAssembly.AddComponent(FOV_FILE, 0, 0, 0); swApp.CloseDoc(FOV_FILE); swAssembly.ForceRebuild(); }
/// <summary> /// Метод построения детали /// </summary> public void BuildCandle(CandleParametrs objParametr) { /// <summary> /// Экземпляру присваиваем значение объекта класса /// </summary> _parametr = objParametr; /// <summary> /// Проверка построена ли деталь /// </summary> _parametr.ExistDetail = true; /// <summary> /// Путь до рабочего стола /// </summary> var pathName = System.Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory); /// <summary> /// Присваивание параметров /// </summary> var carvingLength = _parametr.CarvingLength; var nutLength = _parametr.NutLength; var nutSize = _parametr.NutSize; var isolatorLength = _parametr.IsolatorLength; var chamferRadius = _parametr.ChamferRadius; var plinthLength = _parametr.PlinthLength; var headLength = _parametr.HeadLength; var pitchSize = _parametr.PitchSize; var carvingRadius = _parametr.CarvingRadius; var textEtching = _parametr.TextEtching; var electrodeLength = _parametr.ElectrodeLength; /// <summary> /// Методы класса CandleCreator /// </summary> if (_parametr.ExistHead == true) { CandleCreator.CreateHead(headLength, SwApp, SwModel, _detailNames, pathName); } CandleCreator.CreatePlinth(plinthLength, SwApp, SwModel, _detailNames, textEtching, pathName); CandleCreator.CreateNut(nutLength, nutSize, SwApp, SwModel, _detailNames, chamferRadius, pathName); CandleCreator.CreateIsolator(isolatorLength, SwApp, SwModel, _detailNames, pathName); CandleCreator.CreateCarving(carvingLength, SwApp, SwModel, _detailNames, pitchSize, carvingRadius, electrodeLength, pathName); /// <summary> /// Создание сборки /// </summary> AssemblyDoc swAssembly = SwApp.NewAssembly(); SwModel = ((ModelDoc2)(SwApp.ActiveDoc)); if (_parametr.ExistHead == true) { swAssembly.AddComponent2(_detailNames[0], 0, 0, headLength / 2); swAssembly.AddComponent2(_detailNames[1], 0, 0, plinthLength / 2 + headLength); swAssembly.AddComponent2(_detailNames[2], 0, 0, nutLength / 2 + headLength + plinthLength); swAssembly.AddComponent(_detailNames[3], 0, 0, isolatorLength / 2 + headLength + plinthLength + nutLength); swAssembly.AddComponent(_detailNames[4], 0, 0, carvingLength / 2 + headLength + plinthLength + isolatorLength + nutLength); } else { swAssembly.AddComponent2(_detailNames[0], 0, 0, plinthLength / 2 + headLength); swAssembly.AddComponent2(_detailNames[1], 0, 0, nutLength / 2 + headLength + plinthLength); swAssembly.AddComponent(_detailNames[2], 0, 0, isolatorLength / 2 + headLength + plinthLength + nutLength); swAssembly.AddComponent(_detailNames[3], 0, 0, carvingLength / 2 + headLength + plinthLength + isolatorLength + nutLength); } /// <summary> /// Выбор вида "Изометрия" /// </summary> SwModel.Extension.SelectByID2("", "FACE", 0, 0, 0, true, 0, null, 0); swAssembly.AddMate((int)swMateType_e.swMateCONCENTRIC, (int)swMateAlign_e.swAlignAGAINST, false, 1, 0); SwModel.ShowNamedView("*Изометрия"); SwModel.ClearSelection(); SwModel.EditRebuild3(); /// <summary> /// Закрытие созданных документов /// </summary> SwApp.CloseDoc(_detailNames[0]); SwApp.CloseDoc(_detailNames[1]); SwApp.CloseDoc(_detailNames[2]); SwApp.CloseDoc(_detailNames[3]); if (_parametr.ExistHead == true) { SwApp.CloseDoc(_detailNames[4]); } /// <summary> /// Сохранение сборки /// </summary> string modelName = pathName + "Свеча.SLDASM"; SwModel.SaveAs(modelName); }
public void Main() { ModelDoc2 swDoc; PartDoc swPart = null; DrawingDoc swDrawing = null; AssemblyDoc swAssembly = null; bool boolstatus = false; int longstatus = 0; int longwarnings = 0; string FileLocation = "E:\\My Douments\\MQP\\SOLIDWORKS\\Gear Creation script\\"; //directory for all parts created and modified in this code (Templates should be here) string Gear_Template = "Spur gear - Metric Template.sldprt"; //filename of the spur gear template string Housing = "GEAR_HOUSING_MACRO.sldprt"; //filename for gearbox housing string ASSEMBLY = "GEARBOX_ASSEMBLY_MACRO.sldasm"; //filename for Assembly file string SHAFT_TEMPLATE = "SHAFT_TEMPLATE.sldprt"; int i; //number of gears to create (replace with input data later) //***************************CREATE GEARS*********************************** int num_gears = 5; //number of gears in assembly to generate double[][] Gear_info = new double[num_gears][]; //array of arrays(jagged) to store data about each gear //raw gear data {#teeth, width,shaft,locked to shaft, other gear to mesh with(255 indicates no output),distance from } // 0 1 2 3 4 5 Gear_info[0] = new double[] { 10, 4, 0, 1, 1, 0.000 }; // #teeth, width mm, which shaft to connect to, if locked on shaft, distance between shafts Gear_info[1] = new double[] { 40, 4, 1, 0, 2, 0.000 }; Gear_info[2] = new double[] { 20, 4, 2, 1, 255, 0.000 }; Gear_info[3] = new double[] { 40, 4, 2, 1, 4, 0.004 }; Gear_info[4] = new double[] { 20, 4, 1, 1, 255, 0.004 }; //shaft info double Shaft_Diameter = 1; //diameter in mm (also used for bore dia. in gears) int num_shafts = 3; double Shaft_length = 2 * Gear_info[0][1]; //length of shaft, make slightly larger than width of gear for now double Modulus = .25; //gear modulus for all gears double[] shaft_spacing = new double[] { 4, 5, 8 }; //temporarily use this for the shaft spacing for (i = 0; i < num_gears; i++) //create each gear based off the template { swDoc = ((ModelDoc2)(swApp.OpenDoc6(FileLocation + Gear_Template, 1, 0, "", ref longstatus, ref longwarnings))); double NUM_TEETH = Gear_info[i][0]; Double WIDTH = Gear_info[i][1];// gear depth in mm double SHOW_TEETH = NUM_TEETH; //change sketch dimmensions in the reference sketch: "HoldingSke" ((Dimension)(swDoc.Parameter("Show_teeth@HoldingSke"))).SystemValue = SHOW_TEETH * (3.14159 / 180); //have to convert degrees to radians, num_teeth is saved as angle measurment in the sketch ((Dimension)(swDoc.Parameter("Num_teeth@HoldingSke"))).SystemValue = NUM_TEETH * (3.14159 / 180); //display all the teeth ((Dimension)(swDoc.Parameter("Width@HoldingSke"))).SystemValue = WIDTH / 1000; ((Dimension)(swDoc.Parameter("Bore@HoldingSke"))).SystemValue = Shaft_Diameter / 1000; ((Dimension)(swDoc.Parameter("Module@HoldingSke"))).SystemValue = Modulus / 1000; boolstatus = swDoc.EditRebuild3(); //rebuild the document longstatus = swDoc.SaveAs3(FileLocation + "GEAR_MACRO" + i + ".sldprt", 0, 2); //save gear as gear number i in a new folder called MACRO_PARTS } //***************************CREATE SHAFTS*********************************** for (i = 0; i < num_shafts; i++) { swDoc = ((ModelDoc2)(swApp.OpenDoc6(FileLocation + SHAFT_TEMPLATE, 1, 0, "", ref longstatus, ref longwarnings))); //change sketch dimmensions ((Dimension)(swDoc.Parameter("Diameter@Sketch1"))).SystemValue = Shaft_Diameter / 1000; ((Dimension)(swDoc.Parameter("Shaft Length@Sketch1"))).SystemValue = Shaft_length / 1000; boolstatus = swDoc.EditRebuild3(); //rebuild the document longstatus = swDoc.SaveAs3(FileLocation + "SHAFT_MACRO" + i + ".sldprt", 0, 2); //save gear as gear number i in a new folder called MACRO_PARTS //code to create shafts of set diameters or something } //***************************CREATE ASSEMBLY*********************************** //Open All components to be added for (i = 0; i < num_gears; i++) { swDoc = ((ModelDoc2)(swApp.OpenDoc6(FileLocation + "GEAR_MACRO" + i + ".sldprt", 1, 0, "", ref longstatus, ref longwarnings))); swDoc = ((ModelDoc2)(swApp.OpenDoc6(FileLocation + "SHAFT_MACRO" + i + ".sldprt", 1, 0, "", ref longstatus, ref longwarnings))); } //Open the assembly swDoc = ((ModelDoc2)(swApp.OpenDoc6(FileLocation + "Assembly_Template.SLDASM", 2, 0, "", ref longstatus, ref longwarnings))); swDoc = ((ModelDoc2)(swApp.ActiveDoc)); swApp.ActivateDoc2("Assembly_Template.SLDASM", false, ref longstatus); swAssembly = ((AssemblyDoc)(swDoc)); //add components to SW assembly //****** Currently Parts must already be opened seperately to add to assmebly ******* //***************************SHAFT MATES*********************************** //names of edges and faces in the template: Front Edge ( circle along front) // Surface (cylinder surface of rod) //make face coincident with corresponding hole on housing Mate2 myMate = null; //insert shaft //insert point for mate //align along axis //mate oring to point double[][] Shaft_coord = new double[num_shafts][]; //array of arrays(jagged) to store data about each gear double x; double y; double z; //shaft coords x, y, z Shaft_coord[0] = new double[] { .000, .000, .000 }; Shaft_coord[1] = new double[] { .000, .000, .008 }; Shaft_coord[2] = new double[] { .000, .000, .018 }; //Shaft_coord[3] = new double[] {.019, .000, 0}; for (i = 0; i < num_shafts; i++) { boolstatus = swAssembly.AddComponent(FileLocation + "SHAFT_Macro" + i + ".sldprt", 0, 0, 0); if (i == 0) { swDoc.ClearSelection2(true); boolstatus = swDoc.Extension.SelectByID2("SHAFT_MACRO" + i + "-1@Assembly_Template", "COMPONENT", 0, 0, 0, false, 0, null, 0); swAssembly.UnfixComponent(); } x = Shaft_coord[i][0]; y = Shaft_coord[i][1]; z = Shaft_coord[i][2]; boolstatus = swDoc.Extension.SelectByID2("Shaft coords sketch", "SKETCH", 0, 0, 0, false, 0, null, 0); swDoc.EditSketch(); swDoc.ClearSelection2(true); SketchPoint skPoint = null; skPoint = ((SketchPoint)(swDoc.SketchManager.CreatePoint(x, y, z))); //create a point //have to make point fixed! //make origin coincident to its sketch point boolstatus = swDoc.Extension.SelectByID2("Point" + (i + 11) + "@Shaft coords sketch", "EXTSKETCHPOINT", x, y, z, true, 1, null, 0); boolstatus = swDoc.Extension.SelectByID2("Point1@Origin@SHAFT_MACRO" + i + "-1@Assembly_Template", "EXTSKETCHPOINT", 0, 0, 0, true, 1, null, 0); myMate = null; swAssembly = ((AssemblyDoc)(swDoc)); myMate = ((Mate2)(swAssembly.AddMate5(0, 0, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0, out longstatus))); swDoc.ClearSelection2(true); swDoc.EditRebuild3(); //parallel to axis boolstatus = swDoc.Extension.SelectByID2("Center Axis@SHAFT_MACRO" + i + "-1@Assembly_Template", "AXIS", 0, 0, 0, false, 0, null, 0); boolstatus = swDoc.Extension.SelectByID2("Line1@Reference Direction", "EXTSKETCHSEGMENT", 0, 0, 0.0021382559642120218, true, 1, null, 0); myMate = null; swAssembly = ((AssemblyDoc)(swDoc)); myMate = ((Mate2)(swAssembly.AddMate5(3, 1, false, 0.0029999999999767309, 0.001, 0.001, 0.001, 0.001, 0, 0.5235987755983, 0.5235987755983, false, false, 0, out longstatus))); swDoc.ClearSelection2(true); swDoc.EditRebuild3(); } //***************************GEAR MATES*********************************** string face_sel; //holds string with name of the face to select for (i = 0; i < num_gears; i++) { Double DistanceMate = Gear_info[i][5]; // gear loacation on shaft boolstatus = swAssembly.AddComponent(FileLocation + "GEAR_MACRO" + i + ".sldprt", -0.5, 0, 0); //Distance mate from edge of shaft boolstatus = swDoc.Extension.SelectByID2("EDGE@GEAR_MACRO" + i + "-1@Assembly_Template", "PLANE", 0, 0, 0, true, 0, null, 0); //face plane of gear boolstatus = swDoc.Extension.SelectByID2("Right@SHAFT_MACRO" + Gear_info[i][2] + "-1@Assembly_Template", "PLANE", 0, 0, 0, true, 0, null, 0); //shaft hole in housing myMate = (Mate2)swAssembly.AddMate5(5, 1, false, DistanceMate, DistanceMate, DistanceMate, 0, 0, 0, 0, 0, false, false, 0, out longstatus); swDoc.ClearSelection2(true); //concentric to shaft boolstatus = swDoc.Extension.SelectByID2("Central Axis@GEAR_MACRO" + i + "-1@Assembly_Template", "AXIS", 0, 0, 0, true, 0, null, 0); //axis of gear boolstatus = swDoc.Extension.SelectByID2("Center Axis@SHAFT_MACRO" + Gear_info[i][2] + "-1@Assembly_Template", "AXIS", 0, 0, 0, true, 0, null, 0); //axis of shaft myMate = (Mate2)swAssembly.AddMate4((int)swMateType_e.swMateCOINCIDENT, (int)swMateAlign_e.swMateAlignALIGNED, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, out longstatus); swDoc.ClearSelection2(true); //lock to shaft if (Gear_info[i][3] == 1) //if gear locked to shaft (make two planes coincident) { boolstatus = swDoc.Extension.SelectByID2("Plane2@GEAR_MACRO" + i + "-1@Assembly_Template", "PLANE", 0, 0, 0, true, 0, null, 0); //face plane of shaft boolstatus = swDoc.Extension.SelectByID2("Front@SHAFT_MACRO" + Gear_info[i][2] + "-1@Assembly_Template", "PLANE", 0, 0, 0, true, 0, null, 0); //shaft hole in housing myMate = (Mate2)swAssembly.AddMate4((int)swMateType_e.swMateCOINCIDENT, (int)swMateAlign_e.swMateAlignALIGNED, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, out longstatus); swDoc.ClearSelection2(true); swDoc.EditRebuild3(); } } //gear mate for (i = 0; i < (num_gears); i++) { if (Gear_info[i][4] != 255) //if -1 that means do not make a gear mate (don't make gear mate for last gear sinc it is output, no gear to mesh to!!!!) { boolstatus = swDoc.Extension.SelectByID2("Central Axis@GEAR_MACRO" + i + "-1@Assembly_Template", "AXIS", 0, 0, 0, true, 0, null, 0); //axis of gear boolstatus = swDoc.Extension.SelectByID2("Central Axis@GEAR_MACRO" + Gear_info[i][4] + "-1@Assembly_Template", "AXIS", 0, 0, 0, true, 0, null, 0); //axis of gear myMate = (Mate2)swAssembly.AddMate4((int)swMateType_e.swMateGEAR, (int)swMateAlign_e.swMateAlignALIGNED, false, 0, 0, 0, Gear_info[i][0], Gear_info[i + 1][0], 0, 0, 0, false, false, out longstatus); //gear mate, specify num. and denom. of gear ratio as #teeth on gear swDoc.ClearSelection2(true); swDoc.EditRebuild3(); } } /* * * * // boolstatus = swDoc.Extension.SelectByID2("", "FACE", -0.00455748224163699, 0.0037205844126901866, 0.004682722786242266, false, 0, null, 0); * // boolstatus = swDoc.Extension.SelectByID2("", "FACE", 0.0018884588073433406, 0.00336302382845588, -0.00060759657679909651, true, 0, null, 1); * // swDoc.ClearSelection2(true); * * boolstatus = swDoc.Extension.SelectByID2("Plane3@30 tooth gear-1@Assem4", "PLANE", 0, 0, 0, true, 0, null, 0); * boolstatus = swDoc.Extension.SelectByID2("Plane3@50 tooth gear-1@Assem4", "PLANE", 0, 0, 0, true, 0, null, 0); * //Mate2 myMate = null; * // swAssembly = ((AssemblyDoc)(swDoc)); * * //add mate to two parts (by selection) * // myMate = (Mate2)swAssembly.AddMate4((int)swMateType_e.swMateCOINCIDENT, (int)swMateAlign_e.swMateAlignALIGNED, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, out longstatus); * // swDoc.ClearSelection2(true); * * * boolstatus = swDoc.Extension.SelectByID2("Bore of@50 tooth gear-1@Assem4", "PLANE", 0, 0, 0, true, 0, null, 0); * * * swDoc.EditRebuild3(); */ }