Main Restorations Software Audio/Jukebox/MP3 Everything Else Buy/Sell/Trade
Project Announcements Monitor/Video GroovyMAME Merit/JVL Touchscreen Meet Up Retail Vendors
Driving & Racing Woodworking Software Support Forums Consoles Project Arcade Reviews
Automated Projects Artwork Frontend Support Forums Pinball Forum Discussion Old Boards
Raspberry Pi & Dev Board controls.dat Linux Miscellaneous Arcade Wiki Discussion Old Archives
Lightguns Arcade1Up Try the site in https mode Site News

Unread posts | New Replies | Recent posts | Rules | Chatroom | Wiki | File Repository | RSS | Submit news

  

Author Topic: New Product: SWYM: Star Wars Yoke Mount  (Read 72856 times)

0 Members and 1 Guest are viewing this topic.

telengard

  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 784
  • Last login:June 22, 2025, 08:20:45 pm
  • Yeah, it's a classic! 21+ on BYOAC and still goin
    • S T U R C A D E
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #40 on: April 16, 2025, 10:48:21 am »
Wow, looks great!  Looks like you were able to trim it down a lot.  I'm assuming "infil" is how much stuff is used when printing?
S T U R C A D E     M.A.M.E. Cabinet
http://www.briansturk.com/mame.html

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9664
  • Last login:Today at 08:08:00 am
  • Designated spam hunter
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #41 on: April 16, 2025, 01:21:37 pm »
Wow, looks great!  Looks like you were able to trim it down a lot.
Thanks.   :cheers:

The suggested redesign would be an even simpler triangular wedge that would trim it down even further.

I'm assuming "infil" is how much stuff is used when printing?
Yes.  100% infill is a solid piece of plastic.  0% infill is a hollow shell.

The "slicer" program that converts the 3d model (.stl file) into the G-code for the specific printer you will be using allows you to select the desired pattern and percentage of infill, the outer layer thickness, and many other options.
- Something like gyroid or cubic pattern at 20 or 30% infill with a 2mm outer shell (5 layers * 0.4mm nozzle) should work for printing this part with PETG filament.  PETG is more flexible than the more commonly-used PLA.

https://all3dp.com/2/infill-3d-printing-what-it-means-and-how-to-use-it/






Scott

telengard

  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 784
  • Last login:June 22, 2025, 08:20:45 pm
  • Yeah, it's a classic! 21+ on BYOAC and still goin
    • S T U R C A D E
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #42 on: April 16, 2025, 03:02:06 pm »
Very interesting, I figured it was something like that.

Is there a place you can recommend to have it printed online?  I don't own a 3d printer.
S T U R C A D E     M.A.M.E. Cabinet
http://www.briansturk.com/mame.html

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9664
  • Last login:Today at 08:08:00 am
  • Designated spam hunter
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #43 on: April 16, 2025, 03:53:40 pm »
Is there a place you can recommend to have it printed online?  I don't own a 3d printer.
I haven't used any of the online services so no idea which one to recommend or how much it would cost.   :dunno


Scott

telengard

  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 784
  • Last login:June 22, 2025, 08:20:45 pm
  • Yeah, it's a classic! 21+ on BYOAC and still goin
    • S T U R C A D E
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #44 on: April 16, 2025, 04:14:49 pm »
Is there a place you can recommend to have it printed online?  I don't own a 3d printer.
I haven't used any of the online services so no idea which one to recommend or how much it would cost.   :dunno


Scott

Ok, I'll ask around, thanks so much for all of your help Scott!  I'll let you know how it goes.
S T U R C A D E     M.A.M.E. Cabinet
http://www.briansturk.com/mame.html

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9664
  • Last login:Today at 08:08:00 am
  • Designated spam hunter
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #45 on: May 04, 2025, 09:52:56 am »
Did a small test print to confirm the fit for sheet metal screws.

Here are the latest updates:
- Changed the suggested mounting hardware to commonly available #12 x 3/4" sheet metal screws.
- Made a screw test print with straight and angled screw holes for anyone who wants to check their printer or use different hardware.
- Attached .zip file has the two .scad files and four .stl files.

