Repository: mrWheel/YAPP_Box Branch: main Commit: f9400c419ef1 Files: 55 Total size: 13.9 MB Directory structure: gitextract_i9f70_ot/ ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── STL/ │ ├── MODELS/ │ │ ├── Arduino_Uno_model.stl │ │ └── virtualP1Cable_v10_model.stl │ ├── YAPP_ArduinoClone_v30.stl │ ├── YAPP_Demo_buttons_v30.stl │ └── YAPP_Demo_lightTubes_v30.stl ├── YAPP_Template_v3.scad ├── YAPPgenerator_v3.scad └── examples/ ├── ESP32-CAM-USB-FISH_v30.scad ├── ESP32-CAM-USB_v30.scad ├── GateAlarm_Sample_v30.scad ├── Multiple_PCB_v30.scad ├── PoolMonitor_v30.scad ├── RidgeExtDemo_v30.scad ├── WaterHeaterMonitor_v3.scad ├── YAPP_ArduinoClone_v30.scad ├── YAPP_Connector_Demo.scad ├── YAPP_Countersink Sample_v3.scad ├── YAPP_Demo_DisplayMount_LCD2004.scad ├── YAPP_Demo_DisplayMount_v31.scad ├── YAPP_Demo_Joystick_Paddle Controller_v30.scad ├── YAPP_Demo_Labels_v3.scad ├── YAPP_Demo_RealBox_v30.scad ├── YAPP_Demo_RealBox_v31.scad ├── YAPP_Demo_boxMounts_v30.scad ├── YAPP_Demo_boxMounts_v31.scad ├── YAPP_Demo_buttons2_v30.scad ├── YAPP_Demo_buttons2_v31.scad ├── YAPP_Demo_buttons_v30.scad ├── YAPP_Demo_buttons_v31.scad ├── YAPP_Demo_connectors_v33.scad ├── YAPP_Demo_cutout_yappRing_v30.scad ├── YAPP_Demo_cutout_yappRing_v31.scad ├── YAPP_Demo_cutout_yappSphere_v30.scad ├── YAPP_Demo_cutouts_all_coord_systems_v30.scad ├── YAPP_Demo_cutouts_all_coord_systems_v31.scad ├── YAPP_Demo_cutouts_masks_v30.scad ├── YAPP_Demo_cutouts_v30.scad ├── YAPP_Demo_imagesPlane_v3.scad ├── YAPP_Demo_lightTubes_v30.scad ├── YAPP_HookTest_v30.scad ├── YAPP_Reference_Masks_v30.scad ├── YAPP_Reference_Shapes_v30.scad ├── YAPP_RidgeExtDemo_v30.scad ├── YAPP_RidgeExtDemo_v31.scad ├── YAPP_TEST_BoxTypes_v32.scad ├── YAPP_Test_SnapJoints_v30.scad ├── YAPP_ViewShapes_v30.scad ├── YAPP_WemosD1mini_v30.scad ├── YAPP_connectors_v30.scad ├── YAPP_cutouts_from_inside_v30.scad └── pcbStandTest.scad ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ ================================================ FILE: CHANGELOG.md ================================================ # YAPP Change Log ## Rev. v3.0.1 (2024-01-15) * Re-organzie Git repo to maintain only the latest version in the `main` branch. * The core files (`YAPP_Template_v3.scad`, `YAPPgenerator_v3.scad`) now keep only a major version in their filename, and live in the root of the repo. ## Rev. 3.0.0 (2023-12-01) Lead Developer for v3.0: Dave Rosenhauer Dave added new functionality, fixed many bugs, is the creator of the v3.0 API and did a lot of code cleanup. He made more than 20 merge requests in three weeks. **New functionality**
Cutout Shapes
	Cutouts now support more shapes.
		yappRectangle	    : Rectangle with size 'width' x 'length' 
		yappCircle	    : Circle with radius of 'radius'
		yappRoundedRect	    : Rectangle with size 'width' x 'length' and corner 
                                      radius of 'radius'
		yappPolygon	    : User defined polygon. Three standard shapes are 
                                      included for use/reference - 'shapeIsoTriangle', 
                                      'shapeHexagon', 'shape6ptStar' 
		yappCircleWithFlats : Circle with radius of 'radius' with the sides 
                                      clipped to width (length is not used)
    		yappCircleWithKey   : Circle with radius of 'radius' with a rectangular 
                                      key of width x length (length is key depth)

