title=CAD|code=
<nowiki>//</nowiki> Here we define the user editable parameters:
function getParameterDefinitions() {
return [[
| { type: 'float', name: 'beam_width', caption: 'Beam width', default: 40 },
{ type: 'float', name: 'hole_radius', caption: 'Radius of holes', default: 6 },
{ type: 'choice', name: 'length', caption: 'Frame length (holes)', values: [2,3,4,5,10,15,20,25,30,40,50]], captions: [["2","3","4","5","10","15","20","25","30","40","50"]], default: 10 }
];
}
<nowiki>//</nowiki> zBeam(length) - create a vertical bitbeam strut 'length' long
<nowiki>//</nowiki> xBeam(length) - create a horizontal bitbeam strug along the X axis
<nowiki>//</nowiki> yBeam(length) - create a horizontal bitbeam strut along the Y axis
<nowiki>//</nowiki> translateBeam(beam, [[x,|y, z]]) - translate bitbeam struts in X, Y, or Z axes in units 'beam_width'
var cylresolution=16;
var beam_width=38;
var hole_radius=8;
function main(params) {
cylresolution=(params.quality == "1")? 64:16;
beam_width=params.beam_width;
hole_radius=params.hole_radius;
return zBeam(params.length);
}
function xHole(i) {
return CSG.cylinder( {
start: [[-1,|beam_width/2, i*beam_width + beam_width/2]],
end: [[beam_width+1,|beam_width/2, i*beam_width + beam_width/2]],
radius: hole_radius,
resolution: cylresolution
} );
}
function yHole(i) {
return CSG.cylinder( {
start: [[beam_width/2,|-1, i*beam_width + beam_width/2]],
end: [[beam_width/2,|beam_width+1, i*beam_width + beam_width/2]],
radius: hole_radius,
resolution: cylresolution
} );
}
function zBeam(length) {
var cube = CSG.cube({
center: [[beam_width/2,|beam_width/2, (length*beam_width)/2]],
radius: [[beam_width/2,|beam_width/2, (length*beam_width)/2]]
});
var holes = [[]];
for (var i = 0; i < length; i++)
{
holes.push(xHole(i));
holes.push(yHole(i));
}
var beam = cube.subtract(holes);
beam.properties.myConnector = new CSG.Connector([[10,|0, 0]], [[1,|0, 0]], [[0,|0, 1]]);
return beam;
}
function yBeam(length) {
return translateBeam(zBeam(length).rotateX(-90), [[0,0,1]]);
}
function xBeam(length) {
return translateBeam(zBeam(length).rotateY(90), [[0,0,1]]);
}
function translateBeam(beam, t_vector) {
return beam.translate(t_vector.map(function(n) { return beam_width*n; }));
}