Hook demo updated
This commit is contained in:
parent
07475364a6
commit
cd14082786
|
@ -69,13 +69,13 @@ and use the <a href="processfile.html"><b>OpenJsCad parser</b></a>. For more inf
|
||||||
// Here we define the user editable parameters:
|
// Here we define the user editable parameters:
|
||||||
function getParameterDefinitions() {
|
function getParameterDefinitions() {
|
||||||
return [
|
return [
|
||||||
{ name: 'topdiameter', caption: 'Inner diameter of top hook:', type: 'float', default: 10 },
|
{ name: 'topdiameter', caption: 'Inner diameter of top hook:', type: 'float', default: 16.7 },
|
||||||
{ name: 'clampfactor', caption: 'Snugness of top hook (0 - 100):', type: 'float', default: 20 },
|
{ name: 'clampfactor', caption: 'Snugness of top hook (0 - 100):', type: 'float', default: 25 },
|
||||||
{ name: 'cliplength', caption: 'Top hook clip length:', type: 'float', default: 5 },
|
{ name: 'cliplength', caption: 'Top hook clip length:', type: 'float', default: 5 },
|
||||||
{ name: 'bottomdiameter', caption: 'Inner diameter of bottom hook:', type: 'float', default: 15 },
|
{ name: 'bottomdiameter', caption: 'Inner diameter of bottom hook:', type: 'float', default: 20 },
|
||||||
{ name: 'height', caption: 'Outer height of the hook:', type: 'float', default: 50 },
|
{ name: 'height', caption: 'Outer height of the hook:', type: 'float', default: 60 },
|
||||||
{ name: 'thickness', caption: 'Thickness:', type: 'float', default: 5 },
|
{ name: 'thickness', caption: 'Thickness:', type: 'float', default: 5 },
|
||||||
{ name: 'width', caption: 'Width:', type: 'float', default: 10 },
|
{ name: 'width', caption: 'Width:', type: 'float', default: 7 },
|
||||||
{
|
{
|
||||||
name: 'rounded',
|
name: 'rounded',
|
||||||
type: 'choice',
|
type: 'choice',
|
||||||
|
@ -84,13 +84,17 @@ function getParameterDefinitions() {
|
||||||
captions: ["No", "Yes (rendering will take a long time!)"],
|
captions: ["No", "Yes (rendering will take a long time!)"],
|
||||||
default: 0,
|
default: 0,
|
||||||
},
|
},
|
||||||
{ name: 'roundness', caption: 'Diameter of rounded edges (if enabled):', type: 'float', default: 1 },
|
{ name: 'roundness', caption: 'Diameter of rounded edges (if enabled):', type: 'float', default: 1.5 },
|
||||||
|
{ name: 'buildwidth', caption: 'Width (x) of build area (to print multiple copies):', type: 'float', default: 90 },
|
||||||
|
{ name: 'builddepth', caption: 'Depth (y) of build area (to print multiple copies):', type: 'float', default: 90 },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
function main(params) {
|
function main(params) {
|
||||||
|
if(OpenJsCad.log) OpenJsCad.log("start");
|
||||||
|
|
||||||
var pathresolution = 16;
|
var pathresolution = 16;
|
||||||
var expandresolution = 16;
|
var expandresolution = 6;
|
||||||
|
|
||||||
// construct the 2D path:
|
// construct the 2D path:
|
||||||
var topradius = params.topdiameter/2;
|
var topradius = params.topdiameter/2;
|
||||||
|
@ -162,17 +166,44 @@ function main(params) {
|
||||||
path = path.transform(matrix);
|
path = path.transform(matrix);
|
||||||
|
|
||||||
// extrude the path to create a 3D solid
|
// extrude the path to create a 3D solid
|
||||||
var result = path.rectangularExtrude(2*(halfthickness-roundness), params.width-2*roundness, pathresolution, true);
|
var hook = path.rectangularExtrude(2*(halfthickness-roundness), params.width-2*roundness, pathresolution, true);
|
||||||
result = result.translate([0, 0, -params.width/2+roundness]);
|
hook = hook.translate([0, 0, -params.width/2+roundness]);
|
||||||
|
|
||||||
// expand to create rounded corners:
|
// expand to create rounded corners:
|
||||||
if(roundness > 0)
|
if(roundness > 0)
|
||||||
{
|
{
|
||||||
result = result.expand(roundness, expandresolution);
|
hook = hook.expand(roundness, expandresolution);
|
||||||
|
}
|
||||||
|
// hook = hook.toPointCloud(0.1);
|
||||||
|
|
||||||
|
// determine how many objects will fit in the build area:
|
||||||
|
var bounds = hook.getBounds();
|
||||||
|
var objsize = bounds[1].minus(bounds[0]);
|
||||||
|
var margin = 5; // distance between the copies
|
||||||
|
var numx = Math.floor((params.buildwidth + margin) / (objsize.x + margin));
|
||||||
|
var numy = Math.floor((params.builddepth + margin) / (objsize.y + margin));
|
||||||
|
if(numx < 1) numx = 1;
|
||||||
|
if(numy < 1) numy = 1;
|
||||||
|
|
||||||
|
// and make the copies:
|
||||||
|
var result = new CSG();
|
||||||
|
for(var x = 0; x < numx; x++)
|
||||||
|
{
|
||||||
|
var deltax = ((1-numx)/2+x) * (objsize.x + margin);
|
||||||
|
var colresult = new CSG();
|
||||||
|
for(var y = 0; y < numy; y++)
|
||||||
|
{
|
||||||
|
var deltay = ((1-numy)/2+y) * (objsize.y + margin);
|
||||||
|
var translated = hook.translate(new CSG.Vector3D(deltax, deltay, 0));
|
||||||
|
colresult = colresult.union(translated);
|
||||||
|
}
|
||||||
|
result = result.union(colresult);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(OpenJsCad.log) OpenJsCad.log("finish");
|
||||||
return result;
|
return result;
|
||||||
}</textarea><br>
|
}
|
||||||
|
</textarea><br>
|
||||||
<input type="submit" value="Update" onclick="updateSolid(); return false;">
|
<input type="submit" value="Update" onclick="updateSolid(); return false;">
|
||||||
<br><br>
|
<br><br>
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Reference in a new issue