Wedge Screw Test:
Code: [Select]
// Wedge Screw Test print. v1.0

// Use #12 x 3/4" sheet metal screws.

// If you change variables WedgeAngle, BoltDia or BoltDepth, transfer the new values to Telengard Wedge.scad lines 29, 33, and 34.

/////////////////////////////
//  Define the variables
/////////////////////////////

WedgeAngle = 55;  // Wedge angle

BoltDia = 5.2;  // Bolt hole diameter -- default = 5.2
BoltDepth = 19; // Bolt hole depth -- default = 19

CubeX = 14;
CubeY = 14;
CubeZ = 20;

AngledYOffset = 8.6;
AngledZOffset = 2;

SideThick = 1.6;
SideY = 29.0;
SideZ = 7.8;

// Number of fragments (polygon sides) used to render a full circle.
    $fn = 180; // Default = 180  Typical range = 6 - 360
    // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon.
    // Lower the number for faster rendering, raise the number for smoother rendering.


/////////////////////////////
//  Make the part
/////////////////////////////

difference(){ // Upright cube minus screw hole

    translate([0, 0, CubeZ/2])
    cube([CubeX, CubeY, CubeZ], center=true); // Upright cube

    translate([0, 0, CubeZ - BoltDepth/2])
    cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Screw hole

} // End upright cube minus screw hole
//

difference(){ // Angled cube and sides minus screw hole and bottom flat


    union(){ // Angled cube and sides

        translate([0, AngledYOffset, AngledZOffset])
        rotate ([-WedgeAngle, 0,0])
        translate([0, 0, CubeZ/2])
        cube([CubeX, CubeY, CubeZ], center=true); // Angled cube

        translate([(-CubeX/2) + SideThick/2, SideY/2, SideZ/2])
        cube([SideThick, SideY, SideZ], center=true); // Left side

        translate([(CubeX/2) - SideThick/2, SideY/2, SideZ/2])
        cube([SideThick, SideY, SideZ], center=true); // Right side

    } // End angled cube and sides
    //

    translate([0, AngledYOffset, AngledZOffset])
    rotate ([-WedgeAngle, 0,0])
    translate([0, 0, CubeZ - BoltDepth/2])
    cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Screw hole

    translate([0, SideY/2, - CubeZ/2])
    cube([CubeX + 2, SideY + 2, CubeZ], center=true); // Bottom flat

} // End angled cube and sides minus screw hole and bottom flat
//

Telengard Wedge and Drill Template:
Code: [Select]
// Wedge for mounting metal Star Wars yoke housing by Jasonbar. v1.0

// Use #12 x 3/4" sheet metal screws.

/////////////////////////////
//  Define the variables
/////////////////////////////

HousingBaseX = 125; // Metal housing mount base X-axis width (top face of the wedge)
HousingBaseY = 130; // Metal housing mount base Y-axis depth (top face of the wedge)

///////////// Rendered in red /////////////
HousingBoltX = 86; // Metal housing mount bolt hole center-to-center X-axis distance
HousingBoltY = 87; // Metal housing mount bolt hole center-to-center Y-axis distance
HousingBoltXOffset = 0; // Metal housing mount bolt pattern X-axis offset distance from center
HousingBoltYOffset = 0; // Metal housing mount bolt pattern Y-axis offset distance from center

BasePlateX = 125; // Base plate X-axis width (bottom face of the wedge)
BasePlateY = 150; // Base plate Y-axis depth (bottom face of the wedge)

///////////// Rendered in blue /////////////
BasePlateBoltX = 100; // Base plate diamond mount bolt pattern X-axis center-to-center distance
BasePlateBoltY = 120; // Base plate diamond mount bolt pattern Y-axis center-to-center distance from center
BasePlateBoltXOffset = 0; // Base plate diamond mount bolt pattern X-axis offset distance from center
BasePlateBoltYOffset = 0; // Base plate diamond mount bolt pattern Y-axis offset distance

