diff --git a/grasshopper/planes_to_3dp_rapid_program.ghx b/grasshopper/planes_to_3dp_rapid_program.ghx index 8bf1853..84e6a03 100644 --- a/grasshopper/planes_to_3dp_rapid_program.ghx +++ b/grasshopper/planes_to_3dp_rapid_program.ghx @@ -16,15 +16,14 @@ 1 0 - 7 + 8 - + 0e119cf5-2121-4535-8769-3a6325af05fc Shaded - Selection 1 100;150;0;0 @@ -35,9 +34,10 @@ - + 637057953500735547 + false planes_to_3dp_rapid_program.ghx @@ -49,10 +49,10 @@ - 591 - 22 + 78 + 81 - 0.652507961 + 0.34666333 @@ -69,13 +69,37 @@ - 1 + 4 - + + + Robert McNeel & Associates + 00000000-0000-0000-0000-000000000000 + Grasshopper + 8.12.24282.7001 + + + + + Robert McNeel & Associates + 00000000-0000-0000-0000-000000000000 + Grasshopper + 8.12.24282.7001 + + + + + Robert McNeel & Associates + 00000000-0000-0000-0000-000000000000 + Grasshopper + 8.12.24282.7001 + + + - GhPython, Version=7.37.24107.15001, Culture=neutral, PublicKeyToken=null - 7.37.24107.15001 + GhPython, Version=8.12.24282.7001, Culture=neutral, PublicKeyToken=null + 8.12.24282.7001 00000000-0000-0000-0000-000000000000 @@ -86,9 +110,9 @@ - 22 + 38 - + c552a431-af5b-46a9-a8a4-0fcbc27ef596 @@ -140,517 +164,108 @@ - - 410755b1-224a-4c1e-a407-bf32fb45ea7e - 00000000-0000-0000-0000-000000000000 - GhPython Script + + bc3e379e-7206-4e7b-b63a-ff61f4b38a3e + Construct Plane - - import Rhino.Geometry as rg - -EXT_AXES = "[9E9,9E9,9E9,9E9,9E9,9E9]" - -def rg_plane_to_posdata(plane): - x, y, z = plane.Origin - - posdata = "[[{:.1f}, {:.1f}, {:.1f}],".format(x, y, z) - - q = rg.Quaternion.Rotation(rg.Plane.WorldXY, plane) - - posdata += "[{:.4f}, {:.4f}, {:.4f}, {:.4f}],".format(q.A, q.B, q.C, q.D) - posdata += "[0,0,0,0],{}]".format(EXT_AXES) - - return posdata - -if wobj_name is None: - wobj_name = "wobj0" -if tool_name is None: - tool_name = "tool0" - -if start_configuration is None: - start_configuration = [0, 0, 0, 0, 0, 0] - -heater_on = "DO_1" -stepper_on = "DO_10" - -if print_speed_value is None: - print_speed_value = "s_printSpeed" - -TRAVEL_SPEED_VALUE = "v300" - -PRINT_SPEED_NAME = "s_printSpeed" -TRAVEL_SPEED_NAME = "s_travelSpeed" - -module_level_vars = """VAR speeddata {}:={}; - VAR speeddata {}:={}; -""".format(PRINT_SPEED_NAME, print_speed_value, TRAVEL_SPEED_NAME, TRAVEL_SPEED_VALUE) - - -main_proc = """PROC main() - IF RobOS() = FALSE THEN - {} := vmax; ! run at max speed in robotstudio - {} := vmax; - ENDIF - print; - ENDPROC -""".format(TRAVEL_SPEED_NAME, PRINT_SPEED_NAME) - -extrude10sec_proc = """PROC Extrude10Sec () - SetDO {}, 1; - SetDO\SDelay:=10, {}, 0; - ENDPROC -""".format(stepper_on, stepper_on) -home_joint_pos = "[" + ",".join([str(c) for c in start_configuration]) + "]" - -move_abs_j_start = "MoveAbsJ [{}, {}], {}, fine, tool0;".format(home_joint_pos,EXT_AXES,TRAVEL_SPEED_NAME) -move_j_start = "MoveJ {}, {}, fine, {}, \WObj:={};".format(rg_plane_to_posdata(planes[0]), - TRAVEL_SPEED_NAME, - tool_name, - wobj_name) -rapid = """MODULE fdm_print - {} - {} - {} - PROC print() - {} - SetDO {}, 1; ! heater on - TPWrite "Press play when extruder is at right temperature"; - Stop; - {} -""".format(module_level_vars, - extrude10sec_proc, - main_proc, - move_abs_j_start, - heater_on, - move_j_start) - -last_is_travel_pt = True -for plane, tp in zip(planes, is_travel_point): - new_lines = "" - if tp: - if not last_is_travel_pt: - new_lines = " SetDO {}, 0; ! stepper on\n".format(stepper_on) - speed = TRAVEL_SPEED_NAME - else: - if last_is_travel_pt: - new_lines = " SetDO {}, 1; ! stepper off\n".format(stepper_on) - speed = PRINT_SPEED_NAME - posdata = rg_plane_to_posdata(plane) - new_lines += " MoveL {}, {}, fine, {}, \WObj:={};".format(posdata, speed, tool_name, wobj_name) - - rapid += new_lines + "\n" - last_is_travel_pt = tp - -rapid += """ SetDO {}, 0; ! stepper off - SetDO {}, 0; ! heater off - ENDPROC -ENDMODULE""".format(stepper_on, heater_on) - GhPython provides a Python script component - - 143 - 189 - - - 1116 - 922 - - true - false - false - a5279ede-8419-4107-8588-6c500eef1099 - false - true - GhPython Script - GhPython Script + + Construct a plane from an origin point and {x}, {y} axes. + true + bb7630ea-7415-4ee8-9aad-69d4732fc1b3 + Construct Plane + Construct Plane - + - + - 848 - 112 - 167 - 124 + 242 + 49 + 107 + 64 - 963 - 174 + 296 + 81 - true - - - 6 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 2 - 3ede854e-c753-40eb-84cb-b48008f14fd4 - 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + Origin of plane + 0d861740-983a-4f2d-a910-b5d9acd3966c + Origin + Origin + false + 79964760-34dd-4f79-9faf-d4a0805a64df + 1 - - - - 1 - true - Script variable Python - 40ab45a8-1999-4b1b-a125-6c36891a0be6 - planes - planes - true - 1 - true - a2a53a4b-4c7e-490a-a91d-e9c63147897a - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + 244 + 51 + 37 + 20 + + + 264 + 61 + - - - - - 850 - 114 - 98 - 20 - - - 900.5 - 124 - - true - - - - - - 1 - true - Script input is_travel_point. - 267a5833-ab38-4f2f-aa3c-9e336f20b1eb - is_travel_point - is_travel_point - true - 1 - true - 2bd7c1d1-3e8c-430c-a0d4-3492d2e1b251 - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 + + + 1 - - - - 850 - 134 - 98 - 20 - - - 900.5 - 144 - - true + + + 1 + {0} + + + + + + 0 + 0 + 0 + + + + - - - 1 - true - Script input start_configuration. - 2d9d7a65-0b50-4daa-9e2c-b2d527fae4ad - start_configuration - start_configuration - true - 1 - true - b2ec7627-4d18-47ab-9054-ff41582d03d4 - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 850 - 154 - 98 - 20 - - - 900.5 - 164 - - true - - - - - - - true - Script input tool_name. - 024e55a0-b948-481f-8c41-eb25a1276e8e - tool_name - tool_name - true - 0 - true - 0 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 850 - 174 - 98 - 20 - - - 900.5 - 184 - - true - - - - - - - true - Script input wobj_name. - 64fe089d-9515-401a-826b-0314160f14af - wobj_name - wobj_name - true - 0 - true - 86fa3b2e-4be4-4b43-9c60-24bdf6bb7bfb - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 850 - 194 - 98 - 20 - - - 900.5 - 204 - - true - - - - - - - true - Script input print_speed_value. - 0c803f7e-5381-4b0e-af7d-9b03e7f084ab - x - print_speed_value - true - 0 - true - 1e75d57f-b361-478c-ac1b-ff49594fff5b - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 850 - 214 - 98 - 20 - - - 900.5 - 224 - - true - - - - - - - The execution information, as output and error streams - ccc05204-07d0-4120-8ef6-2a3038c83e40 - out - out - false - 0 - - - - - - 978 - 114 - 35 - 60 - - - 995.5 - 144 - - true - - - - - - - Script output rapid. - 4a47ea2c-b159-4dc3-b5c9-38598f25a9d1 - rapid - rapid - false - 0 - - - - - - 978 - 174 - 35 - 60 - - - 995.5 - 204 - - true - - - - - - - - - - - - - bc3e379e-7206-4e7b-b63a-ff61f4b38a3e - Construct Plane - - - - - Construct a plane from an origin point and {x}, {y} axes. - bb7630ea-7415-4ee8-9aad-69d4732fc1b3 - Construct Plane - Construct Plane - - - - - - 491 - 92 - 107 - 64 - - - 545 - 124 - - - - - - Origin of plane - 0d861740-983a-4f2d-a910-b5d9acd3966c - Origin - Origin - false - b741ed71-abad-42db-8ddb-617782cd705d - 1 - - - - - - 493 - 94 - 37 - 20 - - - 513 - 104 - - - - - - 1 - - - - - 1 - {0} - - - - - - - 0 - 0 - 0 - - - - - - - - - - - - X-Axis direction of plane - 13e94d6e-58f8-4a90-81a3-46e9d67dba4d - X-Axis - X-Axis - false - 0 - - - - - - 493 - 114 - 37 - 20 - - - 513 - 124 - + + + + + X-Axis direction of plane + 13e94d6e-58f8-4a90-81a3-46e9d67dba4d + X-Axis + X-Axis + false + 0 + + + + + + 244 + 71 + 37 + 20 + + + 264 + 81 + @@ -692,14 +307,14 @@ ENDMODULE""".format(stepper_on, heater_on) - 493 - 134 + 244 + 91 37 20 - 513 - 144 + 264 + 101 @@ -742,14 +357,14 @@ ENDMODULE""".format(stepper_on, heater_on) - 560 - 94 + 311 + 51 36 60 - 578 - 124 + 329 + 81 @@ -759,15 +374,16 @@ ENDMODULE""".format(stepper_on, heater_on) - + c73e1ed0-82a2-40b0-b4df-8f10e445d60b Flip Plane - + Flip or swap the axes of a plane + true dfb01cee-fa20-4b72-bef2-78ff71a7fbf5 Flip Plane Flip Plane @@ -1012,21 +628,22 @@ ENDMODULE""".format(stepper_on, heater_on) - + 59e0b89a-e487-49f8-bab8-b5bab16be14c Panel - + A panel for custom notes and text values a9ca12a0-8525-4755-835c-17419e394659 + true Panel false 0 - 4a47ea2c-b159-4dc3-b5c9-38598f25a9d1 + a8a1c30e-2aee-4c19-98df-97ddb53a11e1 1 Double click to edit panel content… @@ -1034,8 +651,8 @@ ENDMODULE""".format(stepper_on, heater_on) - 1306 - 36 + 3798 + -13 1286 915 @@ -1043,8 +660,8 @@ ENDMODULE""".format(stepper_on, heater_on) 0 0 - 1306.972 - 36.09787 + 3798.0059 + -12.954193 @@ -1066,4964 +683,1527 @@ ENDMODULE""".format(stepper_on, heater_on) - + - fbac3e32-f100-4292-8692-77240a42fd1a - Point + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble - - Contains a collection of three-dimensional points - b741ed71-abad-42db-8ddb-617782cd705d - Point - Point - false - 0 - - - - - - 40 - 58 - 50 - 24 - + + true + + 37.3931 + 12.37911 + + + 210.43997 + 12.37911 + + + 210.43997 + 36.011925 + + + 37.3931 + 36.011925 + + A quick note + Microsoft Sans Serif + 3596d7e9-1124-46e2-8a96-415a6d3743a9 + false + Scribble + Scribble + 25 + Points by layer + + + + + + 32.3931 + 7.3791103 + 183.04688 + 33.632812 + - 65.36438 - 70.01965 + 37.3931 + 12.37911 - - - 1 + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + if save: + with open(filepath, mode="w") as fp: + fp.write(contents) + GhPython provides a Python script component + + 160 + 160 + + + 741 + 702 + + true + true + false + false + 382d864d-0b6a-42ab-a178-a21075f8305d + false + true + GhPython Script + GhPython Script + + + + + + 3473 + 467 + 109 + 64 + + + 3539 + 499 + - - - - 325 - {0} + + + + 3 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 2 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + true + Script variable Python + b2eb3e20-1624-4752-b939-d3f0edc90494 + contents + contents + true + 0 + true + a8a1c30e-2aee-4c19-98df-97ddb53a11e1 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 0 - 0 - 0 + + + + + 3475 + 469 + 49 + 20 - - - - - - - 200 - 100 - 10 + + 3501 + 479 - - - - - 200 - 1100 - 10 + + + + + true + Script input filepath. + a3500743-b97e-4f4d-84d9-43d64999943f + filepath + filepath + true + 0 + true + 6e460059-dafa-418f-a1eb-1d3c14c03b73 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3475 + 489 + 49 + 20 - - - - - - - 600 - 1100 - 10 + + 3501 + 499 - - - - - 600 - 100 - 10 + + + + + true + Script input save. + 2f97769e-a805-44fe-86d3-dac746a28908 + save + save + true + 0 + true + c3c2f1fd-a76b-4d3f-9c8c-beaa08825193 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3475 + 509 + 49 + 20 - - - - - - - 200 - 100 - 10 + + 3501 + 519 - - - - - 260 - 160 - 10 + + + + + The execution information, as output and error streams + de16a698-96e3-4032-9a99-60a085e0d13e + out + out + false + 0 + + + + + + 3554 + 469 + 26 + 30 + + + 3567 + 484 - - - - - 279 - 179 - 10 + + + + + Script output a. + e8b42de2-cd1c-4df8-bd2f-2cda2470f247 + a + a + false + 0 + + + + + + 3554 + 499 + 26 + 30 + + + 3567 + 514 - - - - - 279 - 1021 - 10 - - - - - - - - 521 - 1021 - 10 - - - - - - - - 521 - 179 - 10 - - - - - - - - 298 - 179 - 10 - - - - - - - - 279 - 160 - 10 - - - - - - - - 540 - 160 - 10 - - - - - - - - 540 - 1040 - 10 - - - - - - - - 260 - 1040 - 10 - - - - - - - - 260 - 160 - 10 - - - - - - - - 260 - 160 - 20 - - - - - - - - 279 - 179 - 20 - - - - - - - - 279 - 1021 - 20 - - - - - - - - 521 - 1021 - 20 - - - - - - - - 521 - 179 - 20 - - - - - - - - 298 - 179 - 20 - - - - - - - - 279 - 160 - 20 - - - - - - - - 540 - 160 - 20 - - - - - - - - 540 - 1040 - 20 - - - - - - - - 260 - 1040 - 20 - - - - - - - - 260 - 160 - 20 - - - - - - - - 260 - 160 - 30 - - - - - - - - 279 - 179 - 30 - - - - - - - - 279 - 1021 - 30 - - - - - - - - 521 - 1021 - 30 - - - - - - - - 521 - 179 - 30 - - - - - - - - 298 - 179 - 30 - - - - - - - - 279 - 160 - 30 - - - - - - - - 540 - 160 - 30 - - - - - - - - 540 - 1040 - 30 - - - - - - - - 260 - 1040 - 30 - - - - - - - - 260 - 160 - 30 - - - - - - - - 260 - 160 - 40 - - - - - - - - 279 - 179 - 40 - - - - - - - - 279 - 1021 - 40 - - - - - - - - 521 - 1021 - 40 - - - - - - - - 521 - 179 - 40 - - - - - - - - 298 - 179 - 40 - - - - - - - - 279 - 160 - 40 - - - - - - - - 540 - 160 - 40 - - - - - - - - 540 - 1040 - 40 - - - - - - - - 260 - 1040 - 40 - - - - - - - - 260 - 160 - 40 - - - - - - - - 260 - 160 - 50 - - - - - - - - 279 - 179 - 50 - - - - - - - - 279 - 1021 - 50 - - - - - - - - 521 - 1021 - 50 - - - - - - - - 521 - 179 - 50 - - - - - - - - 298 - 179 - 50 - - - - - - - - 279 - 160 - 50 - - - - - - - - 540 - 160 - 50 - - - - - - - - 540 - 1040 - 50 - - - - - - - - 260 - 1040 - 50 - - - - - - - - 260 - 160 - 50 - - - - - - - - 260 - 160 - 60 - - - - - - - - 279 - 179 - 60 - - - - - - - - 279 - 1021 - 60 - - - - - - - - 521 - 1021 - 60 - - - - - - - - 521 - 179 - 60 - - - - - - - - 298 - 179 - 60 - - - - - - - - 279 - 160 - 60 - - - - - - - - 540 - 160 - 60 - - - - - - - - 540 - 1040 - 60 - - - - - - - - 260 - 1040 - 60 - - - - - - - - 260 - 160 - 60 - - - - - - - - 260 - 160 - 70 - - - - - - - - 279 - 179 - 70 - - - - - - - - 279 - 1021 - 70 - - - - - - - - 521 - 1021 - 70 - - - - - - - - 521 - 179 - 70 - - - - - - - - 298 - 179 - 70 - - - - - - - - 279 - 160 - 70 - - - - - - - - 540 - 160 - 70 - - - - - - - - 540 - 1040 - 70 - - - - - - - - 260 - 1040 - 70 - - - - - - - - 260 - 160 - 70 - - - - - - - - 260 - 160 - 80 - - - - - - - - 279 - 179 - 80 - - - - - - - - 279 - 1021 - 80 - - - - - - - - 521 - 1021 - 80 - - - - - - - - 521 - 179 - 80 - - - - - - - - 298 - 179 - 80 - - - - - - - - 279 - 160 - 80 - - - - - - - - 540 - 160 - 80 - - - - - - - - 540 - 1040 - 80 - - - - - - - - 260 - 1040 - 80 - - - - - - - - 260 - 160 - 80 - - - - - - - - 260 - 160 - 90 - - - - - - - - 279 - 179 - 90 - - - - - - - - 279 - 1021 - 90 - - - - - - - - 521 - 1021 - 90 - - - - - - - - 521 - 179 - 90 - - - - - - - - 298 - 179 - 90 - - - - - - - - 279 - 160 - 90 - - - - - - - - 540 - 160 - 90 - - - - - - - - 540 - 1040 - 90 - - - - - - - - 260 - 1040 - 90 - - - - - - - - 260 - 160 - 90 - - - - - - - - 260 - 160 - 100 - - - - - - - - 279 - 179 - 100 - - - - - - - - 279 - 1021 - 100 - - - - - - - - 521 - 1021 - 100 - - - - - - - - 521 - 179 - 100 - - - - - - - - 298 - 179 - 100 - - - - - - - - 279 - 160 - 100 - - - - - - - - 540 - 160 - 100 - - - - - - - - 540 - 1040 - 100 - - - - - - - - 260 - 1040 - 100 - - - - - - - - 260 - 160 - 100 - - - - - - - - 260 - 160 - 110 - - - - - - - - 279 - 179 - 110 - - - - - - - - 279 - 1021 - 110 - - - - - - - - 521 - 1021 - 110 - - - - - - - - 521 - 179 - 110 - - - - - - - - 298 - 179 - 110 - - - - - - - - 279 - 160 - 110 - - - - - - - - 540 - 160 - 110 - - - - - - - - 540 - 1040 - 110 - - - - - - - - 260 - 1040 - 110 - - - - - - - - 260 - 160 - 110 - - - - - - - - 260 - 160 - 120 - - - - - - - - 279 - 179 - 120 - - - - - - - - 279 - 1021 - 120 - - - - - - - - 521 - 1021 - 120 - - - - - - - - 521 - 179 - 120 - - - - - - - - 298 - 179 - 120 - - - - - - - - 279 - 160 - 120 - - - - - - - - 540 - 160 - 120 - - - - - - - - 540 - 1040 - 120 - - - - - - - - 260 - 1040 - 120 - - - - - - - - 260 - 160 - 120 - - - - - - - - 260 - 160 - 130 - - - - - - - - 279 - 179 - 130 - - - - - - - - 279 - 1021 - 130 - - - - - - - - 521 - 1021 - 130 - - - - - - - - 521 - 179 - 130 - - - - - - - - 298 - 179 - 130 - - - - - - - - 279 - 160 - 130 - - - - - - - - 540 - 160 - 130 - - - - - - - - 540 - 1040 - 130 - - - - - - - - 260 - 1040 - 130 - - - - - - - - 260 - 160 - 130 - - - - - - - - 260 - 160 - 140 - - - - - - - - 279 - 179 - 140 - - - - - - - - 279 - 1021 - 140 - - - - - - - - 521 - 1021 - 140 - - - - - - - - 521 - 179 - 140 - - - - - - - - 298 - 179 - 140 - - - - - - - - 279 - 160 - 140 - - - - - - - - 540 - 160 - 140 - - - - - - - - 540 - 1040 - 140 - - - - - - - - 260 - 1040 - 140 - - - - - - - - 260 - 160 - 140 - - - - - - - - 260 - 160 - 150 - - - - - - - - 279 - 179 - 150 - - - - - - - - 279 - 1021 - 150 - - - - - - - - 521 - 1021 - 150 - - - - - - - - 521 - 179 - 150 - - - - - - - - 298 - 179 - 150 - - - - - - - - 279 - 160 - 150 - - - - - - - - 540 - 160 - 150 - - - - - - - - 540 - 1040 - 150 - - - - - - - - 260 - 1040 - 150 - - - - - - - - 260 - 160 - 150 - - - - - - - - 260 - 160 - 160 - - - - - - - - 279 - 179 - 160 - - - - - - - - 279 - 1021 - 160 - - - - - - - - 521 - 1021 - 160 - - - - - - - - 521 - 179 - 160 - - - - - - - - 298 - 179 - 160 - - - - - - - - 279 - 160 - 160 - - - - - - - - 540 - 160 - 160 - - - - - - - - 540 - 1040 - 160 - - - - - - - - 260 - 1040 - 160 - - - - - - - - 260 - 160 - 160 - - - - - - - - 260 - 160 - 170 - - - - - - - - 279 - 179 - 170 - - - - - - - - 279 - 1021 - 170 - - - - - - - - 521 - 1021 - 170 - - - - - - - - 521 - 179 - 170 - - - - - - - - 298 - 179 - 170 - - - - - - - - 279 - 160 - 170 - - - - - - - - 540 - 160 - 170 - - - - - - - - 540 - 1040 - 170 - - - - - - - - 260 - 1040 - 170 - - - - - - - - 260 - 160 - 170 - - - - - - - - 260 - 160 - 180 - - - - - - - - 279 - 179 - 180 - - - - - - - - 279 - 1021 - 180 - - - - - - - - 521 - 1021 - 180 - - - - - - - - 521 - 179 - 180 - - - - - - - - 298 - 179 - 180 - - - - - - - - 279 - 160 - 180 - - - - - - - - 540 - 160 - 180 - - - - - - - - 540 - 1040 - 180 - - - - - - - - 260 - 1040 - 180 - - - - - - - - 260 - 160 - 180 - - - - - - - - 260 - 160 - 190 - - - - - - - - 279 - 179 - 190 - - - - - - - - 279 - 1021 - 190 - - - - - - - - 521 - 1021 - 190 - - - - - - - - 521 - 179 - 190 - - - - - - - - 298 - 179 - 190 - - - - - - - - 279 - 160 - 190 - - - - - - - - 540 - 160 - 190 - - - - - - - - 540 - 1040 - 190 - - - - - - - - 260 - 1040 - 190 - - - - - - - - 260 - 160 - 190 - - - - - - - - 260 - 160 - 200 - - - - - - - - 279 - 179 - 200 - - - - - - - - 279 - 1021 - 200 - - - - - - - - 521 - 1021 - 200 - - - - - - - - 521 - 179 - 200 - - - - - - - - 298 - 179 - 200 - - - - - - - - 279 - 160 - 200 - - - - - - - - 540 - 160 - 200 - - - - - - - - 540 - 1040 - 200 - - - - - - - - 260 - 1040 - 200 - - - - - - - - 260 - 160 - 200 - - - - - - - - 260 - 160 - 210 - - - - - - - - 279 - 179 - 210 - - - - - - - - 279 - 1021 - 210 - - - - - - - - 521 - 1021 - 210 - - - - - - - - 521 - 179 - 210 - - - - - - - - 298 - 179 - 210 - - - - - - - - 279 - 160 - 210 - - - - - - - - 540 - 160 - 210 - - - - - - - - 540 - 1040 - 210 - - - - - - - - 260 - 1040 - 210 - - - - - - - - 260 - 160 - 210 - - - - - - - - 260 - 160 - 220 - - - - - - - - 279 - 179 - 220 - - - - - - - - 279 - 1021 - 220 - - - - - - - - 521 - 1021 - 220 - - - - - - - - 521 - 179 - 220 - - - - - - - - 298 - 179 - 220 - - - - - - - - 279 - 160 - 220 - - - - - - - - 540 - 160 - 220 - - - - - - - - 540 - 1040 - 220 - - - - - - - - 260 - 1040 - 220 - - - - - - - - 260 - 160 - 220 - - - - - - - - 260 - 160 - 230 - - - - - - - - 279 - 179 - 230 - - - - - - - - 279 - 1021 - 230 - - - - - - - - 521 - 1021 - 230 - - - - - - - - 521 - 179 - 230 - - - - - - - - 298 - 179 - 230 - - - - - - - - 279 - 160 - 230 - - - - - - - - 540 - 160 - 230 - - - - - - - - 540 - 1040 - 230 - - - - - - - - 260 - 1040 - 230 - - - - - - - - 260 - 160 - 230 - - - - - - - - 260 - 160 - 240 - - - - - - - - 279 - 179 - 240 - - - - - - - - 279 - 1021 - 240 - - - - - - - - 521 - 1021 - 240 - - - - - - - - 521 - 179 - 240 - - - - - - - - 298 - 179 - 240 - - - - - - - - 279 - 160 - 240 - - - - - - - - 540 - 160 - 240 - - - - - - - - 540 - 1040 - 240 - - - - - - - - 260 - 1040 - 240 - - - - - - - - 260 - 160 - 240 - - - - - - - - 260 - 160 - 250 - - - - - - - - 279 - 179 - 250 - - - - - - - - 279 - 1021 - 250 - - - - - - - - 521 - 1021 - 250 - - - - - - - - 521 - 179 - 250 - - - - - - - - 298 - 179 - 250 - - - - - - - - 279 - 160 - 250 - - - - - - - - 540 - 160 - 250 - - - - - - - - 540 - 1040 - 250 - - - - - - - - 260 - 1040 - 250 - - - - - - - - 260 - 160 - 250 - - - - - - - - 260 - 160 - 260 - - - - - - - - 279 - 179 - 260 - - - - - - - - 279 - 1021 - 260 - - - - - - - - 521 - 1021 - 260 - - - - - - - - 521 - 179 - 260 - - - - - - - - 298 - 179 - 260 - - - - - - - - 279 - 160 - 260 - - - - - - - - 540 - 160 - 260 - - - - - - - - 540 - 1040 - 260 - - - - - - - - 260 - 1040 - 260 - - - - - - - - 260 - 160 - 260 - - - - - - - - 260 - 160 - 270 - - - - - - - - 279 - 179 - 270 - - - - - - - - 279 - 1021 - 270 - - - - - - - - 521 - 1021 - 270 - - - - - - - - 521 - 179 - 270 - - - - - - - - 298 - 179 - 270 - - - - - - - - 279 - 160 - 270 - - - - - - - - 540 - 160 - 270 - - - - - - - - 540 - 1040 - 270 - - - - - - - - 260 - 1040 - 270 - - - - - - - - 260 - 160 - 270 - - - - - - - - 260 - 160 - 280 - - - - - - - - 279 - 179 - 280 - - - - - - - - 279 - 1021 - 280 - - - - - - - - 521 - 1021 - 280 - - - - - - - - 521 - 179 - 280 - - - - - - - - 298 - 179 - 280 - - - - - - - - 279 - 160 - 280 - - - - - - - - 540 - 160 - 280 - - - - - - - - 540 - 1040 - 280 - - - - - - - - 260 - 1040 - 280 - - - - - - - - 260 - 160 - 280 - - - - - - - - 260 - 160 - 290 - - - - - - - - 279 - 179 - 290 - - - - - - - - 279 - 1021 - 290 - - - - - - - - 521 - 1021 - 290 - - - - - - - - 521 - 179 - 290 - - - - - - - - 298 - 179 - 290 - - - - - - - - 279 - 160 - 290 - - - - - - - - 540 - 160 - 290 - - - - - - - - 540 - 1040 - 290 - - - - - - - - 260 - 1040 - 290 - - - - - - - - 260 - 160 - 290 - - - - - - - - - - - - - - cb95db89-6165-43b6-9c41-5702bc5bf137 - Boolean - - - - - Contains a collection of boolean values - 2bd7c1d1-3e8c-430c-a0d4-3492d2e1b251 - Boolean - Boolean - false - 0 - - - - - - 35 - 170 - 50 - 24 - - - 60.6596 - 182.0226 - - - - - - 1 - - - - - 324 - {0} - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - true - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false - - - - - false + + + + + + + + + + + 06953bda-1d37-4d58-9b38-4b3c74e54c8f + File Path + + + + + Contains a collection of file paths + false + All files|*.* + 6e460059-dafa-418f-a1eb-1d3c14c03b73 + File Path + File Path + false + 0 + + + + + + 3313 + 535 + 50 + 24 + + + 3338.3623 + 547.92505 + + + + + + + + + + a8b97322-2d53-47cd-905e-b932c3ccd74e + Button + + + + + Button object with two values + False + True + c3c2f1fd-a76b-4d3f-9c8c-beaa08825193 + Button + Button + false + 0 + + + + + + 3253 + 578 + 103 + 22 + + + + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 86fa3b2e-4be4-4b43-9c60-24bdf6bb7bfb + Panel + + false + 0 + 0 + ob_RRC_workplace + + + + + + 2632 + 275 + 129 + 38 + + 0 + 0 + 0 + + 2632.9673 + 275.94382 + + + + + + + 255;255;250;90 + + true + true + true + false + false + true + + + + + + + + + 00027467-0d24-4fa7-b178-8dc0ac5f42ec + Value List + + + + + Provides a list of preset values to choose from + true + 1e75d57f-b361-478c-ac1b-ff49594fff5b + 26 + 1 + Value List + Value List + false + 0 + + + + + "v5" + v5 + true + + + + + "v10" + v10 + false + + + + + "v20" + v20 + false + + + + + "v30" + v30 + false + + + + + "v40" + v40 + false + + + + + "v50" + v50 + false + + + + + "v60" + v60 + false + + + + + "v80" + v80 + false + + + + + "v100" + v100 + false + + + + + "v150" + v150 + false + + + + + "v200" + v200 + false + + + + + "v300" + v300 + false + + + + + "v400" + v400 + false + + + + + "v500" + v500 + false + + + + + "v600" + v600 + false + + + + + "v800" + v800 + false + + + + + "v1000" + v1000 + false + + + + + "v1500" + v1500 + false + + + + + "v2000" + v2000 + false + + + + + "v2500" + v2500 + false + + + + + "v3000" + v3000 + false + + + + + "v4000" + v4000 + false + + + + + "v5000" + v5000 + false + + + + + "v6000" + v6000 + false + + + + + "v7000" + v7000 + false + + + + + "vmax" + vmax + false + + + + + + 2625 + 318 + 146 + 22 + + + 2698 + 318 + + + + + + + + + + 3cadddef-1e2b-4c09-9390-0e8f78f7609f + Merge + + + + + Merge a bunch of data streams + true + ab38f130-a6fc-4113-9330-2550c79b04d0 + Merge + Merge + + + + + + 485 + 342 + 95 + 124 + + + 523 + 404 + + + + + + 6 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 1 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 2 + Data stream 1 + e6ea812e-547e-4dea-9f1c-a4272fa017ef + false + Data 1 + D1 + true + 20d602e5-1866-46a5-b576-e44873be7302 + 1 + + + + + + 487 + 344 + 21 + 20 + + + 499 + 354 + - - - false + + + + + 2 + Data stream 2 + 9da9a104-5a49-4935-9733-7a48665c46f1 + false + Data 2 + D2 + true + c312d2b0-9e31-4d13-9ecd-ee8f338f8bd8 + 1 + + + + + + 487 + 364 + 21 + 20 + + + 499 + 374 + - - - false + + + + + 2 + Data stream 3 + 4732be28-492d-4031-87be-582db31605ce + false + Data 3 + D3 + true + 4524cda7-806f-4d09-8db1-2d72107797c4 + 1 + + + + + + 487 + 384 + 21 + 20 + + + 499 + 394 + - - - false + + + + + 2 + Data stream 4 + d7b75611-77b5-422d-a168-4387c3317bec + false + Data 4 + D4 + true + b056b1ba-9f59-41b5-8511-76a0cee89699 + 1 + + + + + + 487 + 404 + 21 + 20 + + + 499 + 414 + - - - true + + + + + 2 + Data stream 5 + 8cec47e2-b22a-4ae6-b4b3-6bdd3703a1fa + false + Data 5 + D5 + true + 034ac49f-f280-4434-81fe-a3d47519e85c + 1 + + + + + + 487 + 424 + 21 + 20 + + + 499 + 434 + - - - false + + + + + 2 + Data stream 6 + 57792668-4064-4575-929d-fe9ed16e5226 + false + Data 6 + D6 + true + fe7251fa-e11b-45b7-8cf2-1786824d7f49 + 1 + + + + + + 487 + 444 + 21 + 20 + + + 499 + 454 + - - - false + + + + + 2 + Result of merge + b2ec7627-4d18-47ab-9054-ff41582d03d4 + Result + Result + false + 0 + + + + + + 538 + 344 + 40 + 120 + + + 558 + 404 + - - - false + + + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 4524cda7-806f-4d09-8db1-2d72107797c4 + Number Slider + Number Slider + false + 0 + + + + + + 215 + 397 + 203 + 20 + + + 215.4011 + 397.7858 + + + + + + 3 + 1 + 1 + 360 + -360 + 0 + 0 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + c312d2b0-9e31-4d13-9ecd-ee8f338f8bd8 + Number Slider + Number Slider + false + 0 + + + + + + 215 + 370 + 203 + 20 + + + 215.0493 + 370.5554 + + + + + + 3 + 1 + 1 + 360 + -360 + 0 + 0 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 20d602e5-1866-46a5-b576-e44873be7302 + Number Slider + Number Slider + false + 0 + + + + + + 215 + 342 + 203 + 20 + + + 215.1016 + 342.834 + + + + + + 3 + 1 + 1 + 360 + -360 + 0 + 0 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + 034ac49f-f280-4434-81fe-a3d47519e85c + Number Slider + Number Slider + false + 0 + + + + + + 215 + 452 + 203 + 20 + + + 215.4188 + 452.1505 + + + + + + 3 + 1 + 1 + 360 + -360 + 0 + 0 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + fe7251fa-e11b-45b7-8cf2-1786824d7f49 + Number Slider + Number Slider + false + 0 + + + + + + 215 + 480 + 203 + 20 + + + 215.4536 + 480.2546 + + + + + + 3 + 1 + 1 + 360 + -360 + 0 + 0 + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc + Number Slider + + + + + Numeric slider for single values + b056b1ba-9f59-41b5-8511-76a0cee89699 + Number Slider + Number Slider + false + 0 + + + + + + 215 + 424 + 203 + 20 + + + 215.9061 + 424.7642 + + + + + + 3 + 1 + 1 + 360 + -360 + 0 + 0 + + + + + + + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script + + + + + import Rhino.Geometry as rg + +from ghpythonlib.treehelpers import tree_to_list + + + +EXT_AXES = "[9E9,9E9,9E9,9E9,9E9,9E9]" + +def rg_plane_to_posdata(plane): + x, y, z = plane.Origin + + posdata = "[[{:.1f}, {:.1f}, {:.1f}],".format(x, y, z) + + q = rg.Quaternion.Rotation(rg.Plane.WorldXY, plane) + + posdata += "[{:.4f}, {:.4f}, {:.4f}, {:.4f}],".format(q.A, q.B, q.C, q.D) + posdata += "[0,0,0,0],{}]".format(EXT_AXES) + + return posdata + +if wobj_name is None: + wobj_name = "wobj0" +if tool_name is None: + tool_name = "tool0" + +if start_configuration is None: + start_configuration = [0, 0, 0, 0, 0, 0] + +heater_on = "DO_1" +stepper_on = "DO_10" + +if print_speed_value is None: + print_speed_value = "s_printSpeed" + +TRAVEL_SPEED_VALUE = "v300" + +PRINT_SPEED_NAME = "s_printSpeed" +TRAVEL_SPEED_NAME = "s_travelSpeed" + +module_level_vars = """VAR speeddata {}:={}; + VAR speeddata {}:={}; +""".format(PRINT_SPEED_NAME, print_speed_value, TRAVEL_SPEED_NAME, TRAVEL_SPEED_VALUE) + + +main_proc = """PROC main() + IF RobOS() = FALSE THEN + {} := vmax; ! run at max speed in robotstudio + {} := vmax; + ENDIF + print; + ENDPROC +""".format(TRAVEL_SPEED_NAME, PRINT_SPEED_NAME) + +extrude10sec_proc = """PROC Extrude10Sec () + SetDO {}, 1; + SetDO\SDelay:=10, {}, 0; + ENDPROC +""".format(stepper_on, stepper_on) +home_joint_pos = "[" + ",".join([str(c) for c in start_configuration]) + "]" + +layers = tree_to_list(planes, retrieve_base=None) +is_travel_point_layers = tree_to_list(is_travel_point, retrieve_base=None) + +move_abs_j_start = "MoveAbsJ [{}, {}], {}, fine, tool0;".format(home_joint_pos,EXT_AXES,TRAVEL_SPEED_NAME) +move_j_start = "MoveJ {}, {}, fine, {}, \WObj:={};".format(rg_plane_to_posdata(layers[0][0]), + TRAVEL_SPEED_NAME, + tool_name, + wobj_name) +rapid = """MODULE fdm_print + {} + {} + {} + PROC print() + {} + SetDO {}, 1; ! heater on + TPWrite "Press play when extruder is at right temperature"; + Stop; + {} + ! First layer +""".format(module_level_vars, + extrude10sec_proc, + main_proc, + move_abs_j_start, + heater_on, + move_j_start) + +last_is_travel_pt = True +for layer, is_travel_point_layer in zip(layers, is_travel_point_layers): + for plane, tp in zip(layer, is_travel_point_layer): + new_lines = "" + if tp: + if not last_is_travel_pt: + new_lines = " SetDO {}, 0; ! stepper off\n".format(stepper_on) + speed = TRAVEL_SPEED_NAME + else: + if last_is_travel_pt: + new_lines = " SetDO {}, 1; ! stepper on\n".format(stepper_on) + speed = PRINT_SPEED_NAME + posdata = rg_plane_to_posdata(plane) + new_lines += " MoveL {}, {}, fine, {}, \WObj:={};".format(posdata, speed, tool_name, wobj_name) + + rapid += new_lines + "\n" + last_is_travel_pt = tp + rapid += " ! New layer \n" + +rapid += """ SetDO {}, 0; ! stepper off + SetDO {}, 0; ! heater off + ENDPROC +ENDMODULE""".format(stepper_on, heater_on) + GhPython provides a Python script component + + 143 + 189 + + + 1116 + 922 + + true + true + false + false + 5ea3821b-c4dd-4403-8475-5845faaa9961 + false + true + GhPython Script + GhPython Script + + + + + + 3146 + 182 + 167 + 124 + + + 3261 + 244 + + + + + + 6 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 2 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + + 2 + true + Script variable Python + 00cc4126-2021-4cbd-b163-76fb014ee87f + planes + planes + true + 2 + true + 4d3f044c-65b7-468f-995e-df29fc449c14 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3148 + 184 + 98 + 20 + + + 3198.5 + 194 + - - - false + + + + + 2 + true + Script input is_travel_point. + a4e8581f-2737-4629-a267-88bd8f4c5c22 + is_travel_point + is_travel_point + true + 2 + true + eb67bfd3-3b32-4ea5-82af-b7dc6d40b946 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3148 + 204 + 98 + 20 + + + 3198.5 + 214 + - - - false + + + + + 1 + true + Script input start_configuration. + bace4957-4140-4f6e-ad25-47c23895bf4f + start_configuration + start_configuration + true + 1 + true + b2ec7627-4d18-47ab-9054-ff41582d03d4 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3148 + 224 + 98 + 20 + + + 3198.5 + 234 + - - - false + + + + + true + Script input tool_name. + 9f09fe1e-23f2-494c-9bbe-5afa7cf40246 + tool_name + tool_name + true + 0 + true + 0 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3148 + 244 + 98 + 20 + + + 3198.5 + 254 + - - - false + + + + + true + Script input wobj_name. + e3377331-c6de-47f6-aa5d-9b66ab037127 + wobj_name + wobj_name + true + 0 + true + 86fa3b2e-4be4-4b43-9c60-24bdf6bb7bfb + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3148 + 264 + 98 + 20 + + + 3198.5 + 274 + - - - false + + + + + true + Script input print_speed_value. + ad1742a1-a7f3-43b5-ba8d-f186c4fd1fed + print_speed_value + print_speed_value + true + 0 + true + 1e75d57f-b361-478c-ac1b-ff49594fff5b + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3148 + 284 + 98 + 20 + + + 3198.5 + 294 + - - - false + + + + + The execution information, as output and error streams + 0fe097ff-5507-465e-a0eb-ae47bcb154ba + out + out + false + 0 + + + + + + 3276 + 184 + 35 + 60 + + + 3293.5 + 214 + - - - false + + + + + Script output rapid. + a8a1c30e-2aee-4c19-98df-97ddb53a11e1 + rapid + rapid + false + 0 + + + + + + 3276 + 244 + 35 + 60 + + + 3293.5 + 274 + @@ -6034,113 +2214,7 @@ ENDMODULE""".format(stepper_on, heater_on) - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - true - - 37.3931 - 12.37911 - - - 108.8164 - 12.37911 - - - 108.8164 - 31.06808 - - - 37.3931 - 31.06808 - - A quick note - Microsoft Sans Serif - 3596d7e9-1124-46e2-8a96-415a6d3743a9 - false - Scribble - Scribble - 25 - Points - - - - - - 32.3931 - 7.37911 - 81.42334 - 28.68897 - - - 37.3931 - 12.37911 - - - - - - - - - - 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe - Scribble - - - - - true - - 26.94736 - 122.0521 - - - 183.6856 - 122.0521 - - - 183.6856 - 145.4164 - - - 26.94736 - 145.4164 - - A quick note - Microsoft Sans Serif - d4dbb2d5-3197-486f-893f-b058621ab0e3 - false - Scribble - Scribble - 25 - Is travel point - - - - - - 21.94736 - 117.0521 - 166.7383 - 33.36425 - - - 26.94736 - 122.0521 - - - - - - - - + 410755b1-224a-4c1e-a407-bf32fb45ea7e 00000000-0000-0000-0000-000000000000 @@ -6148,23 +2222,29 @@ ENDMODULE""".format(stepper_on, heater_on) - - if save: - with open(filepath, mode="w") as fp: - fp.write(contents) + + from ghpythonlib.treehelpers import tree_to_list, list_to_tree + +layers = tree_to_list(x, retrieve_base=False) + +for layer_idx in range(len(layers)): + layers[layer_idx][0] = True + +layers = list_to_tree(layers, source=[]) GhPython provides a Python script component - 160 - 160 + 64 + 64 741 702 + true true false false - 382d864d-0b6a-42ab-a178-a21075f8305d + ae4e1746-964f-4b63-ad5f-74362c818093 false true GhPython Script @@ -6174,101 +2254,39 @@ ENDMODULE""".format(stepper_on, heater_on) - 1046 - 393 - 109 - 64 + 2299 + 376 + 116 + 44 - 1112 - 425 + 2344 + 398 - - 3 + + 1 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 - 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 2 3ede854e-c753-40eb-84cb-b48008f14fd4 8ec86459-bf01-4409-baee-174d0d2b13d0 - + - + + 2 true Script variable Python - b2eb3e20-1624-4752-b939-d3f0edc90494 - contents - contents - true - 0 - true - 4a47ea2c-b159-4dc3-b5c9-38598f25a9d1 - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 1048 - 395 - 49 - 20 - - - 1074 - 405 - - - - - - - - true - Script input filepath. - a3500743-b97e-4f4d-84d9-43d64999943f - filepath - filepath - true - 0 - true - 6e460059-dafa-418f-a1eb-1d3c14c03b73 - 1 - 87f87f55-5b71-41f4-8aea-21d494016f81 - - - - - - 1048 - 415 - 49 - 20 - - - 1074 - 425 - - - - - - - - true - Script input x. - 2f97769e-a805-44fe-86d3-dac746a28908 + fba31303-e524-4978-a16e-ef9ff0cb2d8a x - save + x true - 0 + 2 true - c3c2f1fd-a76b-4d3f-9c8c-beaa08825193 + true + 9d7fdad9-f0c2-46d5-bc6d-bd5d6da30eb0 1 87f87f55-5b71-41f4-8aea-21d494016f81 @@ -6276,14 +2294,14 @@ ENDMODULE""".format(stepper_on, heater_on) - 1048 - 435 - 49 - 20 + 2301 + 378 + 28 + 40 - 1074 - 445 + 2324.5 + 398 @@ -6292,7 +2310,7 @@ ENDMODULE""".format(stepper_on, heater_on) The execution information, as output and error streams - de16a698-96e3-4032-9a99-60a085e0d13e + a99d5f8e-e710-48b7-91c8-15f462ed96b9 out out false @@ -6302,40 +2320,41 @@ ENDMODULE""".format(stepper_on, heater_on) - 1127 - 395 - 26 - 30 + 2359 + 378 + 54 + 20 - 1140 - 410 + 2378 + 388 - - Script output a. - e8b42de2-cd1c-4df8-bd2f-2cda2470f247 - a - a + + Script output layers. + 27abb94b-7ddd-4b7f-adfc-b3a407a9384e + layers + layers false + true 0 - 1127 - 425 - 26 - 30 + 2359 + 398 + 54 + 20 - 1140 - 440 + 2378 + 408 @@ -6347,56 +2366,114 @@ ENDMODULE""".format(stepper_on, heater_on) - + - 06953bda-1d37-4d58-9b38-4b3c74e54c8f - File Path + c40dc145-9e36-4a69-ac1a-6d825c654993 + Repeat Data - - Contains a collection of file paths - false - All files|*.* - 6e460059-dafa-418f-a1eb-1d3c14c03b73 - File Path - File Path - false - 0 + + Repeat a pattern until it reaches a certain length. + true + 84b232ab-49de-470f-ab75-3932a669b3cf + Repeat Data + Repeat Data - + - 937 - 399 - 50 - 24 + 1098 + 228 + 108 + 44 - 962.4939 - 411.4323 + 1156 + 250 - - - 1 + + + 1 + Pattern to repeat + 444c49e3-05ad-4f45-af57-cfafad51363e + Data + Data + false + 69bc2cf2-a635-4435-b301-1eda46b9a60e + 1 - + - 1 - {0} + + 1100 + 230 + 41 + 20 + + + 1122 + 240 + + + + + + + + Length of final pattern + dd237df7-cc47-4067-9077-8520f1531528 + Length + Length + false + 6f80bc30-03fe-4fdb-b081-e53544a1b536 + 1 + + + + + + 1100 + 250 + 41 + 20 + + + 1122 + 260 + + + + + + + + 1 + Repeated data + 92daf503-d8e2-4ff8-b144-54b9c74c2aca + Data + Data + false + 0 + + + + + + 1171 + 230 + 33 + 40 + + + 1187.5 + 250 + - - - - false - C:\Users\tetov\Downloads\fdm_print.mod - - - @@ -6404,30 +2481,29 @@ ENDMODULE""".format(stepper_on, heater_on) - + - a8b97322-2d53-47cd-905e-b932c3ccd74e - Button + 2e78987b-9dfb-42a2-8b76-3923ac8bd91a + Boolean Toggle - - Button object with two values - False - True - c3c2f1fd-a76b-4d3f-9c8c-beaa08825193 - Button - Button + + Boolean (true/false) toggle + 69bc2cf2-a635-4435-b301-1eda46b9a60e + Boolean Toggle + Boolean Toggle false 0 + false - 879 - 442 - 103 + 845 + 235 + 146 22 @@ -6436,513 +2512,3727 @@ ENDMODULE""".format(stepper_on, heater_on) - + - 59e0b89a-e487-49f8-bab8-b5bab16be14c - Panel + 1817fd29-20ae-4503-b542-f0fb651e67d7 + List Length - - A panel for custom notes and text values - 86fa3b2e-4be4-4b43-9c60-24bdf6bb7bfb - Panel - Panel - false - 0 - 0 - ob_RRC_workplace + + Measure the length of a list. + true + 6376463d-d41b-43cc-a466-39d783d1a8ef + List Length + List Length - + - + - 663 - 229 - 129 - 38 + 949 + 296 + 101 + 28 - 0 - 0 - 0 - 663.4265 - 229.0783 - - - - - - - 255;255;250;90 + 989 + 310 - true - true - true - false - false - true - - - - - - - - - 00027467-0d24-4fa7-b178-8dc0ac5f42ec - Value List - - - - - Provides a list of preset values to choose from - 1e75d57f-b361-478c-ac1b-ff49594fff5b - 26 - 1 - Value List - Value List - false - 0 - - - - - "v5" - v5 - true - - - - - "v10" - v10 - false - - - - - "v20" - v20 - false - - - - - "v30" - v30 - false - - - - - "v40" - v40 - false - - - - - "v50" - v50 - false - - - - - "v60" - v60 - false - - - - - "v80" - v80 - false - - - - - "v100" - v100 - false - - - - - "v150" - v150 - false - - - - - "v200" - v200 - false - - - - - "v300" - v300 - false - - - - - "v400" - v400 - false - - - - - "v500" - v500 - false - - - - - "v600" - v600 - false - - - - - "v800" - v800 - false - - - - - "v1000" - v1000 - false - - - - - "v1500" - v1500 - false - - - - - "v2000" - v2000 - false - - - - - "v2500" - v2500 - false - - - - - "v3000" - v3000 - false - - - - - "v4000" - v4000 - false - - - "v5000" - v5000 - false + + + 1 + Base list + fa792cad-0562-496b-8475-146bbdc60ddb + List + List + false + a2a53a4b-4c7e-490a-a91d-e9c63147897a + 1 - - - - "v6000" - v6000 - false + + + + + 951 + 298 + 23 + 24 + + + 964 + 310 + + + + + + + + Number of items in L + 6f80bc30-03fe-4fdb-b081-e53544a1b536 + Length + Length + false + 0 + + + + + 1004 + 298 + 44 + 24 + + + 1026 + 310 + + + + - - - "v7000" - v7000 - false + + + + + + + 59e0b89a-e487-49f8-bab8-b5bab16be14c + Panel + + + + + A panel for custom notes and text values + 0dd066cb-6129-4c4d-9f6b-a594909006fa + Panel + + false + 0 + 27abb94b-7ddd-4b7f-adfc-b3a407a9384e + 1 + Double click to edit panel content… + + + + + + 2873 + 476 + 160 + 100 + + 0 + 0 + 0 + + 2873.541 + 476.50726 + - - - "vmax" - vmax - false + + + + 255;255;250;90 + + true + true + true + false + false + true + + + + + + + fbac3e32-f100-4292-8692-77240a42fd1a + Point + + + + + Contains a collection of three-dimensional points + true + 79964760-34dd-4f79-9faf-d4a0805a64df + Point + Point + false + 0 + + - 439 - 222 - 146 - 22 + 40 + 54 + 50 + 24 - 512 - 222 + 65.371574 + 66.94979 + + + 28 + + + + + 17 + {0} + + + + + + + 0 + 0 + 0 + + + + + + + + 200 + 100 + 10 + + + + + + + + 200 + 1100 + 10 + + + + + + + + 600 + 1100 + 10 + + + + + + + + 600 + 100 + 10 + + + + + + + + 200 + 100 + 10 + + + + + + + + 260 + 160 + 10 + + + + + + + + 279 + 179 + 10 + + + + + + + + 279 + 1021 + 10 + + + + + + + + 521 + 1021 + 10 + + + + + + + + 521 + 179 + 10 + + + + + + + + 298 + 179 + 10 + + + + + + + + 279 + 160 + 10 + + + + + + + + 540 + 160 + 10 + + + + + + + + 540 + 1040 + 10 + + + + + + + + 260 + 1040 + 10 + + + + + + + + 260 + 160 + 10 + + + + + + + + 11 + {1} + + + + + + + 260 + 160 + 20 + + + + + + + + 279 + 179 + 20 + + + + + + + + 279 + 1021 + 20 + + + + + + + + 521 + 1021 + 20 + + + + + + + + 521 + 179 + 20 + + + + + + + + 298 + 179 + 20 + + + + + + + + 279 + 160 + 20 + + + + + + + + 540 + 160 + 20 + + + + + + + + 540 + 1040 + 20 + + + + + + + + 260 + 1040 + 20 + + + + + + + + 260 + 160 + 20 + + + + + + + + 11 + {2} + + + + + + + 260 + 160 + 30 + + + + + + + + 279 + 179 + 30 + + + + + + + + 279 + 1021 + 30 + + + + + + + + 521 + 1021 + 30 + + + + + + + + 521 + 179 + 30 + + + + + + + + 298 + 179 + 30 + + + + + + + + 279 + 160 + 30 + + + + + + + + 540 + 160 + 30 + + + + + + + + 540 + 1040 + 30 + + + + + + + + 260 + 1040 + 30 + + + + + + + + 260 + 160 + 30 + + + + + + + + 11 + {3} + + + + + + + 260 + 160 + 40 + + + + + + + + 279 + 179 + 40 + + + + + + + + 279 + 1021 + 40 + + + + + + + + 521 + 1021 + 40 + + + + + + + + 521 + 179 + 40 + + + + + + + + 298 + 179 + 40 + + + + + + + + 279 + 160 + 40 + + + + + + + + 540 + 160 + 40 + + + + + + + + 540 + 1040 + 40 + + + + + + + + 260 + 1040 + 40 + + + + + + + + 260 + 160 + 40 + + + + + + + + 11 + {4} + + + + + + + 260 + 160 + 50 + + + + + + + + 279 + 179 + 50 + + + + + + + + 279 + 1021 + 50 + + + + + + + + 521 + 1021 + 50 + + + + + + + + 521 + 179 + 50 + + + + + + + + 298 + 179 + 50 + + + + + + + + 279 + 160 + 50 + + + + + + + + 540 + 160 + 50 + + + + + + + + 540 + 1040 + 50 + + + + + + + + 260 + 1040 + 50 + + + + + + + + 260 + 160 + 50 + + + + + + + + 11 + {5} + + + + + + + 260 + 160 + 60 + + + + + + + + 279 + 179 + 60 + + + + + + + + 279 + 1021 + 60 + + + + + + + + 521 + 1021 + 60 + + + + + + + + 521 + 179 + 60 + + + + + + + + 298 + 179 + 60 + + + + + + + + 279 + 160 + 60 + + + + + + + + 540 + 160 + 60 + + + + + + + + 540 + 1040 + 60 + + + + + + + + 260 + 1040 + 60 + + + + + + + + 260 + 160 + 60 + + + + + + + + 11 + {6} + + + + + + + 260 + 160 + 70 + + + + + + + + 279 + 179 + 70 + + + + + + + + 279 + 1021 + 70 + + + + + + + + 521 + 1021 + 70 + + + + + + + + 521 + 179 + 70 + + + + + + + + 298 + 179 + 70 + + + + + + + + 279 + 160 + 70 + + + + + + + + 540 + 160 + 70 + + + + + + + + 540 + 1040 + 70 + + + + + + + + 260 + 1040 + 70 + + + + + + + + 260 + 160 + 70 + + + + + + + + 11 + {7} + + + + + + + 260 + 160 + 80 + + + + + + + + 279 + 179 + 80 + + + + + + + + 279 + 1021 + 80 + + + + + + + + 521 + 1021 + 80 + + + + + + + + 521 + 179 + 80 + + + + + + + + 298 + 179 + 80 + + + + + + + + 279 + 160 + 80 + + + + + + + + 540 + 160 + 80 + + + + + + + + 540 + 1040 + 80 + + + + + + + + 260 + 1040 + 80 + + + + + + + + 260 + 160 + 80 + + + + + + + + 11 + {8} + + + + + + + 260 + 160 + 90 + + + + + + + + 279 + 179 + 90 + + + + + + + + 279 + 1021 + 90 + + + + + + + + 521 + 1021 + 90 + + + + + + + + 521 + 179 + 90 + + + + + + + + 298 + 179 + 90 + + + + + + + + 279 + 160 + 90 + + + + + + + + 540 + 160 + 90 + + + + + + + + 540 + 1040 + 90 + + + + + + + + 260 + 1040 + 90 + + + + + + + + 260 + 160 + 90 + + + + + + + + 11 + {9} + + + + + + + 260 + 160 + 100 + + + + + + + + 279 + 179 + 100 + + + + + + + + 279 + 1021 + 100 + + + + + + + + 521 + 1021 + 100 + + + + + + + + 521 + 179 + 100 + + + + + + + + 298 + 179 + 100 + + + + + + + + 279 + 160 + 100 + + + + + + + + 540 + 160 + 100 + + + + + + + + 540 + 1040 + 100 + + + + + + + + 260 + 1040 + 100 + + + + + + + + 260 + 160 + 100 + + + + + + + + 11 + {10} + + + + + + + 260 + 160 + 110 + + + + + + + + 279 + 179 + 110 + + + + + + + + 279 + 1021 + 110 + + + + + + + + 521 + 1021 + 110 + + + + + + + + 521 + 179 + 110 + + + + + + + + 298 + 179 + 110 + + + + + + + + 279 + 160 + 110 + + + + + + + + 540 + 160 + 110 + + + + + + + + 540 + 1040 + 110 + + + + + + + + 260 + 1040 + 110 + + + + + + + + 260 + 160 + 110 + + + + + + + + 11 + {11} + + + + + + + 260 + 160 + 120 + + + + + + + + 279 + 179 + 120 + + + + + + + + 279 + 1021 + 120 + + + + + + + + 521 + 1021 + 120 + + + + + + + + 521 + 179 + 120 + + + + + + + + 298 + 179 + 120 + + + + + + + + 279 + 160 + 120 + + + + + + + + 540 + 160 + 120 + + + + + + + + 540 + 1040 + 120 + + + + + + + + 260 + 1040 + 120 + + + + + + + + 260 + 160 + 120 + + + + + + + + 11 + {12} + + + + + + + 260 + 160 + 130 + + + + + + + + 279 + 179 + 130 + + + + + + + + 279 + 1021 + 130 + + + + + + + + 521 + 1021 + 130 + + + + + + + + 521 + 179 + 130 + + + + + + + + 298 + 179 + 130 + + + + + + + + 279 + 160 + 130 + + + + + + + + 540 + 160 + 130 + + + + + + + + 540 + 1040 + 130 + + + + + + + + 260 + 1040 + 130 + + + + + + + + 260 + 160 + 130 + + + + + + + + 11 + {13} + + + + + + + 260 + 160 + 140 + + + + + + + + 279 + 179 + 140 + + + + + + + + 279 + 1021 + 140 + + + + + + + + 521 + 1021 + 140 + + + + + + + + 521 + 179 + 140 + + + + + + + + 298 + 179 + 140 + + + + + + + + 279 + 160 + 140 + + + + + + + + 540 + 160 + 140 + + + + + + + + 540 + 1040 + 140 + + + + + + + + 260 + 1040 + 140 + + + + + + + + 260 + 160 + 140 + + + + + + + + 11 + {14} + + + + + + + 260 + 160 + 150 + + + + + + + + 279 + 179 + 150 + + + + + + + + 279 + 1021 + 150 + + + + + + + + 521 + 1021 + 150 + + + + + + + + 521 + 179 + 150 + + + + + + + + 298 + 179 + 150 + + + + + + + + 279 + 160 + 150 + + + + + + + + 540 + 160 + 150 + + + + + + + + 540 + 1040 + 150 + + + + + + + + 260 + 1040 + 150 + + + + + + + + 260 + 160 + 150 + + + + + + + + 11 + {15} + + + + + + + 260 + 160 + 160 + + + + + + + + 279 + 179 + 160 + + + + + + + + 279 + 1021 + 160 + + + + + + + + 521 + 1021 + 160 + + + + + + + + 521 + 179 + 160 + + + + + + + + 298 + 179 + 160 + + + + + + + + 279 + 160 + 160 + + + + + + + + 540 + 160 + 160 + + + + + + + + 540 + 1040 + 160 + + + + + + + + 260 + 1040 + 160 + + + + + + + + 260 + 160 + 160 + + + + + + + + 11 + {16} + + + + + + + 260 + 160 + 170 + + + + + + + + 279 + 179 + 170 + + + + + + + + 279 + 1021 + 170 + + + + + + + + 521 + 1021 + 170 + + + + + + + + 521 + 179 + 170 + + + + + + + + 298 + 179 + 170 + + + + + + + + 279 + 160 + 170 + + + + + + + + 540 + 160 + 170 + + + + + + + + 540 + 1040 + 170 + + + + + + + + 260 + 1040 + 170 + + + + + + + + 260 + 160 + 170 + + + + + + + + 11 + {17} + + + + + + + 260 + 160 + 180 + + + + + + + + 279 + 179 + 180 + + + + + + + + 279 + 1021 + 180 + + + + + + + + 521 + 1021 + 180 + + + + + + + + 521 + 179 + 180 + + + + + + + + 298 + 179 + 180 + + + + + + + + 279 + 160 + 180 + + + + + + + + 540 + 160 + 180 + + + + + + + + 540 + 1040 + 180 + + + + + + + + 260 + 1040 + 180 + + + + + + + + 260 + 160 + 180 + + + + + + + + 11 + {18} + + + + + + + 260 + 160 + 190 + + + + + + + + 279 + 179 + 190 + + + + + + + + 279 + 1021 + 190 + + + + + + + + 521 + 1021 + 190 + + + + + + + + 521 + 179 + 190 + + + + + + + + 298 + 179 + 190 + + + + + + + + 279 + 160 + 190 + + + + + + + + 540 + 160 + 190 + + + + + + + + 540 + 1040 + 190 + + + + + + + + 260 + 1040 + 190 + + + + + + + + 260 + 160 + 190 + + + + + + + + 11 + {19} + + + + + + + 260 + 160 + 200 + + + + + + + + 279 + 179 + 200 + + + + + + + + 279 + 1021 + 200 + + + + + + + + 521 + 1021 + 200 + + + + + + + + 521 + 179 + 200 + + + + + + + + 298 + 179 + 200 + + + + + + + + 279 + 160 + 200 + + + + + + + + 540 + 160 + 200 + + + + + + + + 540 + 1040 + 200 + + + + + + + + 260 + 1040 + 200 + + + + + + + + 260 + 160 + 200 + + + + + + + + 11 + {20} + + + + + + + 260 + 160 + 210 + + + + + + + + 279 + 179 + 210 + + + + + + + + 279 + 1021 + 210 + + + + + + + + 521 + 1021 + 210 + + + + + + + + 521 + 179 + 210 + + + + + + + + 298 + 179 + 210 + + + + + + + + 279 + 160 + 210 + + + + + + + + 540 + 160 + 210 + + + + + + + + 540 + 1040 + 210 + + + + + + + + 260 + 1040 + 210 + + + + + + + + 260 + 160 + 210 + + + + + + + + 11 + {21} + + + + + + + 260 + 160 + 220 + + + + + + + + 279 + 179 + 220 + + + + + + + + 279 + 1021 + 220 + + + + + + + + 521 + 1021 + 220 + + + + + + + + 521 + 179 + 220 + + + + + + + + 298 + 179 + 220 + + + + + + + + 279 + 160 + 220 + + + + + + + + 540 + 160 + 220 + + + + + + + + 540 + 1040 + 220 + + + + + + + + 260 + 1040 + 220 + + + + + + + + 260 + 160 + 220 + + + + + + + + 11 + {22} + + + + + + + 260 + 160 + 230 + + + + + + + + 279 + 179 + 230 + + + + + + + + 279 + 1021 + 230 + + + + + + + + 521 + 1021 + 230 + + + + + + + + 521 + 179 + 230 + + + + + + + + 298 + 179 + 230 + + + + + + + + 279 + 160 + 230 + + + + + + + + 540 + 160 + 230 + + + + + + + + 540 + 1040 + 230 + + + + + + + + 260 + 1040 + 230 + + + + + + + + 260 + 160 + 230 + + + + + + + + 11 + {23} + + + + + + + 260 + 160 + 240 + + + + + + + + 279 + 179 + 240 + + + + + + + + 279 + 1021 + 240 + + + + + + + + 521 + 1021 + 240 + + + + + + + + 521 + 179 + 240 + + + + + + + + 298 + 179 + 240 + + + + + + + + 279 + 160 + 240 + + + + + + + + 540 + 160 + 240 + + + + + + + + 540 + 1040 + 240 + + + + + + + + 260 + 1040 + 240 + + + + + + + + 260 + 160 + 240 + + + + + + + + 11 + {24} + + + + + + + 260 + 160 + 250 + + + + + + + + 279 + 179 + 250 + + + + + + + + 279 + 1021 + 250 + + + + + + + + 521 + 1021 + 250 + + + + + + + + 521 + 179 + 250 + + + + + + + + 298 + 179 + 250 + + + + + + + + 279 + 160 + 250 + + + + + + + + 540 + 160 + 250 + + + + + + + + 540 + 1040 + 250 + + + + + + + + 260 + 1040 + 250 + + + + + + + + 260 + 160 + 250 + + + + + + + + 11 + {25} + + + + + + + 260 + 160 + 260 + + + + + + + + 279 + 179 + 260 + + + + + + + + 279 + 1021 + 260 + + + + + + + + 521 + 1021 + 260 + + + + + + + + 521 + 179 + 260 + + + + + + + + 298 + 179 + 260 + + + + + + + + 279 + 160 + 260 + + + + + + + + 540 + 160 + 260 + + + + + + + + 540 + 1040 + 260 + + + + + + + + 260 + 1040 + 260 + + + + + + + + 260 + 160 + 260 + + + + + + + + 11 + {26} + + + + + + + 260 + 160 + 270 + + + + + + + + 279 + 179 + 270 + + + + + + + + 279 + 1021 + 270 + + + + + + + + 521 + 1021 + 270 + + + + + + + + 521 + 179 + 270 + + + + + + + + 298 + 179 + 270 + + + + + + + + 279 + 160 + 270 + + + + + + + + 540 + 160 + 270 + + + + + + + + 540 + 1040 + 270 + + + + + + + + 260 + 1040 + 270 + + + + + + + + 260 + 160 + 270 + + + + + + + + 11 + {27} + + + + + + + 260 + 160 + 280 + + + + + + + + 279 + 179 + 280 + + + + + + + + 279 + 1021 + 280 + + + + + + + + 521 + 1021 + 280 + + + + + + + + 521 + 179 + 280 + + + + + + + + 298 + 179 + 280 + + + + + + + + 279 + 160 + 280 + + + + + + + + 540 + 160 + 280 + + + + + + + + 540 + 1040 + 280 + + + + + + + + 260 + 1040 + 280 + + + + + + + + 260 + 160 + 280 + + + + + + + - - - 3cadddef-1e2b-4c09-9390-0e8f78f7609f - Merge + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script - - Merge a bunch of data streams - ab38f130-a6fc-4113-9330-2550c79b04d0 - Merge - Merge + + from ghpythonlib.treehelpers import tree_to_list, list_to_tree + +layers = tree_to_list(x, retrieve_base=False) + +# first point in every layer is travel point + +for idx in range(int(first_n)): + layers[0][idx] = True + +layers = list_to_tree(layers, source=[]) + GhPython provides a Python script component + + -32000 + -32000 + + + 104 + 28 + + true + true + false + false + 3b57911c-184e-49f7-8217-c121e6365874 + false + true + GhPython Script + GhPython Script - 485 - 342 - 95 - 124 + 1877 + 403 + 140 + 44 - 523 - 404 + 1946 + 425 - - 6 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 8ec86459-bf01-4409-baee-174d0d2b13d0 - 1 - 8ec86459-bf01-4409-baee-174d0d2b13d0 + + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 2 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 - + - + 2 - Data stream 1 - e6ea812e-547e-4dea-9f1c-a4272fa017ef - false - Data 1 - D1 + true + Script variable Python + 90119ca8-b5b3-4bf2-8b44-73b6a540faa5 + x + x true - 20d602e5-1866-46a5-b576-e44873be7302 + 2 + true + true + 92daf503-d8e2-4ff8-b144-54b9c74c2aca 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 - 487 - 344 - 21 + 1879 + 405 + 52 20 - 499 - 354 + 1914.5 + 415 - - 2 - Data stream 2 - 9da9a104-5a49-4935-9733-7a48665c46f1 - false - Data 2 - D2 - true - c312d2b0-9e31-4d13-9ecd-ee8f338f8bd8 - 1 - - - - - - 487 - 364 - 21 - 20 - - - 499 - 374 - - - - - - - - 2 - Data stream 3 - 4732be28-492d-4031-87be-582db31605ce - false - Data 3 - D3 - true - 4524cda7-806f-4d09-8db1-2d72107797c4 - 1 - - - - - - 487 - 384 - 21 - 20 - - - 499 - 394 - - - - - - - - 2 - Data stream 4 - d7b75611-77b5-422d-a168-4387c3317bec - false - Data 4 - D4 - true - b056b1ba-9f59-41b5-8511-76a0cee89699 - 1 - - - - - - 487 - 404 - 21 - 20 - - - 499 - 414 - - - - - - - - 2 - Data stream 5 - 8cec47e2-b22a-4ae6-b4b3-6bdd3703a1fa - false - Data 5 - D5 + + true + Script input first_n. + 856e281e-8fc4-49f6-a36c-9b024b8a355f + y + first_n true - 034ac49f-f280-4434-81fe-a3d47519e85c + 0 + true + e0d49313-2cff-4606-b87d-20175a716569 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 - 487 - 424 - 21 + 1879 + 425 + 52 20 - 499 - 434 + 1914.5 + 435 - - - 2 - Data stream 6 - 57792668-4064-4575-929d-fe9ed16e5226 - false - Data 6 - D6 - true - fe7251fa-e11b-45b7-8cf2-1786824d7f49 - 1 + + + The execution information, as output and error streams + c4f852c3-ea07-4766-8b3b-e1cb66aa98dd + out + out + false + 0 - 487 - 444 - 21 + 1961 + 405 + 54 20 - 499 - 454 + 1980 + 415 - + - 2 - Result of merge - b2ec7627-4d18-47ab-9054-ff41582d03d4 - Result - Result + Script output layers. + 9d7fdad9-f0c2-46d5-bc6d-bd5d6da30eb0 + layers + layers false + true 0 - 538 - 344 - 40 - 120 + 1961 + 425 + 54 + 20 - 558 - 404 + 1980 + 435 @@ -6954,7 +6244,86 @@ ENDMODULE""".format(stepper_on, heater_on) - + + + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble + + + + + true + + 2190.2068 + 332.6346 + + + 2539.5972 + 332.6346 + + + 2539.5972 + 356.5726 + + + 2190.2068 + 356.5726 + + A quick note + Microsoft Sans Serif + 438fe48d-b1e0-4394-bed5-f4438ddfe790 + false + Scribble + Scribble + 25 + Set first point in layer to travel + + + + + + 2185.2068 + 327.6346 + 359.39038 + 33.93799 + + + 2190.2068 + 332.6346 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + ae4e1746-964f-4b63-ad5f-74362c818093 + 438fe48d-b1e0-4394-bed5-f4438ddfe790 + 2 + 619cabf4-e1da-4984-b72b-a51abac0f408 + Group + + + + + + + + + 57da07bd-ecab-415d-9d86-af36d7073abc Number Slider @@ -6963,7 +6332,7 @@ ENDMODULE""".format(stepper_on, heater_on) Numeric slider for single values - 4524cda7-806f-4d09-8db1-2d72107797c4 + e0d49313-2cff-4606-b87d-20175a716569 Number Slider Number Slider false @@ -6973,14 +6342,14 @@ ENDMODULE""".format(stepper_on, heater_on) - 215 - 397 + 1627 + 468 203 20 - 215.4011 - 397.7858 + 1627.1565 + 468.76956 @@ -6989,236 +6358,698 @@ ENDMODULE""".format(stepper_on, heater_on) 3 1 1 - 360 - -360 + 10 + 0 0 - 0 + 7 - + - 57da07bd-ecab-415d-9d86-af36d7073abc - Number Slider + 7f5c6c55-f846-4a08-9c9a-cfdc285cc6fe + Scribble - - Numeric slider for single values - c312d2b0-9e31-4d13-9ecd-ee8f338f8bd8 - Number Slider - Number Slider + + true + + 1784.5623 + 363.4368 + + + 2075.5918 + 363.4368 + + + 2075.5918 + 387.1061 + + + 1784.5623 + 387.1061 + + A quick note + Microsoft Sans Serif + 5bfc203c-6b96-4171-814f-a2d64ca3a3fa + false + Scribble + Scribble + 25 + Set first n points to travel + + + + + + 1779.5623 + 358.4368 + 301.02954 + 33.66931 + + + 1784.5623 + 363.4368 + + + + + + + + + + c552a431-af5b-46a9-a8a4-0fcbc27ef596 + Group + + + + + 1 + + 150;170;135;255 + + A group of Grasshopper objects + 3b57911c-184e-49f7-8217-c121e6365874 + e0d49313-2cff-4606-b87d-20175a716569 + 5bfc203c-6b96-4171-814f-a2d64ca3a3fa + 3 + 604f7e08-6630-4ae8-ab69-844f20ed4f7e + Group + + + + + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + 4d3f044c-65b7-468f-995e-df29fc449c14 + Relay + false - 0 + a2a53a4b-4c7e-490a-a91d-e9c63147897a + 1 - + - 215 - 370 - 203 - 20 + 3002 + 185 + 40 + 16 - 215.0493 - 370.5554 + 3022 + 193 - - - 3 - 1 - 1 - 360 - -360 - 0 - 0 + + + + + + + b6236720-8d88-4289-93c3-ac4c99f9b97b + Relay + + + + + 2 + A wire relay object + eb67bfd3-3b32-4ea5-82af-b7dc6d40b946 + Relay + + false + 27abb94b-7ddd-4b7f-adfc-b3a407a9384e + 1 + + + + + + 3003 + 214 + 40 + 16 + + + 3023 + 222 + - + - 57da07bd-ecab-415d-9d86-af36d7073abc - Number Slider + 537b0419-bbc2-4ff4-bf08-afe526367b2c + Custom Preview - Numeric slider for single values - 20d602e5-1866-46a5-b576-e44873be7302 - Number Slider - Number Slider - false - 0 + Allows for customized geometry previews + true + a095b21c-28c4-463f-9c83-9ed63f9f4a81 + Custom Preview + Custom Preview + - + - 215 - 342 - 203 - 20 + 3594 + -117 + 86 + 44 - 215.1016 - 342.834 + 3666 + -95 - + + + Geometry to preview + true + 0a0593c2-d33c-4b09-9f77-bbf81fa6c2ba + Geometry + Geometry + false + 4eea89ab-5aae-4b7d-ac5c-2ab77f429d80 + 1 + + + + + + 3596 + -115 + 55 + 20 + + + 3625 + -105 + + + + + + - 3 - 1 - 1 - 360 - -360 - 0 - 0 + The material override + 6dda69ef-92dd-4b6f-ba38-05e24453f86a + Material + Material + false + b658f47d-6eab-41ed-afb6-30bd9057b0f6 + 1 + + + + + 3596 + -95 + 55 + 20 + + + 3625 + -85 + + + + + + 1 + + + + + 1 + {0} + + + + + + 255;221;160;221 + + + 255;66;48;66 + + 0.5 + + 255;255;255;255 + + 0 + + + + + + + - + - 57da07bd-ecab-415d-9d86-af36d7073abc - Number Slider + 9c53bac0-ba66-40bd-8154-ce9829b9db1a + Colour Swatch - - Numeric slider for single values - 034ac49f-f280-4434-81fe-a3d47519e85c - Number Slider - Number Slider + + Colour (palette) swatch + b658f47d-6eab-41ed-afb6-30bd9057b0f6 + Colour Swatch + Colour Swatch false 0 + + 255;0;212;255 + + + + + + + 3435 + -95 + 124 + 20 + + + 3435.0903 + -94.949455 + + + + + + + + + + 537b0419-bbc2-4ff4-bf08-afe526367b2c + Custom Preview + + + + + Allows for customized geometry previews + true + 03538008-0ded-482c-80d8-54e3505a152f + Custom Preview + Custom Preview + - + - 215 - 452 - 203 - 20 + 3591 + -1 + 86 + 44 - 215.4188 - 452.1505 + 3663 + 21 - + + + Geometry to preview + true + 12d86fbc-34d1-4781-9c26-97492edc3384 + Geometry + Geometry + false + ca1f37d7-fe4d-443e-8b1a-30ef7fdaad7a + 1 + + + + + + 3593 + 1 + 55 + 20 + + + 3622 + 11 + + + + + + - 3 - 1 - 1 - 360 - -360 - 0 - 0 + The material override + ee8006ca-45ac-47f6-85c6-4d67eefd7ae3 + Material + Material + false + 7a79e940-1132-4cc8-996e-a8b3aae423eb + 1 + + + + + 3593 + 21 + 55 + 20 + + + 3622 + 31 + + + + + + 1 + + + + + 1 + {0} + + + + + + 255;221;160;221 + + + 255;66;48;66 + + 0.5 + + 255;255;255;255 + + 0 + + + + + + + - + - 57da07bd-ecab-415d-9d86-af36d7073abc - Number Slider + 9c53bac0-ba66-40bd-8154-ce9829b9db1a + Colour Swatch - - Numeric slider for single values - fe7251fa-e11b-45b7-8cf2-1786824d7f49 - Number Slider - Number Slider + + Colour (palette) swatch + 7a79e940-1132-4cc8-996e-a8b3aae423eb + Colour Swatch + Colour Swatch false 0 + + 255;162;255;0 + - + - 215 - 480 - 203 + 3423 + 44 + 124 20 - 215.4536 - 480.2546 + 3423.5488 + 44.58687 - - - 3 - 1 - 1 - 360 - -360 - 0 - 0 - - - - - 57da07bd-ecab-415d-9d86-af36d7073abc - Number Slider + + + 410755b1-224a-4c1e-a407-bf32fb45ea7e + 00000000-0000-0000-0000-000000000000 + GhPython Script - - Numeric slider for single values - b056b1ba-9f59-41b5-8511-76a0cee89699 - Number Slider - Number Slider - false - 0 + + import Rhino.Geometry as rg + +from ghpythonlib.treehelpers import list_to_tree, tree_to_list + +plane_layers = tree_to_list(planes,retrieve_base=None) +tp_layers = tree_to_list(is_travel,retrieve_base=None) + + +last_pt = rg.Point3d(0,0,0) + +print_lines = [] +travel_lines = [] + +for layer, tp_layer in zip(plane_layers, tp_layers): + for plane, tp in zip(layer, tp_layer): + segment = rg.Line(last_pt, plane.Origin) + if tp: + travel_lines.append(segment) + else: + print_lines.append(segment) + last_pt = plane.Origin + GhPython provides a Python script component + + 1007 + 349 + + + 741 + 702 + + true + true + false + false + 675ed94b-3fff-43d0-a091-bfc71a566a42 + false + true + GhPython Script + GhPython Script - 215 - 424 - 203 - 20 + 3266 + -63 + 143 + 64 - 215.9061 - 424.7642 + 3329 + -31 - + - 3 - 1 - 1 - 360 - -360 - 0 - 0 + 2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 84fa917c-1ed8-4db3-8be1-7bdc4a6495a2 + 3 + 3ede854e-c753-40eb-84cb-b48008f14fd4 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + 8ec86459-bf01-4409-baee-174d0d2b13d0 + + + + 2 + true + Script variable Python + df21e7d1-945c-4fad-ba6b-b9e384ad37b4 + planes + planes + true + 2 + true + 4d3f044c-65b7-468f-995e-df29fc449c14 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3268 + -61 + 46 + 30 + + + 3292.5 + -46 + + + + + + + + 2 + true + Script input is_travel. + f1ae212c-03e7-4b50-a342-5a4ce0d52213 + is_travel + is_travel + true + 2 + true + eb67bfd3-3b32-4ea5-82af-b7dc6d40b946 + 1 + 87f87f55-5b71-41f4-8aea-21d494016f81 + + + + + + 3268 + -31 + 46 + 30 + + + 3292.5 + -16 + + + + + + + + The execution information, as output and error streams + 598cf6cc-5135-4116-9aa4-c5278b79e8b8 + out + out + false + 0 + + + + + + 3344 + -61 + 63 + 20 + + + 3375.5 + -51 + + + + + + + + Script output print_lines. + 4eea89ab-5aae-4b7d-ac5c-2ab77f429d80 + print_lines + print_lines + false + 0 + + + + + + 3344 + -41 + 63 + 20 + + + 3375.5 + -31 + + + + + + + + Script output travel_lines. + ca1f37d7-fe4d-443e-8b1a-30ef7fdaad7a + a + travel_lines + false + 0 + + + + + + 3344 + -21 + 63 + 20 + + + 3375.5 + -11 + + + + + + @@ -7231,7 +7062,7 @@ ENDMODULE""".format(stepper_on, heater_on) - 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