1
0
mirror of https://github.com/nophead/NopSCADlib.git synced 2025-09-04 20:56:07 +02:00

Compare commits

...

13 Commits

Author SHA1 Message Date
Chris Palmer
b541298eae Printed foot assembly can now omit the top washer when space is at a premium.
Now correctly shows the screw in the squeezed position.
2021-10-05 12:33:55 +01:00
Chris Palmer
9884160ed5 Updated the gallery 2021-10-02 20:45:15 +01:00
Chris Palmer
7b111c016a Updated changelog. 2021-10-01 12:37:49 +01:00
Chris Palmer
38c973b316 FR4 veroboard made the correct colour.
veroboard track cuts made slightly bigger.
2021-10-01 12:34:49 +01:00
Chris Palmer
042d809ed0 Resistor and thermistor wires made more round. 2021-10-01 12:33:35 +01:00
Chris Palmer
3864839e52 Fixed encoder breakout descripion typo. 2021-10-01 12:32:47 +01:00
Chris Palmer
2ba2c2c115 Removed some unused dependencies. 2021-10-01 12:32:01 +01:00
Chris Palmer
e3716ce8f9 Updated changelog. 2021-09-29 11:36:36 +01:00
Chris Palmer
c4f24974ab Merge branch 'martinbudden-hotend_includes' 2021-09-29 11:33:33 +01:00
Chris Palmer
61dae9c7a4 Merge branch 'hotend_includes' of https://github.com/martinbudden/NopSCADlib into martinbudden-hotend_includes 2021-09-29 11:03:22 +01:00
Chris Palmer
41a26c453c Updated changelog. 2021-09-29 10:46:45 +01:00
Martin Budden
a5c4bf05ad Added hot end style string literals following discussion. 2021-09-28 17:54:42 +01:00
Martin Budden
a65add65ac Removed hotend global enums. 2021-09-28 16:08:57 +01:00
38 changed files with 92 additions and 54 deletions

View File