FrontDrop = 70; //  Right angle drop height at front of wedge
BackHeight = 3; //  Height at back of wedge
WedgeAngle = 55;  // Wedge angle

RoundoverDia = 6; // Edge roundover diameter

BoltDia = 5.2; // Bolt hole diameter
BoltDepth = 19; // Bolt hole depth

///////////// Rendered in white /////////////
HollowDia = 50; // Center hollow diameter
HollowScaleX = 1; // X-axis scale for HollowDia
HollowScaleY = 1.5; // Y-axis scale for HollowDia
HollowHeight = 200; // Hollow height
HollowAngle = 30; // Hollow angle

///////////// Rendered in purple /////////////
FrontHollowDia = 35; // Front hollow diameter
FrontHollowScaleX = 1; // X-axis scale for FrontHollowDia
FrontHollowScaleY = 1.6; // Y-axis scale for FrontHollowDia
FrontHollowHeight = 68;  // Front hollow height
FrontHollowOffsetX = 40; // Front hollow X-axis offset from center hollow
FrontHollowOffsetY = -34; // Front hollow Y-axis offset from center hollow

///////////// Rendered in limegreen /////////////
BackHollowDia = 32; // Back hollow diameter
BackHollowScaleX = 1; // X-axis scale for BackHollowDia
BackHollowScaleY = 1.4; // Y-axis scale for BackHollowDia
BackHollowHeight = 35; // Back hollow height
BackHollowOffsetX = 42; // Back hollow X-axis offset from center hollow
BackHollowOffsetY = 28; // Back hollow Y-axis offset from center hollow

DrillTempThick = 3.1; // Drill template thickness


// Number of fragments (polygon sides) used to render a full circle.
    $fn = 180; // Default = 180  Typical range = 6 - 360
    // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon.
    // Lower the number for faster rendering, raise the number for smoother rendering.

/////////////////////////////
// Define modules
/////////////////////////////