Cutout Masks

Fillets
	Fillets are automatically added to all appropriate items.  
	This can be overridden with the yappNoFillet option.  
	Fillet radius can also be changed from default (same as connected wall thickness) 
	with the filletRadius parameter.

Ridge Extension
  Extension from the lid into the case for adding split opening at various heights

//========= HOOK dummy functions ============================
  
// Hook functions allow you to add 3d objects to the case.
// Lid/Base = Shell part to attach the object to.
// Inside/Outside = Join the object from the midpoint of the shell to the inside/outside.

//===========================================================
// origin = box(0,0,0)
module hookLidInside()
{
} // hookLidInside()
  
//===========================================================
// origin = box(0,0,shellHeight)
module hookLidOutside()
{
} // hookLidOutside()

//===========================================================
// origin = box(0,0,0)
module hookBaseInside()
{
} // hookBaseInside()

//===========================================================
// origin = box(0,0,0)
module hookBaseOutside()
{
} // hookBaseOutside()

//===========================================================
//===========================================================
**Updated definition standards:**
     Parameters:
	p(0,1 ...) = a 'p' with a number between parentheses indicates a 
	                    'positional' parameter.
	n(a,b ...) = a 'n' with a letter between parentheses indicates an 
	                    optional, 'non-positional' parameter must be after 
	                    the required parameters.
	{ yappParameter }
	<Default value>
	| means one or more values from the list are allowed
	, means only one value from the list is allowed
**This version breaks with the API for the following objects:**
===================================================================
  *** PCB Supports ***
  Pin and Socket standoffs 
-------------------------------------------------------------------
Default origin =  yappCoordPCB : pcb[0,0,0]

Parameters:
 Required:
  p(0) = posx
  p(1) = posy
 Optional:
  p(2) = Height to bottom of PCB : Default = defaultStandoffHeight
  p(3) = standoffDiameter    = defaultStandoffDiameter;
  p(4) = standoffPinDiameter = defaultStandoffPinDiameter;
  p(5) = standoffHoleSlack   = defaultStandoffHoleSlack;
  p(6) = filletRadius (0 = auto size)
  n(a) = { <yappBoth> | yappLidOnly | yappBaseOnly }
  n(b) = { <yappPin>, yappHole } : Baseplate support treatment
  n(c) = { <yappAllCorners> | yappFrontLeft | yappFrontRight | yappBackLeft | yappBackRight }
  n(d) = { <yappCoordPCB>, yappCoordBox }  
  n(e) = { yappNoFillet }
===================================================================
  *** Connectors ***
  Standoffs with hole through base and socket in lid for screw type connections.
-------------------------------------------------------------------
Default origin = yappCoordBox: box[0,0,0]
  