@@ -3,6 +3,26 @@
This changelog is generated by `changelog.py` using manually added semantic version tags to classify commits as breaking changes, additions or fixes.
#### [v17.0.1](https://github.com/nophead/NopSCADlib/releases/tag/v17.0.1 "show release") Fixes [...](https://github.com/nophead/NopSCADlib/compare/v17.0.0...v17.0.1 "diff with v17.0.0")
* 2021-10-01 [`38c973b`](https://github.com/nophead/NopSCADlib/commit/38c973b316a853fcbef3ccb857d99404a772d9dd "show commit") [C.P.](# "Chris Palmer") FR4 veroboard made the correct colour.
veroboard track cuts made slightly bigger.
* 2021-10-01 [`042d809`](https://github.com/nophead/NopSCADlib/commit/042d809ed056ba55c32f1d850b81dcf559fe9134 "show commit") [C.P.](# "Chris Palmer") Resistor and thermistor wires made more round.
* 2021-10-01 [`3864839`](https://github.com/nophead/NopSCADlib/commit/3864839e521eb64189cba8453ea8835d6ffadd75 "show commit") [C.P.](# "Chris Palmer") Fixed encoder breakout descripion typo.
* 2021-10-01 [`2ba2c2c`](https://github.com/nophead/NopSCADlib/commit/2ba2c2c115d4ab6c2371c662a3e54d7c77aa7785 "show commit") [C.P.](# "Chris Palmer") Removed some unused dependencies.
## [v17.0.0](https://github.com/nophead/NopSCADlib/releases/tag/v17.0.0 "show release") Breaking Changes [...](https://github.com/nophead/NopSCADlib/compare/v16.2.0...v17.0.0 "diff with v16.2.0")
* 2021-09-28 [`a5c4bf0`](https://github.com/nophead/NopSCADlib/commit/a5c4bf05adbf53cb7eb113db1139b65eb616a2e0 "show commit") [M.B.](# "Martin Budden") Added hot end style string literals following discussion.
* 2021-09-28 [`a65add6`](https://github.com/nophead/NopSCADlib/commit/a65add65acdfeb97a657e03b9398d5376f497e85 "show commit") [M.B.](# "Martin Budden") Removed hotend global enums.
### [v16.2.0](https://github.com/nophead/NopSCADlib/releases/tag/v16.2.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v16.1.0...v16.2.0 "diff with v16.1.0")
* 2021-09-29 [`bab4c8e`](https://github.com/nophead/NopSCADlib/commit/bab4c8e8afcc9e96ada5ae8d7636f3f203c36a2c "show commit") [C.P.](# "Chris Palmer") `TO247_size()` now also returns lead height and the length of the wide bit.
TO247 leads fixed at 3.
Lead length removed from TO220 and TO247 vitamin string.
### [v16.1.0](https://github.com/nophead/NopSCADlib/releases/tag/v16.1.0 "show release") Additions [...](https://github.com/nophead/NopSCADlib/compare/v16.0.3...v16.1.0 "diff with v16.0.3")
* 2021-09-27 [`f16f7dd`](https://github.com/nophead/NopSCADlib/commit/f16f7ddb0943469a4e9aeb2aec9e6fc9e418c2dc "show commit") [C.P.](# "Chris Palmer") Images reverted to last OpenSCAD release versions.
Mainly text spacing changes.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

BIN
gallery/IOT_LOAD.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

BIN
gallery/PSU_cover.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

BIN
gallery/PotBox.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 202 KiB

View File

@@ -25,6 +25,11 @@ WiFi controllable PSU
![](IOT_50V_PSU.png)
## IOT LOAD
WiFi controllable programmable load
![](IOT_LOAD.png)
## Lab ATX PSU
Bench power supply built around an ATX PSU.
@@ -65,6 +70,16 @@ Mains isolated and variable supply with metering.
## PSU Cover
A base and shroud to make PSU safe to sit on a desk
![](PSU_cover.png)
## PotBox
Potentiometer box with course and fine controls and three 4mm binding posts
![](PotBox.png)
## SunBot
A solar tracker to keep a solar panel pointing at the sun.

View File

@@ -73,11 +73,6 @@ hs_grub = 4; // pulley set screw
hs_cs_cap = 5;
hs_dome = 6;
//
// Hot end descriptions
//
jhead = 1;
e3d = 2;
//
// Face enumeration
//
f_bottom = 0;

View File

@@ -31,9 +31,11 @@
//!
//! Normally the side sheets are the same type but they can be overridden individually as long as the substitute has the same thickness.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../vitamins/sheet.scad>
use <../vitamins/insert.scad>
use <../vitamins/screw.scad>
use <../vitamins/washer.scad>
use <../utils/quadrant.scad>
use <../utils/round.scad>
@@ -52,8 +54,8 @@ function box_width(type) = type[7]; //! Internal width
function box_depth(type) = type[8]; //! Internal depth
function box_height(type) = type[9]; //! Internal height
function box(screw, wall, sheets, top_sheet, base_sheet, size, feet = false, shelf_screw = M3_dome_screw) = //! Construct a property list for a box.
concat([screw, shelf_screw, wall, sheets, top_sheet, base_sheet, feet], size);
function box(screw, wall, sheets, top_sheet, base_sheet, size, feet = false, shelf_screw = undef) = //! Construct a property list for a box.
concat([screw, is_undef(shelf_screw) ? screw : shelf_screw, wall, sheets, top_sheet, base_sheet, feet], size);
function box_bezel_clearance(type) = bezel_clearance;

View File

@@ -67,18 +67,18 @@ module foot(type = foot) { //! Generate STL
}
}
module foot_assembly(t = 0, type = foot, flip = false) { //! Assembly with fasteners in place for specified sheet thickness
module foot_assembly(t = 0, type = foot, flip = false, no_washer = false) { //! Assembly with fasteners in place for specified sheet thickness
screw = foot_screw(type);
nut = screw_nut(screw);
squeeze = 0.5;
screw_length = screw_length(screw, foot_thickness(type) + t - squeeze, 2, nyloc = true);
screw_length = screw_length(screw, foot_thickness(type) + t - squeeze, no_washer ? 1 : 2, nyloc = true);
vflip() explode(15, true) {
stl_colour(pp4_colour) foot(type);
if(t)
explode(15, true)
translate_z(foot_thickness(type))
translate_z(foot_thickness(type) - squeeze)
if(flip)
nut_and_washer(nut, true);
else
@@ -87,9 +87,15 @@ module foot_assembly(t = 0, type = foot, flip = false) { //! Assembly with faste
if(t)
translate_z(t)
if(flip)
screw_and_washer(screw, screw_length);
if(no_washer)
screw(screw, screw_length);
else
screw_and_washer(screw, screw_length);
else
nut_and_washer(nut, true);
if(no_washer)
nut(nut, true);
else
nut_and_washer(nut, true);
}
module insert_foot(type = insert_foot) { //! Generate STL for foot with insert

View File

@@ -22,7 +22,7 @@
//!
//! Add solvent or glue to make a permanent fixture.
//
include <../core.scad>
include <../utils/core/core.scad>
interference = 0.0;

View File

@@ -26,7 +26,9 @@
//!
//! It can also have printed feet on the base with the screws doubling up to hold the base on.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../vitamins/screw.scad>
use <../vitamins/washer.scad>
use <../vitamins/insert.scad>
use <foot.scad>

View File

@@ -21,8 +21,8 @@
//! Creative Commons - Attribution - Share Alike license (see <https://creativecommons.org/licenses/by-sa/3.0/>)
//
include <../core.scad>
include <../vitamins/pulleys.scad>
include <../utils/core/core.scad>
use <../vitamins/pulley.scad>
printed_pulley_GT2_profile = [[0.747183,-0.5],[0.747183,0],[0.647876,0.037218],[0.598311,0.130528],[0.578556,0.238423],[0.547158,0.343077],[0.504649,0.443762],[0.451556,0.53975],[0.358229,0.636924],[0.2484,0.707276],[0.127259,0.750044],[0,0.76447],[-0.127259,0.750044],[-0.2484,0.707276],[-0.358229,0.636924],[-0.451556,0.53975],[-0.504797,0.443762],[-0.547291,0.343077],[-0.578605,0.238423],[-0.598311,0.130528],[-0.648009,0.037218],[-0.747183,0],[-0.747183,-0.5]];

View File

@@ -2543,7 +2543,7 @@ PCBs and perfboard with optional components. The shape can be a rectangle with o
| 1 | `pcb(ESP32_DOIT_V1)` | ESP32 DOIT DEV KIT V1 |
| 1 | `pcb(EnviroPlus)` | Enviro+ |
| 1 | `pcb(ExtruderPCB)` | Extruder connection PCB - not shown |
| 1 | `pcb(KY_040)` | KY_-040 rotart encoder breakout |
| 1 | `pcb(KY_040)` | KY-040 rotart encoder breakout |
| 1 | `pcb(Keyes5p1)` | Keyes5.1 Arduino Uno expansion board - not shown |
| 1 | `pcb(LIPO_fuel_gauge)` | LIPO fuel gauge |
| 1 | `pcb(MP1584EN)` | MP1584EN 3A buck converter |
@@ -4410,7 +4410,7 @@ Normally the side sheets are the same type but they can be overridden individual
### Functions
| Function | Description |
|:--- |:--- |
| `box(screw, wall, sheets, top_sheet, base_sheet, size, feet = false, shelf_screw = M3_dome_screw)` | Construct a property list for a box. |
| `box(screw, wall, sheets, top_sheet, base_sheet, size, feet = false, shelf_screw = undef)` | Construct a property list for a box. |
| `box_bezel_height(type, bottom)` | Bezel height for top or bottom |
| `box_corner_gap(type)` | Gap between box_sheets at the corners to connect inside and outside profiles |
| `box_inset(type)` | How much the bezel intrudes on the specified width and length, away from the corners |
@@ -5189,7 +5189,7 @@ inserts don't grip well in rubber.
|:--- |:--- |
| `fastened_insert_foot_assembly(t = 3, type = insert_foot)` | Assembly with fasteners in place for specified sheet thickness |
| `foot(type = foot)` | Generate STL |
| `foot_assembly(t = 0, type = foot, flip = false)` | Assembly with fasteners in place for specified sheet thickness |
| `foot_assembly(t = 0, type = foot, flip = false, no_washer = false)` | Assembly with fasteners in place for specified sheet thickness |
| `insert_foot(type = insert_foot)` | Generate STL for foot with insert |
| `insert_foot_assembly(type = insert_foot)` | Printed part with insert in place |

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../utils/layout.scad>
include <../vitamins/7_segments.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../vitamins/dip.scad>
dips = [[6, "OPTO"], [8, "NE555"], [14, "74HC00"], [16, "ULN2003"], [18, "ULN2803"], [20, "74HC245"], [28, "ATMEGA328"]];

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
include <../vitamins/ldrs.scad>
use <../utils/layout.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
include <../vitamins/ssrs.scad>
use <../utils/layout.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../utils/layout.scad>
include <../vitamins/ball_bearings.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../utils/layout.scad>
use <../printed/camera_housing.scad>

View File

@@ -19,7 +19,6 @@
include <../core.scad>
include <../vitamins/pulleys.scad>
include <../vitamins/screws.scad>
include <../vitamins/stepper_motors.scad>
include <../vitamins/washers.scad>

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../vitamins/microview.scad>
microview(!$preview);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 115 KiB

View File

@@ -16,7 +16,7 @@
// You should have received a copy of the GNU General Public License along with NopSCADlib.
// If not, see <https://www.gnu.org/licenses/>.
//
include <../core.scad>
include <../utils/core/core.scad>
use <../printed/press_fit.scad>
module press_fits()

View File

@@ -29,7 +29,7 @@
//! 4. The drive pulleys may be offset in the X and Y directions. If this is done, extra idler pulleys are added. This
//! allows flexible positioning of the motors.
//
include <../core.scad>
include <../utils/core/core.scad>
include <../vitamins/belts.scad>
include <../vitamins/pulleys.scad>

View File

@@ -54,9 +54,9 @@ module resistor(type) { //! Draw specified type of resitor
for(side= [-1,1])
translate([side * dia / 6, 0, length / 2])
rotate([0, splay_angle * side, 0])
cylinder(r = resistor_wire_diameter(type) / 2, h = resistor_wire_length(type), center = false);
cylinder(r = resistor_wire_diameter(type) / 2, h = resistor_wire_length(type), center = false, $fn = 16);
else
cylinder(r = resistor_wire_diameter(type) / 2, h = length + 2 * resistor_wire_length(type), center = true);
cylinder(r = resistor_wire_diameter(type) / 2, h = length + 2 * resistor_wire_length(type), center = true, $fn = 16);
//
// Sleeving
//
@@ -66,7 +66,7 @@ module resistor(type) { //! Draw specified type of resitor
for(side= [-1, 1])
translate([side * resistor_diameter(type) / 6, 0, length / 2]) {
rotate([0, splay_angle * side, 0])
cylinder(r = resistor_wire_diameter(type) / 2 + 0.1, h = resistor_wire_length(type) - 5, center = false); }
cylinder(r = resistor_wire_diameter(type) / 2 + 0.1, h = resistor_wire_length(type) - 5, center = false, $fn = 16); }
//
// Body
//

View File

@@ -27,7 +27,7 @@ RIE1212UB5C5R6 = [ "RIE1212UB5C5R6", "Resistor UB5C 5R6F 5R6 3W vitreous enamel"
//
Honewell = [ "Honewell", "Thermistor Honeywell 135-104LAC-J01 100K 1%", 4.75, 1.8, 0.5, 28.6, 2, "red", false];
Epcos = [ "Epcos", "Thermistor Epcos B57560G104F 100K 1%", 4.6, 2.5, 0.3, 67, 2.5, [0.8, 0.8, 0.8, 0.25], true, false];
EpcosBlue = [ "EpcosBlue", "Thermistor Epcos B57861S104F40 100K 1%", 6.5, 2.41,0.25, 43.5,2.5, "black", true, true];
EpcosBlue = [ "EpcosBlue", "Thermistor Epcos B57861S104F40 100K 1%", 4.5, 2.41,0.25, 43.5,2.5, "black", true, true];
resistors = [Honewell, Epcos, EpcosBlue, RWM04106R80J, RIE1212UB5C5R6];
//

View File

@@ -22,8 +22,6 @@
//!
//! Needs updating as mostly obsolete versions.
//
include <../core.scad>
function hot_end_style(type) = type[1]; //! Basic type, jhead or e3d
function hot_end_part(type) = type[2]; //! Description
function hot_end_total_length(type) = type[3]; //! Length from nozzle tip to the top
@@ -35,7 +33,7 @@ function hot_end_groove_dia(type) = type[8]; //! Groove internal diam
function hot_end_groove(type) = type[9]; //! Groove length
function hot_end_duct_radius(type) = type[10]; //! Require radius to clear the heater block
function hot_end_duct_offset(type) = type[11]; //! Offset of circular duct centre from the nozzle
function hot_end_need_cooling(type) = hot_end_style(type) != e3d; //! Has own fan so don't need cooling hole in the duct
function hot_end_need_cooling(type) = hot_end_style(type) != "e3d"; //! Has own fan so don't need cooling hole in the duct
function hot_end_duct_height_nozzle(type) = type[12]; //! Duct height at nozzle end
function hot_end_duct_height_fan(type) = type[13]; //! Duct height at fan end
@@ -45,9 +43,10 @@ use <jhead.scad>
use <e3d.scad>
module hot_end(type, filament, naked = false, resistor_wire_rotate = [0,0,0], bowden = false) { //! Draw specified hot end
if(hot_end_style(type) == jhead)
if(hot_end_style(type) == "jhead")
jhead_hot_end_assembly(type, filament, naked);
if(hot_end_style(type) == e3d)
else if(hot_end_style(type) == "e3d")
e3d_hot_end_assembly(type, filament, naked, resistor_wire_rotate, bowden);
else
assert(false, "Invalid hotend style");
}

View File

@@ -33,10 +33,10 @@
// h t s t t t
// h
//
JHeadMk5 = ["JHeadMk5", jhead, "JHead MK5", 51.2, 4.75,16, 40, grey(20), 12, 4.64, 13, [0, 2.38, -5], 20, 20];
E3Dv5 = ["E3Dv5", e3d, "E3D V5 direct", 70, 3.7, 16, 50.1, "silver", 12, 6, 15, [1, 5, -4.5], 14.5, 28];
E3Dv6 = ["E3Dv6", e3d, "E3D V6 direct", 62, 3.7, 16, 42.7, "silver", 12, 6, 15, [1, 5, -4.5], 14, 21];
E3D_clone = ["E3D_clone", e3d, "E3D clone aliexpress",66, 6.8, 16, 46, "silver", 12, 5.6, 15, [1, 5, -4.5], 14.5, 21];
JHeadMk5 = ["JHeadMk5", "jhead","JHead MK5", 51.2, 4.75,16, 40, grey(20), 12, 4.64, 13, [0, 2.38, -5], 20, 20];
E3Dv5 = ["E3Dv5", "e3d", "E3D V5 direct", 70, 3.7, 16, 50.1, "silver", 12, 6, 15, [1, 5, -4.5], 14.5, 28];
E3Dv6 = ["E3Dv6", "e3d", "E3D V6 direct", 62, 3.7, 16, 42.7, "silver", 12, 6, 15, [1, 5, -4.5], 14, 21];
E3D_clone = ["E3D_clone", "e3d", "E3D clone aliexpress",66, 6.8, 16, 46, "silver", 12, 5.6, 15, [1, 5, -4.5], 14.5, 21];
hot_ends = [JHeadMk5, E3Dv5, E3Dv6, E3D_clone];

View File

@@ -20,7 +20,7 @@
//
//! IEC mains inlets and outlet.
//
include <../core.scad>
include <../utils/core/core.scad>
use <screw.scad>
use <nut.scad>
use <washer.scad>

View File

@@ -20,7 +20,9 @@
//
//! Random screw down modules. Currently just DROK buck converters.
//
include <../core.scad>
include <../utils/core/core.scad>
use <screw.scad>
use <nut.scad>
function mod_part(type) = type[1]; //! Description
function mod_length(type) = type[2]; //! Body length

View File

@@ -868,7 +868,7 @@ ArduinoNano = let(l = 43.18, w = 17.78, pitch = inch(0.6), pins = 15, poffset =
[(l - inch(pins - 1) / 10) / 2 + poffset, (w - pitch) / 2, pins, 2, silver, 2.54, pitch], // 15x2 grid of holes
];
KY_040 = ["KY_040", "KY_-040 rotart encoder breakout",
KY_040 = ["KY_040", "KY-040 rotart encoder breakout",
26.3, 19.5, 1.6, 0, 3, 0, grey(20), false,
[
[3.23 + 1.5, 1.3 + 1.5],

View File

@@ -19,7 +19,7 @@
//! BLDC servos for CNC machines
//
include <../core.scad>
include <../utils/core/core.scad>
include <../utils/tube.scad>
include <../utils/round.scad>
include <../utils/quadrant.scad>

View File

@@ -20,9 +20,8 @@
//! SK shaft support brackets
//
include <../core.scad>
include <../utils/fillet.scad>
use <../utils/fillet.scad>
use <washer.scad>
sk_bracket_colour = grey(70);

View File

@@ -27,7 +27,6 @@ include <../vitamins/pin_headers.scad>
use <../utils/tube.scad>
use <../utils/thread.scad>
use <../utils/round.scad>
use <washer.scad>
use <rod.scad>
function NEMA_width(type) = type[1]; //! Width of the square face

View File

@@ -82,7 +82,7 @@ module veroboard(type) { //! Draw specified veroboard with missing tracks and tr
width = strips * pitch;
hole_d = 1;
tw = vero_track_width(type);
colour = vero_fr4(type) ? "green" : "goldenrod";
colour = vero_fr4(type) ? "#BEB564" : "goldenrod";
tc = vero_fr4(type) ? "silver" : copper;
no_track = vero_no_track(type);
@@ -124,9 +124,9 @@ module veroboard(type) { //! Draw specified veroboard with missing tracks and tr
for(p = vero_breaks(type))
vero_grid_pos(type, p.x, p.y)
if(ceil(p.x) == p.x)
circle(d = pitch);
circle(d = pitch * 1.1);
else
square([pitch * 0.2, pitch], center = true);
square([pitch * 0.3, pitch], center = true);
}
}
}