Parallel Guide - Track Connector
const festool_rail_width = 16;
const festool_rail_height = 10.5;
const festool_thread_dia = 7;
const festool_bracket_width = 70;
const ttrack_thread_dia = 6.5;
const ttrack_height = 9.4;
const ttrack_width = 19;
const ttrack_inside_width = 9.2;
const ttrack_inside_depth = 4.5;
const ttrack_inside_bottom_width = 11.7;
const ttrack_bracket_length = 80;
const ttrack_flange = 2.4;
const hole_spacing = 50;
const plate_thickness = 6;
const slop = 0.3;
const slot_width = 2;
const slot_depth = 3;
const festool_track_width = 18.5;
const zero_bar_thickness = 2;
const zero_foot_thickness = 9;
const TTrackRail = Component('ttrack_rail')
.param('length')
.param('connectors', { default: 1 })
.param('slot', { default: false })
.define(({length, slot, connectors}) => {
const slope_plane = planeXZ().translateLocal(0, plate_thickness, 0)
let rail = Cube()
.w(ttrack_width)
.d(length)
.h(plate_thickness)
.build()
.add(
Cube()
.w(ttrack_inside_width)
.d(length)
.h(plate_thickness * 2)
.build()
.translate((ttrack_width - ttrack_inside_width) / 2, 0, 0)
)
.translate(-ttrack_width/2, 0, 0)
.add(
sketch()
.moveTo(0,0)
.lineTo(ttrack_inside_width / 2, ttrack_flange)
.lineTo(
ttrack_inside_bottom_width/2,
ttrack_inside_depth + ttrack_flange
)
.hLine(-ttrack_inside_bottom_width)
.lineTo(-ttrack_inside_width / 2, ttrack_flange)
.close()
.onPlane(slope_plane)
.extrude(-length)
)
rail = rail.cutIf(
slot,
Cube()
.w(slot_width + slop)
.h(slot_depth * 2 + slop)
.d(length * 2)
.centered()
.build()
)
for( let i = 0; i < connectors; i++ ) {
const dist = length -
rail = rail.cutIf(
!slot,
Cube()
.centered()
.w(ttrack_width)
.h(plate_thickness)
.d(20)
.build()
.add(
Cylinder()
.r(ttrack_thread_dia / 2 + slop)
.h(100)
.centered()
.build()
)
.translate(
0,
length / 2,
plate_thickness * 1.5 + ttrack_flange - slop * 2
).show()
)
}
return rail
})
//====== Zero Foot (Start) =======//
Cube()
.w(ttrack_width)
.d(ttrack_bracket_length)
.h(zero_bar_thickness)
.build()
TTrackRail({length: 50}).output()
//====== Zero Foot (End) =======//
//====== Track Bracket (Start) =======//
const slope_plane = planeXZ().translateLocal(0, plate_thickness, 0)
const ttrack_bracket = Cube()
.w(ttrack_width)
.d(ttrack_bracket_length)
.h(plate_thickness)
.build()
.add(
Cube()
.w(ttrack_inside_width)
.d(ttrack_bracket_length)
.h(plate_thickness * 2)
.build()
.translate((ttrack_width - ttrack_inside_width) / 2, 0, 0)
)
.translate(-ttrack_width/2, 0, 0)
.add(
sketch()
.moveTo(0,0)
.lineTo(ttrack_inside_width / 2, ttrack_flange)
.lineTo(ttrack_inside_bottom_width/2, ttrack_inside_depth + ttrack_flange)
.hLine(-ttrack_inside_bottom_width)
.lineTo(-ttrack_inside_width / 2, ttrack_flange)
.close()
.onPlane(slope_plane)
.extrude(-ttrack_bracket_length)
//.show()
)
.subtract(
Cube()
.centered()
.w(ttrack_width)
.h(plate_thickness)
.d(20)
.build()
.add(
Cylinder()
.r(ttrack_thread_dia / 2 + slop)
.h(100)
.centered()
.build()
)
.translate(
0,
ttrack_bracket_length / 2,
plate_thickness * 1.75
)
)
.cut(
Cube()
.w(slot_width + slop)
.h(slot_depth * 2 + slop)
.d(ttrack_bracket_length * 2)
.centered()
.build()
)
//.output()
const festool_bracket = Cube()
.w(festool_bracket_width)
.d(festool_rail_width)
.h(plate_thickness)
.centered()
.build()
.cut(
Cylinder()
.r(festool_thread_dia / 2)
.h(100)
.centered()
.build()
.translate(hole_spacing / 2, 0, 0)
)
.cut(
Cylinder()
.r(festool_thread_dia / 2)
.h(100)
.centered()
.build()
.translate(-hole_spacing / 2, 0, 0)
)
.translate(0, -festool_rail_width / 2, plate_thickness / 2)
//.show()
festool_bracket
.add(ttrack_bracket)
.translate(0,100,0)
.output()
//====== Track Bracket (End) =======//
Updated less than a minute ago