Parameters:
 Required:
  p(0) = posx
  p(1) = posy
  p(2) = pcbStandHeight
  p(3) = screwDiameter
  p(4) = screwHeadDiameter : (don't forget to add extra for the fillet)
  p(5) = insertDiameter
  p(6) = outsideDiameter
 Optional:
  p(7) = filletRadius : Default = 0/Auto(0 = auto size)
  n(a) = { <yappAllCorners> | yappFrontLeft | yappFrontRight | yappBackLeft | yappBackRight }
  n(b) = { <yappCoordBox>, yappCoordPCB }
  n(c) = { yappNoFillet }
===================================================================
  *** Base Mounts ***
  Mounting tabs on the outside of the box
-------------------------------------------------------------------
Default origin = yappCoordBox: box[0,0,0]

Parameters:
 Required:
  p(0) = pos
  p(1) = screwDiameter
  p(2) = width
  p(3) = height
 Optional:
  p(4) = filletRadius : Default = 0/Auto(0 = auto size)
  n(a) = { yappLeft | yappRight | yappFront | yappBack } : (one or more)
  n(b) = { yappNoFillet }
===================================================================
  *** Cutouts ***
  There are 6 cutouts one for each surface:
    cutoutsBase, cutoutsLid, cutoutsFront, cutoutsBack, cutoutsLeft, cutoutsRight
-------------------------------------------------------------------
Default origin = yappCoordBox: box[0,0,0]

                      Required                Not Used        Note
--------------------+-----------------------+---------------+------------------------------------
yappRectangle       | width, length         | radius        |
yappCircle          | radius                | width, length |
yappRoundedRect     | width, length, radius |               |     
yappCircleWithFlats | width, radius         | length        | length=distance between flats
yappCircleWithKey   | width, length, radius |               | width = key width length=key depth
yappPolygon         | width, length         | radius        | yappPolygonDef object must be provided
--------------------+-----------------------+---------------+------------------------------------

Parameters:
 Required:
  p(0) = from Back
  p(1) = from Left
  p(2) = width
  p(3) = length
  p(4) = radius
  p(5) = shape : {yappRectangle | yappCircle | yappPolygon | yappRoundedRect 
	         | yappCircleWithFlats | yappCircleWithKey}
 Optional:
  p(6) = depth : Default = 0/Auto : 0 = Auto (plane thickness)
  p(7) = angle : Default = 0
  n(a) = { yappPolygonDef } : Required if shape = yappPolygon specified -
  n(b) = { yappMaskDef } : If a yappMaskDef object is added it will be used as a mask for the cutout.
  n(c) = { <yappCoordBox>, yappCoordPCB }
  n(d) = { <yappOrigin>, yappCenter }
  n(e) = { <yappGlobalOrigin>, yappLeftOrigin } : Only affects Top, Back and Right Faces
===================================================================
  *** Snap Joins ***
-------------------------------------------------------------------
Default origin = yappCoordBox: box[0,0,0]

Parameters:
 Required:
  p(0) = posx | posy
  p(1) = width
  p(2) = { yappLeft | yappRight | yappFront | yappBack } : (one or more)
 Optional:
  n(a) = { <yappOrigin>, yappCenter }
  n(b) = { yappSymmetric }
  n(c) = { yappRectangle } == Make a diamond shape snap
===================================================================
  *** Light Tubes ***
-------------------------------------------------------------------
Default origin = yappCoordPCB: PCB[0,0,0]

Parameters:
 Required:
  p(0) = posx
  p(1) = posy
  p(2) = tubeLength
  p(3) = tubeWidth
  p(4) = tubeWall
  p(5) = gapAbovePcb
  p(6) = { yappCircle|yappRectangle } : tubeType
 Optional:
  p(7) = lensThickness : (how much to leave on the top of the lid for the light 
	 to shine through 0 for open hole, Default = 0/Open
  p(8) = Height to top of PCB : Default = defaultStandoffHeight+pcbThickness
  p(9) = filletRadius : Default = 0/Auto 
  n(a) = { <yappCoordPCB>, yappCoordBox }
  n(b) = { yappNoFillet }
===================================================================
  *** Push Buttons ***
-------------------------------------------------------------------
Default origin = yappCoordPCB: PCB[0,0,0]

Parameters:
 Required:
  p(0) = posx
  p(1) = posy
  p(2) = capLength for yappRectangle, capDiameter for yappCircle
  p(3) = capWidth for yappRectangle, not used for yappCircle
  p(4) = capAboveLid
  p(5) = switchHeight
  p(6) = switchTravel
  p(7) = poleDiameter
 Optional:
  p(8) = Height to top of PCB : Default = defaultStandoffHeight + pcbThickness
  p(9) = { <yappRectangle>, yappCircle } : buttonType, Default = yappRectangle
  p(10) = filletRadius : Default = 0/Auto 
## Rev. 2.0 (21-05-2023) **New functionality *lightTubes* ** With the **lightTubes** array you can define where you want tubes for LED's and NeoPixles**
//-- lightTubes  -- origin is pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = tubeLength
// (3) = tubeWidth
// (4) = tubeWall
// (5) = abovePcb
// (6) = tubeType  {yappCircle|yappRectangle}
lightTubes = [
              //--- 0,    1, 2, 3, 4, 5, 6
                  [84.5, 21, 3, 6, 1, 4, yappRectangle]
                , [30,   21, 5, 0, 1, 2, yappCircle]
              ];     
![lightTube_top](https://github.com/mrWheel/YAPP_Box/assets/5585427/fe4eba60-416b-4b35-b0f3-4e3df204a900) ![lightTube_a](https://github.com/mrWheel/YAPP_Box/assets/5585427/6c79d4ff-faff-4e8d-8283-2d2a5d49d4d8)
posx        - the position of the center of the led on the X-axes of the PCB
posy        - the position of the center of the led on the Y-axes of the PCB
tubeLength  - the length of the tube (if yappRectangle) or the diameter of the tube (if yappCircle)
tubeWidth   - the width of the tube (not used if yappCircle)
tubeWall    - the width of the wall around the led
abovePcp    - how hight the tube will begin with respect to the top of the PCB
tubeType    - whether the led shows as a circle (yappCircle) or a rectangle (yappRectangle)
**New functionality *pushButtons* (experimental)** With the **pushButtons** array you can define where you want button guides for tactile switches.
//-- pushButtons  -- origin is pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = capLength
// (3) = capWidth
// (4) = capAboveLid
// (5) = switchHeight
// (6) = switchTrafel
// (7) = poleDiameter
// (8) = buttonType  {yappCircle|yappRectangle}
pushButtons = [
                 [15, 30, 8, 8, 0, 1,   1, 3.5, yappCircle]
               , [15, 10, 8, 6, 2, 4.5, 1, 3.5, yappRectangle]
              ];
![buttonGuides](https://github.com/mrWheel/YAPP_Box/assets/5585427/7940ec0e-10a3-408b-8c11-4d811efb7720) The "Plate" has to be glued to the "Pole".
posx         - the position of the center of the tacktile switch on the PCB
posy         - the position of the center of the tacktile switch on the PCB
capLength    - the length of the button (if yappRectangle) or the diameter (if yappCircle)
capWidth     - the width of the button (if yappRectangle, otherwise ignored)
capAboveLid  - how much the button cap is above the lid
switchHeight - the height of the tactile switch
switchTrafel - the distance the button has to trafel to activate the tacktile switch
poleDiameter - the diameter of the pole that connects the button cap with the plate
buttonType   - either yappCircle or yappRectangle

## Rev. 1.8 (22-02-2023) **This version breaks with the API for the following array's:** * pcbStand[..] (extra parameter for standoffHeight) * connectors[..] (extra parameter for baseConnector Height)
//-- pcb_standoffs  -- origin is pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = standoffHeight
// (3) = flangeHeight
// (4) = flangeDiameter
// (5) = { yappBoth | yappLidOnly | yappBaseOnly }
// (6) = { yappHole, YappPin }
// (7) = { yappAllCorners | yappFrontLeft | yappFrontRight | yappBackLeft | yappBackRight }
pcbStands = [
                [3,  3, 5, 3, 11, yappBoth, yappPin, yappAllCorners]
               ,[5,  5, 5, 4, 10, yappBoth, yappPin, yappBackLeft, yappFrontRight]
               ,[8,  8, 5, 4, 11, yappBoth, yappPin]
               ,[pcbLength-15, pcbWidth-15, 8, 4, 12, yappBoth, yappPin]
             ];
//-- connectors
//-- normal         : origen = box[0,0,0]
//-- yappConnWithPCB: origen = pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = pcbStandHeight
// (3) = screwDiameter
// (4) = screwHeadDiameter
// (5) = insertDiameter
// (6) = outsideDiameter
// (7) = flangeHeight
// (8) = flangeDiam
// (9) = { yappConnWithPCB }
// (10) = { yappAllCorners | yappFrontLeft | yappFrontRight | yappBackLeft | yappBackRight }
connectors   =  [
                    [ 8,  8, 5, 2.5, 2.8, 3.8, 6, 6, 15, yappAllCorners]
                  , [28, 58, 5, 2.5, 2.8, 3.8, 6, 6, 25, yappConnWithPCB]
                ];


## Rev. 1.7 **This version breaks with the API for the following array's:** * pcbStand[..] (extra parameter for flange) * connectors[..] (huge change lots of extra parameters) * connectosPCB[..] (removed)
//-- pcb_standoffs  -- origin is pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = flangeHeight
// (3) = flangeDiameter
// (4) = { yappBoth | yappLidOnly | yappBaseOnly }
// (5) = { yappHole, YappPin }
// (6) = { yappAllCorners | yappFrontLeft | yappFrontRight | yappBackLeft | yappBackRight }
pcbStands = [
                [3,  3, 3, 11, yappBoth, yappPin, yappAllCorners]
               ,[5,  5, 4, 10, yappBoth, yappPin, yappBackLeft, yappFrontRight]
               ,[8,  8, 4, 11, yappBoth, yappPin]
               ,[pcbLength-15, pcbWidth-15, 4, 12, yappBoth, yappPin]
             ];
//-- connectors
//-- normal         : origen = box[0,0,0]
//-- yappConnWithPCB: origen = pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = screwDiameter
// (3) = screwHeadDiameter
// (4) = insertDiameter
// (5) = outsideDiameter
// (6) = flangeHeight
// (7) = flangeDiam
// (8) = { yappConnWithPCB }
// (9) = { yappAllCorners | yappFrontLeft | yappFrontRight | yappBackLeft | yappBackRight }
connectors   =  [
                    [8, 8, 2.5, 2.8, 3.8, 6, 6, 15, yappAllCorners]
                  , [28, 58, 2.5, 2.8, 3.8, 6, 6, 25, yappConnWithPCB]
                ];

The depth of the screw in the connectors is now depending on the standoffHeight so the screw size does not change anymore. ![YAPP_connectorRevised](https://user-images.githubusercontent.com/5585427/220582716-41c8d56b-0782-42ce-937f-401495f3889b.png)
## Rev. 1.6 - new cutoutGrills array
//-- cutoutGrills    -- origin is box[x0,y0]
// (0) = xPos
// (1) = yPos
// (2) = grillWidth
// (3) = grillLength
// (4) = gWidth
// (5) = gSpace
// (6) = gAngle
// (7) = plane [ "base" | "lid" ]
// (8) = {polygon points} (optional)


cutoutGrills = [
                 [22, 22, 90, 90, 2, 3, 50, "base", [  [0,15],[20,15],[30,0],[40,15],[60,15]
                                                      ,[50,30],[60,45], [40,45],[30,60]
                                                      ,[20,45], [0,45],[10,30] ]
                 ]
                ,[15, 10, 50, 10, 2, 3, -20, "base"]
                ,[15, 15, 10, 50, 2, 3, -45, "lid"]
                ,[15, 85, 50, 10, 2, 3,  20, "base"]
                ,[85, 15, 10, 50, 2, 3,  45, "lid"]
               ];
![cutoutGrills-v16](https://user-images.githubusercontent.com/5585427/192301088-056f7f9c-f89f-40a2-a7ba-f4496d4e722c.png) **Be aware**: this functionality needs a **huge** amount of rendering elements. You can set this at `Preferences->Advanced->Turn of rendering at 100000 elements`
## Rev. 1.5 - Various bug-fixes - Connectors now have a flange at the basePlane and lidPlane for a better adhesion *This release breaks with previous releases in the extra parm "**depth**" in the labels array!!* The labels now have this syntax:
//-- origin of labels is box [0,0,0]
// (0) = posx
// (1) = posy/z
// (2) = orientation
// (3) = depth
// (4) = plane {lid | base | left | right | front | back }
// (5) = font
// (6) = size
// (7) = "label text"
Example:
labelsPlane = [
                [10,  10,   0, 0.6, "lid",   "Liberation Mono:style=bold", 15, "YAPP" ]
               ,[100, 90, 180, 0.8, "base",  "Liberation Mono:style=bold", 11, "Base" ]
               ,[8,    8,   0, 1.0, "left",  "Liberation Mono:style=bold",  7, "Left" ]
               ,[10,   5,   0, 1.2, "right", "Liberation Mono:style=bold",  7, "Right" ]
               ,[40,  23,   0, 1.5, "front", "Liberation Mono:style=bold",  7, "Front" ]
               ,[5,    5,   0, 2.0, "back",  "Liberation Mono:style=bold",  8, "Back" ]
              ];
For your box to work with this release as before you have to add this extra parm (as "wallThickness/2", "basePlaneThickness/2" or "lidPlaneThickness/2"). Thanks to *Keith Hadley* There now is a new array for connectors that holds the PCB. This array is called "**connectorsPCB**".
//-- connectorsPCB -- origin = pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = screwDiameter
// (3) = insertDiameter
// (4) = outsideDiameter
// (5) = { yappAllCorners }
Example:
connectorsPCB = [
                  [pcbLength/2, 10, 2.5, 3.8, 5]
                 ,[pcbLength/2, pcbWidth-10, 2.5, 3.8, 5]
                ];
It takes in account the "**pcbThickness**" to calculate the hight of the lid-connector. Thanks to *Oliver Grafe* ![connectorTypes](https://user-images.githubusercontent.com/5585427/192100231-b6df4e7d-50e8-4b75-8e8b-85a4b2d3e3b7.png)
## Rev. 1.4 *This release breaks with previous releases in the extra parm "**angle**" in all the cutouts array's!!!* All plane array's now have this syntax:
//-- plane    -- origin is pcb[0,0,0]
// (0) = posx
// (1) = posy
// (2) = width
// (3) = length
// (4) = angle
// (5) = { yappRectangle | yappCircle }
// (6) = { yappCenter }
For your box to work with this release you have to add this extra parm (as "***0***") to all your cutOut-array-row's ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2022 Willem Aandewiel Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ # YAPP_Box Yet Another Parametric Projectbox generator This OpenSCAD project can be used to create extremely comprehensive and customizable project boxes/enclosures using OpenSCAD. The [complete and official documentation gitbook](https://mrwheel-docs.gitbook.io/yappgenerator_en/) explains the entire API. You can open Issues here, but please also place them in a comment at one of the following blog posts: * "Yet Another Parametric Projectbox generator blog post" (English) * "Nog een geparametriseerde projectbox generator" (Dutch).
I have done my best, but it can probably be done simpler. If you think you can help, please contact me or make a Pull Request. ## How to program your Project Box It all starts with the dimensions of the PCB going inside your Project Box, as well as a few other dimensions: ```openscad printBaseShell = true; printLidShell = true; // Edit these parameters for your own board dimensions wallThickness = 1.0; basePlaneThickness = 1.0; lidPlaneThickness = 1.0; // Total height of box = basePlaneThickness + lidPlaneThickness // + baseWallHeight + lidWallHeight baseWallHeight = 7; lidWallHeight = 4; pcbLength = 88; pcbWidth = 49; pcbThickness = 1.5; // padding between pcb and inside wall paddingFront = 4; paddingBack = 1; paddingRight = 1; paddingLeft = 1; // ridge where Base- and Lid- off the box can overlap // Make sure this isn't less than lidWallHeight ridgeHeight = 3; ridgeSlack = 0.2; roundRadius = 2.0; // don't make this to big.. //-- How much the PCB needs to be raised from the base //-- to leave room for solderings and whatnot standoffHeight = 5.0; pinDiameter = 1.0; pinHoleSlack = 0.5; standoffDiameter = 4; ``` You probably want some cutouts in your box for connectors and stuff. For every plane (side) of the Project Box, there is an array that holds the cutouts for that plane. A picture is worth a thousand words ... ### Cutouts in the *Right* Plane: ![YAPP_cutoutsRight](https://user-images.githubusercontent.com/5585427/150956351-cef4fc0e-474d-4b44-b667-1a4d227400b6.png) ### Cutouts in the *Left* Plane: ![YAPP_cutoutsLeft](https://user-images.githubusercontent.com/5585427/150956356-ec4d5e17-c78e-41ae-bcd7-be8710f5a32c.png) ### Cutouts in the *Back* Plane: ![YAPP_cutoutsBack](https://user-images.githubusercontent.com/5585427/150956361-aa0c924f-ddc3-4260-a999-be9cd5b80b2e.png) ### Cutouts in the *Front* Plane: ![YAPP_cutoutsFront](https://user-images.githubusercontent.com/5585427/150956366-d5ca6715-7bdf-4ce7-bae7-1d8c79737eb6.png) ### Cutouts in the *Base*: ![YAPP_cutoutsBase](https://user-images.githubusercontent.com/5585427/150956371-8ed2d85a-3c49-48c6-b0db-1742053f2455.png) ### Cutouts in the *Lid*: ![YAPP_cutoutsLid](https://user-images.githubusercontent.com/5585427/150956374-c0de9d91-03a4-4ee3-8475-fecb251e9bca.png) ### Using the *angle* param (rotate around the x/y corner): ![yappRectangle40dgrs](https://user-images.githubusercontent.com/5585427/157865661-02407bfe-fada-4528-b25c-ea83c94b9467.png) #### With `yappCenter`, the rectangle will rotate around its center point: ![yappRectangleCenter10dgrs](https://user-images.githubusercontent.com/5585427/157865668-2b10bbe0-6223-4e6e-b74b-b81fb919f3da.png) ### Base mounts: ![Screenshot 2022-01-25 at 11 25 46](https://user-images.githubusercontent.com/5585427/150959614-b0d07141-27aa-4df3-b45e-09e662bacde9.png) ### `pcbStands`: `pcbStands` fixate the PCB between the base and the lid. ![YAPP_pcbStands](https://user-images.githubusercontent.com/5585427/150956378-ccdcdd88-9f0c-44cd-986f-70db3bf6d8e2.png) ### Connectors between *Base* and *Lid*: ![YAPP_connectors](https://user-images.githubusercontent.com/5585427/150956348-cfb4f550-a261-493a-9b86-6175e169b2bc.png) ### ConnectorsPCB between *Base* and *Lid* that fixates the PCB: ![connectorTypes](https://user-images.githubusercontent.com/5585427/192100231-b6df4e7d-50e8-4b75-8e8b-85a4b2d3e3b7.png) ![YAPP_connector_D](https://user-images.githubusercontent.com/5585427/150956341-5c087f45-c228-46db-8eb1-b3add2e9afca.png) Inserts are great for making a screw connection between the base and the lid. ![Ruthex-insert-a](https://user-images.githubusercontent.com/5585427/150959697-beaf6a25-b1df-4a1d-901b-dbcdf486b612.png) ### Snap Joins: ![snapJoins1](https://user-images.githubusercontent.com/5585427/153425134-ec2348cd-45a7-4e2d-8cb6-2f69e6f7f80b.png) ![snapJoins2](https://user-images.githubusercontent.com/5585427/153425125-04daa8ca-1126-4467-94a8-245c584d2333.png) #### Snap Joins *Symmetrical*: ![snapJoinsSymetric](https://user-images.githubusercontent.com/5585427/153425131-df24321f-9cc6-4dd6-aff6-41627915afa7.png) ### (more) Base Mounts: ![yappBaseStand](https://user-images.githubusercontent.com/5585427/153425136-9bc916a2-1245-4b3e-9072-8dd7ed8c3df6.png) ![yappBaseStand3D](https://user-images.githubusercontent.com/5585427/153425139-0b27f2f0-f12c-4d89-b394-70ebcf3e1c4f.png) ### Hooks: There are two type of "hooks"; at the inside of the box or at the outside of the box #### `baseHookOutside()`: ![baseHookOutside](https://user-images.githubusercontent.com/5585427/153425144-9401e969-8988-47e6-9c12-a3eaf052bfca.png) ![baseHookOutside3D](https://user-images.githubusercontent.com/5585427/153425145-ecd9bebd-82ba-4ab0-9685-9bf1c9b9273f.png) #### `lidHookInside()`: ![lidHooksInside1](https://user-images.githubusercontent.com/5585427/153425146-485d8cde-c530-4ab6-879d-3958ca5384ba.png) ![lidHooksInside3Db](https://user-images.githubusercontent.com/5585427/153425147-831b7f9c-1c74-4c58-8a3d-11b96aaf3107.png) ![lidHooksInside3Da](https://user-images.githubusercontent.com/5585427/153426442-6a05f787-8897-4610-8411-bb7279269980.png)
## Buy me a coffee (please)! If you like this project or it saved you time, you can give me a cup of coffee :)

bmc-button-75

## Versioning * All major releases (v1, v2, v3) are intended to be compatible with all files previously designed for v3 (e.g., the v3.1 release will not remove features or make any breaking changes, compared to v3.0). * The filename of the library (e.g., `YAPPgenerator_v3.scad`) will thus have only the major version in its filename. * When a new major version is released, a branch will be created from the `main` branch at the last commit before work is started on the next major version. This branch can be used to fix bugs and add features to the old release version, if desired. These lineage branches will not be merged to `main`, and will continue on their own path. * All future tagged versions will have GitHub Releases created for them, which will include the changelog for the release. The `YAPP_Template_vx.scad` and `YAPPgenerator_vx.scad` files will also be attached to the release. * The ISO8601 international standard date format (yyyy-mm-dd) will be used for documenting dates. ================================================ FILE: STL/MODELS/virtualP1Cable_v10_model.stl ================================================ [File too large to display: 13.1 MB] ================================================ FILE: YAPP_Template_v3.scad ================================================ //----------------------------------------------------------------------- // Yet Another Parameterized Projectbox generator // // This is a box for