/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { List <double> AllAxises = new List <double>(); List <double> RobotData = new List <double>(); List <GeometryBase> RobotModel = new List <GeometryBase>(); Mesh ToolMeshModel = new Mesh(); double SimRatio = 0; string Path = " "; List <string> stringwrite = new List <string>(); if (!DA.GetDataList(0, AllAxises)) { return; } if (!DA.GetDataList(1, RobotData)) { return; } if (!DA.GetDataList(2, RobotModel)) { return; } if (!DA.GetData(3, ref ToolMeshModel)) { return; } if (!DA.GetData(4, ref SimRatio)) { return; } if (!DA.GetData(5, ref Path)) { return; } double d01 = RobotData[0]; double d12 = RobotData[1]; double d23 = RobotData[2]; double d34 = RobotData[3]; double d45 = RobotData[4]; double d56 = RobotData[5]; string iniA1 = AllAxises[0].ToString(); string iniA2 = AllAxises[1].ToString(); string iniA3 = AllAxises[2].ToString(); string iniA4 = AllAxises[3].ToString(); string iniA5 = AllAxises[4].ToString(); string iniA6 = AllAxises[5].ToString(); int RobotBase = 1; int RobotTool = 1; int RobotVel = 15; int RobotACC = 100; int RobotAPO = 50; int RobotPTP = 3; double RobotVelCp = 0.25; double RobotApocdis = 1.5; double RobotAdvance = 3; stringwrite.Add( @"&ACCESS RVP &REL 1 &PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe &PARAM EDITMASK = * DEF KUKAProg() ;FOLD INI By Cobra(EasyRobot) ;FOLD BASISTECH INI GLOBAL INTERRUPT DECL 3 WHEN $STOPMESS == TRUE DO IR_STOPM() INTERRUPT ON 3 BAS (#INITMOV,0 ) ;ENDFOLD (BASISTECH INI) ;ENDFOLD (INI)"); stringwrite.Add(""); stringwrite.Add(";FOLD STARTPOSITION - BASE IS " + RobotBase + ", TOOL IS " + RobotTool + ", POSITION IS A1 " + iniA1 + ", A2 " + iniA2 + ", A3 " + iniA3 + ", A4 " + iniA4 + ", A5 " + iniA5 + ", A6 " + iniA6); stringwrite.Add("$BWDSTART = FALSE"); stringwrite.Add("PDAT_ACT = {VEL " + RobotVel + ",ACC " + RobotACC + ",APO_DIST " + RobotAPO + "}"); stringwrite.Add("FDAT_ACT = {TOOL_NO " + RobotTool + ",BASE_NO " + RobotBase + ",IPO_FRAME #BASE}"); stringwrite.Add("BAS (#PTP_PARAMS," + RobotPTP + ")"); stringwrite.Add("PTP {A1 " + iniA1 + ", A2 " + iniA2 + ", A3 " + iniA3 + ", A4 " + iniA4 + ", A5 " + iniA5 + ", A6 " + iniA6 + "}"); stringwrite.Add(";ENDFOLD\n"); stringwrite.Add(";FOLD LIN SPEED IS " + RobotVelCp + " m/sec, INTERPOLATION SETTINGS IN FOLD"); stringwrite.Add("$VEL.CP=" + RobotVelCp); stringwrite.Add("$APO.CDIS=" + RobotApocdis); stringwrite.Add("$ADVANCE=" + RobotAdvance); stringwrite.Add(";ENDFOLD\n"); stringwrite.Add(";FOLD COMMANDS IN FOLD. SELECT EDIT/FOLDS/OPEN ALL FOLDS TO DISPLAY"); stringwrite.Add("BAS(#VEL_PTP," + RobotPTP + ")"); List <double[]> AllAxisesD = new List <double[]>(); for (int i = 0; i < AllAxises.Count / 6; i++) { double[] singlePair = new double[6]; for (int j = 0; j < 6; j++) { int indexOfSingle = i * 6 + j; singlePair[j] = AllAxises[indexOfSingle]; } AllAxisesD.Add(singlePair); string A1 = singlePair[0].ToString(); string A2 = singlePair[1].ToString(); string A3 = singlePair[2].ToString(); string A4 = singlePair[3].ToString(); string A5 = singlePair[4].ToString(); string A6 = singlePair[5].ToString(); string output = "PTP {E6AXIS: A1 " + A1 + ", A2 " + A2 + ", A3 " + A3 + ", A4 " + A4 + ", A5 " + A5 + ", A6 " + A6 + "}"; stringwrite.Add(output); } stringwrite.Add(";ENDFOLD"); stringwrite.Add("END"); int simIndex = (int)((AllAxisesD.Count - 1) * SimRatio); double[] UseAxises = AllAxisesD[simIndex]; double UseA1 = -UseAxises[0] * Math.PI / 180; double UseA2 = UseAxises[1] * Math.PI / 180; double UseA3 = UseAxises[2] * Math.PI / 180; double UseA4 = -UseAxises[3] * Math.PI / 180; double UseA5 = UseAxises[4] * Math.PI / 180; double UseA6 = -UseAxises[5] * Math.PI / 180; GeometryBase Axis1Model = RobotModel[0]; GeometryBase Axis12Model = RobotModel[1]; GeometryBase Axis23Model = RobotModel[2]; GeometryBase Axis34Model = RobotModel[3]; GeometryBase Axis45Model = RobotModel[4]; GeometryBase Axis56Model = RobotModel[5]; GeometryBase Axis6Model = RobotModel[6]; Point3d a1p1 = new Point3d(0, 0, 0); Point3d a1p2 = new Point3d(0, 0, d01); Vector3d a1a2 = new Vector3d(d12, 0, 0); Vector3d a1v = new Vector3d(0, 0, 1); a1a2.Rotate(UseA1, a1v); Axis12Model.Rotate(UseA1, a1v, a1p1); //--------------------------- Point3d a2p = Point3d.Add(a1p2, a1a2); Vector3d a2a3 = new Vector3d(d23, 0, 0); Vector3d a2v = new Vector3d(0, 1, 0); a2v.Rotate(UseA1, a1v); a2a3.Rotate(UseA1, a1v); a2a3.Rotate(UseA2, a2v); Vector3d a2pv = new Vector3d(a2p); Axis23Model.Rotate(UseA1, a1v, a1p1); Axis23Model.Rotate(UseA2, a2v, a1p1); Axis23Model.Translate(a2pv); //--------------------------- Point3d a3p = Point3d.Add(a2p, a2a3); Vector3d a3a4 = new Vector3d(0, 0, 25); Vector3d a4a5 = new Vector3d(420, 0, 0); a3a4.Rotate(UseA1, a1v); a3a4.Rotate(UseA2, a2v); a3a4.Rotate(UseA3, a2v); a4a5.Rotate(UseA1, a1v); a4a5.Rotate(UseA2, a2v); a4a5.Rotate(UseA3, a2v); Vector3d a3pv = new Vector3d(a3p); Axis34Model.Rotate(UseA1, a1v, a1p1); Axis34Model.Rotate(UseA2, a2v, a1p1); Axis34Model.Rotate(UseA3, a2v, a1p1); Axis34Model.Translate(a3pv); Point3d a4p = Point3d.Add(a3p, a3a4); Vector3d a4v = new Vector3d(1, 0, 0); a4v.Rotate(UseA1, a1v); a4v.Rotate(UseA2, a2v); a4v.Rotate(UseA3, a2v); Vector3d a4pv = new Vector3d(a4p); Axis45Model.Rotate(UseA1, a1v, a1p1); Axis45Model.Rotate(UseA2, a2v, a1p1); Axis45Model.Rotate(UseA3, a2v, a1p1); Axis45Model.Rotate(UseA4, a4v, a1p1); Axis45Model.Translate(a4pv); //--------------------------- Point3d a5p = Point3d.Add(a4p, a4a5); Vector3d a5a6 = new Vector3d(d56, 0, 0); Vector3d a5v = new Vector3d(0, 1, 0); a5a6.Rotate(UseA1, a1v); a5a6.Rotate(UseA2, a2v); a5a6.Rotate(UseA3, a2v); a5a6.Rotate(UseA4, a4v); a5v.Rotate(UseA1, a1v); a5v.Rotate(UseA4, a4v); a5a6.Rotate(UseA5, a5v); Vector3d a5pv = new Vector3d(a5p); Axis56Model.Rotate(UseA1, a1v, a1p1); Axis56Model.Rotate(UseA2, a2v, a1p1); Axis56Model.Rotate(UseA3, a2v, a1p1); Axis56Model.Rotate(UseA4, a4v, a1p1); Axis56Model.Rotate(UseA5, a5v, a1p1); Axis56Model.Translate(a5pv); Point3d a6p = Point3d.Add(a5p, a5a6); Vector3d a6v = new Vector3d(1, 0, 0); Vector3d a6pv = new Vector3d(a6p); a6v.Rotate(UseA1, a1v); a6v.Rotate(UseA2, a2v); a6v.Rotate(UseA3, a2v); a6v.Rotate(UseA4, a4v); a6v.Rotate(UseA5, a5v); Axis6Model.Rotate(UseA1, a1v, a1p1); Axis6Model.Rotate(UseA2, a2v, a1p1); Axis6Model.Rotate(UseA3, a2v, a1p1); Axis6Model.Rotate(UseA4, a4v, a1p1); Axis6Model.Rotate(UseA5, a5v, a1p1); Axis6Model.Rotate(UseA6, a6v, a1p1); Axis6Model.Translate(a5pv); //--------------------------- ToolMeshModel.Rotate(Math.PI / 2, Vector3d.YAxis, a1p1); ToolMeshModel.Rotate(UseA1, a1v, a1p1); ToolMeshModel.Rotate(UseA2, a2v, a1p1); ToolMeshModel.Rotate(UseA3, a2v, a1p1); ToolMeshModel.Rotate(UseA4, a4v, a1p1); ToolMeshModel.Rotate(UseA5, a5v, a1p1); ToolMeshModel.Rotate(UseA6, a6v, a1p1); ToolMeshModel.Translate(a6pv); //--------------------------- List <Point3d> AxisesPos = new List <Point3d>(); AxisesPos.Add(a1p1); AxisesPos.Add(a1p2); AxisesPos.Add(a2p); AxisesPos.Add(a3p); AxisesPos.Add(a4p); AxisesPos.Add(a5p); AxisesPos.Add(a6p); Polyline RobotArmLine = new Polyline(AxisesPos); List <GeometryBase> RobotArms = new List <GeometryBase>(); RobotArms.Add(Axis1Model); RobotArms.Add(Axis12Model); RobotArms.Add(Axis23Model); RobotArms.Add(Axis34Model); RobotArms.Add(Axis45Model); RobotArms.Add(Axis56Model); RobotArms.Add(Axis6Model); RobotArms.Add(ToolMeshModel); string[] finalExport = stringwrite.ToArray(); System.IO.File.WriteAllLines(Path, finalExport); DA.SetDataList(0, UseAxises); DA.SetData(1, RobotArmLine); DA.SetDataList(2, RobotArms); }