module SquareHoles(){

translate([-HousingBoltX/2, -HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Front left

translate([HousingBoltX/2, -HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Front rightt

translate([HousingBoltX/2, HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Back right

translate([-HousingBoltX/2, HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Back left

} // End SquareHoles module
  //

module DiamondHoles(){

translate([0, -BasePlateBoltY/2, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Front

translate([0, BasePlateBoltY/2, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Back

translate([-BasePlateBoltX/2, 0, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Left

translate([BasePlateBoltX/2, 0, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Right

} // End DiamondHoles module
  //

module Label(letter, size=12) {
        rotate ([0, 0, 0]) {
            color("black")
            linear_extrude(height=DrillTempThick/2 + 0.01, convexity=4)
                text(letter,
                     size=size*22/30,
                     font="Bitstream Vera Sans",
                     halign="center",
                     valign="center");
        }
} // End Label module
  //


/////////////////////////////
//  Make the part
/////////////////////////////

difference(){ // Wedge body minus holes and hollows

    hull(){ // Wedge body

        translate([RoundoverDia/2,RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Front left lower corner

        translate([BasePlateX - RoundoverDia/2, RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Front right lower corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Back right lower corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Back left lower corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        sphere (d = RoundoverDia); // Back right upper corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        sphere (d = RoundoverDia); // Back left upper corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, 0])
        sphere (d = RoundoverDia); // Top right upper corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, 0])
        sphere (d = RoundoverDia); // Top left upper corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, -FrontDrop])
        sphere (d = RoundoverDia); // Front right drop corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, -FrontDrop])
        sphere (d = RoundoverDia); // Front left drop corner

    } // End wedge body
//

    color("red")
    translate([BasePlateX/2, BasePlateY - RoundoverDia/2, BackHeight])
    rotate([-WedgeAngle, 0, 0])
    translate([HousingBoltXOffset, HousingBoltYOffset - HousingBaseY/2, RoundoverDia/2])
    SquareHoles(); // Call SquareHoles module

    color("blue")
    translate([BasePlateX/2 + BasePlateBoltXOffset, BasePlateY/2 + BasePlateBoltYOffset, 0])
    DiamondHoles(); // Call the DiamondHoles module

    color("white")
    translate([BasePlateX/2 + BasePlateBoltXOffset, BasePlateY/2 + BasePlateBoltYOffset, 0])
    rotate([-HollowAngle, 0, 0])
    translate([0, 0, HollowHeight/4])
    scale([HollowScaleX, HollowScaleY, 1])
    cylinder (HollowHeight + 0.01, d = HollowDia, center=true); // Center hollow

    color("purple")
    translate([BasePlateX/2 + BasePlateBoltXOffset - FrontHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + FrontHollowOffsetY, FrontHollowHeight/2])
    scale([FrontHollowScaleX, FrontHollowScaleY, 1])
    cylinder (FrontHollowHeight + 0.01, d = FrontHollowDia, center=true); // Front left hollow

    color("purple")
    translate([BasePlateX/2 + BasePlateBoltXOffset + FrontHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + FrontHollowOffsetY, FrontHollowHeight/2])
    scale([FrontHollowScaleX, FrontHollowScaleY, 1])
    cylinder (FrontHollowHeight + 0.01, d = FrontHollowDia, center=true); // Front right hollow

    color("limegreen")
    translate([BasePlateX/2 + BasePlateBoltXOffset - BackHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + BackHollowOffsetY, BackHollowHeight/2])
    scale([BackHollowScaleX, BackHollowScaleY, 1])
    cylinder (BackHollowHeight + 0.01, d = BackHollowDia, center=true); // Back left hollow

    color("limegreen")
    translate([BasePlateX/2 + BasePlateBoltXOffset + BackHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + BackHollowOffsetY, BackHollowHeight/2])
    scale([BackHollowScaleX, BackHollowScaleY, 1])
    cylinder (BackHollowHeight + 0.01, d = BackHollowDia, center=true); // Back right hollow

} // End wedge body minus holes and hollows
  //


translate([-BasePlateX-20, 0, 0]) { // Drill template

    difference(){ // Template base minus drill holes and labels

        hull(){ // Template base

            translate([RoundoverDia/2,RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Front left lower corner

            translate([BasePlateX - RoundoverDia/2, RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Front right lower corner

            translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Back right lower corner

            translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Back left lower corner

        } // End template base
          //

        color("blue")
        translate([BasePlateX/2 + BasePlateBoltXOffset, BasePlateY/2 + BasePlateBoltYOffset, 0])
        DiamondHoles(); // Call the DiamondHoles module

        translate([BasePlateX/2, BasePlateY/2 + 20, DrillTempThick/2])
        Label("SW Yoke Wedge");  // Call the label module for SW Yoke Wedge

        translate([BasePlateX/2, RoundoverDia, DrillTempThick/2])
        Label("Player");  // Call the label module for Player

        translate([BasePlateX/2, BasePlateY - RoundoverDia, DrillTempThick/2])
        Label("Monitor");  // Call the label module for Monitor

    } // End template base minus drill holes and labels
      //

} // End drill template
  //


Scott

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9664
  • Last login:Today at 08:08:00 am
  • Designated spam hunter
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #46 on: May 05, 2025, 12:26:53 am »
Found a problem with one of the variable values.   :embarassed:

The screw holes in the metal housing are not centered on the Y-axis.

Assume that the green rectangle covers the 125 x 130mm HousingBaseX|Y top face of the wedge.

If the metal housing's 86 x 87mm screw holes were centered in the green rectangle (no Y-axis offset), the red and blue lines would both be (130mm - 87mm) / 2 ==> 21.5mm long.

The red line is longer than the blue so the metal housing will sit further down the wedge.
- Looks like the metal housing will run into the panel when the Y-axis is shifted +5.8mm or more off-center.  i.e. the red line is 27.3mm or longer.

How long is the red line, Telengard?

To center the green rectangle on the top/back face of the wedge, put 21.5mm minus the red line length into the variable HousingBoltYOffset. (line 16)
- Looks like the correct value for HousingBoltYOffset should be somewhere around -10.  This will move the screw holes around 10mm closer to the player and keep the metal housing above the control panel surface.


Scott

telengard

  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 784
  • Last login:June 22, 2025, 08:20:45 pm
  • Yeah, it's a classic! 21+ on BYOAC and still goin
    • S T U R C A D E
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #47 on: May 07, 2025, 10:44:15 am »
Heya, I sent a response via PM with a pic.    :cheers:
S T U R C A D E     M.A.M.E. Cabinet
http://www.briansturk.com/mame.html

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9664
  • Last login:Today at 08:08:00 am
  • Designated spam hunter
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #48 on: May 07, 2025, 04:30:58 pm »
Heya, I sent a response via PM with a pic.    :cheers:
I cropped and edited that pic to make the image in my previous post.

I figured that anyone wanting to use this wedge model would need to know how to take certain measurements to calculate the correct value for HousingBoltYOffset. (line 16)

The critical measurement is the red line from the center of the screw hole to the furthest back that the metal housing sides stick out.

Easiest way to measure that distance is to rest a flat edge/ruler across the sides then use calipers to measure from the center of the screw hole to the ruler.

Exactly how long is the red line for your housing?


Scott

telengard

  • Trade Count: (+1)
  • Full Member
  • ***
  • Offline Offline
  • Posts: 784
  • Last login:June 22, 2025, 08:20:45 pm
  • Yeah, it's a classic! 21+ on BYOAC and still goin
    • S T U R C A D E
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #49 on: May 07, 2025, 05:42:11 pm »
Sorry about that, I had posted a pic with the measurements, but dropbox was serving up the older pic.

Here are the measurements

S T U R C A D E     M.A.M.E. Cabinet
http://www.briansturk.com/mame.html

PL1

  • Global Moderator
  • Trade Count: (+1)
  • Full Member
  • *****
  • Offline Offline
  • Posts: 9664
  • Last login:Today at 08:08:00 am
  • Designated spam hunter
Re: New Product: SWYM: Star Wars Yoke Mount
« Reply #50 on: May 07, 2025, 08:12:56 pm »
Here are the measurements
Perfect.   :cheers:

(14mm - 20mm)  / 2 = -3mm

Add another -3mm wiggle room to allow for gravity dragging the housing down/back until the side of the housing screw holes rests against the screws.

The screw holes need to be offset -6mm on the Y-axis (toward the front) so Line 16 is now "HousingBoltYOffset = -6;".

Here's the updated code and a .zip with all of the .scad and .stl files.

Code: [Select]
// Wedge for mounting metal Star Wars yoke housing by Jasonbar. v1.1

// Use #12 x 3/4" sheet metal screws.

/////////////////////////////
//  Define the variables
/////////////////////////////

HousingBaseX = 125; // Metal housing mount base X-axis width (top face of the wedge)
HousingBaseY = 130; // Metal housing mount base Y-axis depth (top face of the wedge)

///////////// Rendered in red /////////////
HousingBoltX = 86; // Metal housing mount bolt hole center-to-center X-axis distance
HousingBoltY = 87; // Metal housing mount bolt hole center-to-center Y-axis distance
HousingBoltXOffset = 0; // Metal housing mount bolt pattern X-axis offset distance from center
HousingBoltYOffset = -6; // Metal housing mount bolt pattern Y-axis offset distance from center

BasePlateX = 125; // Base plate X-axis width (bottom face of the wedge)
BasePlateY = 150; // Base plate Y-axis depth (bottom face of the wedge)

///////////// Rendered in blue /////////////
BasePlateBoltX = 100; // Base plate diamond mount bolt pattern X-axis center-to-center distance
BasePlateBoltY = 120; // Base plate diamond mount bolt pattern Y-axis center-to-center distance from center
BasePlateBoltXOffset = 0; // Base plate diamond mount bolt pattern X-axis offset distance from center
BasePlateBoltYOffset = 0; // Base plate diamond mount bolt pattern Y-axis offset distance

FrontDrop = 70; //  Right angle drop height at front of wedge
BackHeight = 3; //  Height at back of wedge
WedgeAngle = 55;  // Wedge angle

RoundoverDia = 6; // Edge roundover diameter

BoltDia = 5.2; // Bolt hole diameter
BoltDepth = 19; // Bolt hole depth

///////////// Rendered in white /////////////
HollowDia = 50; // Center hollow diameter
HollowScaleX = 1; // X-axis scale for HollowDia
HollowScaleY = 1.5; // Y-axis scale for HollowDia
HollowHeight = 200; // Hollow height
HollowAngle = 30; // Hollow angle

///////////// Rendered in purple /////////////
FrontHollowDia = 35; // Front hollow diameter
FrontHollowScaleX = 1; // X-axis scale for FrontHollowDia
FrontHollowScaleY = 1.6; // Y-axis scale for FrontHollowDia
FrontHollowHeight = 68;  // Front hollow height
FrontHollowOffsetX = 40; // Front hollow X-axis offset from center hollow
FrontHollowOffsetY = -34; // Front hollow Y-axis offset from center hollow

///////////// Rendered in limegreen /////////////
BackHollowDia = 32; // Back hollow diameter
BackHollowScaleX = 1; // X-axis scale for BackHollowDia
BackHollowScaleY = 1.4; // Y-axis scale for BackHollowDia
BackHollowHeight = 35; // Back hollow height
BackHollowOffsetX = 42; // Back hollow X-axis offset from center hollow
BackHollowOffsetY = 28; // Back hollow Y-axis offset from center hollow

DrillTempThick = 3.1; // Drill template thickness


// Number of fragments (polygon sides) used to render a full circle.
    $fn = 180; // Default = 180  Typical range = 6 - 360
    // 6 will render a circular hole as a hexagon, 8 will render a circular hole as an octagon.
    // Lower the number for faster rendering, raise the number for smoother rendering.

/////////////////////////////
// Define modules
/////////////////////////////

module SquareHoles(){

translate([-HousingBoltX/2, -HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Front left

translate([HousingBoltX/2, -HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Front rightt

translate([HousingBoltX/2, HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Back right

translate([-HousingBoltX/2, HousingBoltY/2, -BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Back left

} // End SquareHoles module
  //

module DiamondHoles(){

translate([0, -BasePlateBoltY/2, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Front

translate([0, BasePlateBoltY/2, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Back

translate([-BasePlateBoltX/2, 0, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Left

translate([BasePlateBoltX/2, 0, BoltDepth/2])
cylinder (BoltDepth + 0.1, d = BoltDia, center=true); // Right

} // End DiamondHoles module
  //

module Label(letter, size=12) {
        rotate ([0, 0, 0]) {
            color("black")
            linear_extrude(height=DrillTempThick/2 + 0.01, convexity=4)
                text(letter,
                     size=size*22/30,
                     font="Bitstream Vera Sans",
                     halign="center",
                     valign="center");
        }
} // End Label module
  //


/////////////////////////////
//  Make the part
/////////////////////////////

difference(){ // Wedge body minus holes and hollows

    hull(){ // Wedge body

        translate([RoundoverDia/2,RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Front left lower corner

        translate([BasePlateX - RoundoverDia/2, RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Front right lower corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Back right lower corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, RoundoverDia/8])
        cylinder (RoundoverDia/4, d = RoundoverDia, center=true); // Back left lower corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        sphere (d = RoundoverDia); // Back right upper corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        sphere (d = RoundoverDia); // Back left upper corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, 0])
        sphere (d = RoundoverDia); // Top right upper corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, 0])
        sphere (d = RoundoverDia); // Top left upper corner

        translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, -FrontDrop])
        sphere (d = RoundoverDia); // Front right drop corner

        translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, BackHeight])
        rotate([-WedgeAngle, 0, 0])
        translate([0, -HousingBaseY, -FrontDrop])
        sphere (d = RoundoverDia); // Front left drop corner

    } // End wedge body
//

    color("red")
    translate([BasePlateX/2, BasePlateY - RoundoverDia/2, BackHeight])
    rotate([-WedgeAngle, 0, 0])
    translate([HousingBoltXOffset, HousingBoltYOffset - HousingBaseY/2, RoundoverDia/2])
    SquareHoles(); // Call SquareHoles module

    color("blue")
    translate([BasePlateX/2 + BasePlateBoltXOffset, BasePlateY/2 + BasePlateBoltYOffset, 0])
    DiamondHoles(); // Call the DiamondHoles module

    color("white")
    translate([BasePlateX/2 + BasePlateBoltXOffset, BasePlateY/2 + BasePlateBoltYOffset, 0])
    rotate([-HollowAngle, 0, 0])
    translate([0, 0, HollowHeight/4])
    scale([HollowScaleX, HollowScaleY, 1])
    cylinder (HollowHeight + 0.01, d = HollowDia, center=true); // Center hollow

    color("purple")
    translate([BasePlateX/2 + BasePlateBoltXOffset - FrontHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + FrontHollowOffsetY, FrontHollowHeight/2])
    scale([FrontHollowScaleX, FrontHollowScaleY, 1])
    cylinder (FrontHollowHeight + 0.01, d = FrontHollowDia, center=true); // Front left hollow

    color("purple")
    translate([BasePlateX/2 + BasePlateBoltXOffset + FrontHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + FrontHollowOffsetY, FrontHollowHeight/2])
    scale([FrontHollowScaleX, FrontHollowScaleY, 1])
    cylinder (FrontHollowHeight + 0.01, d = FrontHollowDia, center=true); // Front right hollow

    color("limegreen")
    translate([BasePlateX/2 + BasePlateBoltXOffset - BackHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + BackHollowOffsetY, BackHollowHeight/2])
    scale([BackHollowScaleX, BackHollowScaleY, 1])
    cylinder (BackHollowHeight + 0.01, d = BackHollowDia, center=true); // Back left hollow

    color("limegreen")
    translate([BasePlateX/2 + BasePlateBoltXOffset + BackHollowOffsetX, BasePlateY/2 + BasePlateBoltYOffset + BackHollowOffsetY, BackHollowHeight/2])
    scale([BackHollowScaleX, BackHollowScaleY, 1])
    cylinder (BackHollowHeight + 0.01, d = BackHollowDia, center=true); // Back right hollow

} // End wedge body minus holes and hollows
  //


translate([-BasePlateX-20, 0, 0]) { // Drill template

    difference(){ // Template base minus drill holes and labels

        hull(){ // Template base

            translate([RoundoverDia/2,RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Front left lower corner

            translate([BasePlateX - RoundoverDia/2, RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Front right lower corner

            translate([BasePlateX - RoundoverDia/2, BasePlateY - RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Back right lower corner

            translate([RoundoverDia/2, BasePlateY - RoundoverDia/2, DrillTempThick/2])
            cylinder (DrillTempThick, d = RoundoverDia, center=true); // Back left lower corner

        } // End template base
          //

        color("blue")
        translate([BasePlateX/2 + BasePlateBoltXOffset, BasePlateY/2 + BasePlateBoltYOffset, 0])
        DiamondHoles(); // Call the DiamondHoles module

        translate([BasePlateX/2, BasePlateY/2 + 20, DrillTempThick/2])
        Label("SW Yoke Wedge");  // Call the label module for SW Yoke Wedge

        translate([BasePlateX/2, RoundoverDia, DrillTempThick/2])
        Label("Player");  // Call the label module for Player

        translate([BasePlateX/2, BasePlateY - RoundoverDia, DrillTempThick/2])
        Label("Monitor");  // Call the label module for Monitor

    } // End template base minus drill holes and labels
      //

} // End drill template
  //


Scott