for developers
Sign In
Join
Discussions
Documentation
Tutorials
Examples
Editor
Scene
Import Scene
Export Scene
Load Last Scene
Save Current Scene
Model
Save Model
Upload Model
Show Printability
Render
Preferences
Help
Reference Guide
Examples
Tutorials
Generate
Save Model
Reset Params
Check Model
var params = [ { name: "image", label: "Pattern Image", desc: "Image", type: "uri", defaultVal: "http:\/\/www.shapeways.com\/rrstatic\/img\/shapejs\/creator\/unicursal.png" } ]; var voxelSize = 0.05*MM; function makeImage(path, w,h,d){ var img = new Image3D(path, w,h,d); img.setBlurWidth(0.2*MM); img.setUseGrayscale(false); img.setRounding(0.2*MM); return img; } function makeBail(x0,y0,z0,internalDiameter,thickness, rotateBail) { var R = internalDiameter/2 + thickness/2; var r = thickness/2; var torus = new Torus(x0,y0+internalDiameter/2,z0,R,r); var plane = new Plane(new Vector3d(0,1,0), new Vector3d(x0,y0-r,z0)); var subtract = new Subtraction(torus,plane); if(rotateBail) torus.setTransform(new Rotation(Vector3d(0,1,0),Math.PI/2)); return subtract; } function getSphereBend(fixedRadius, bendAmount){ var center = (fixedRadius*fixedRadius - bendAmount*bendAmount)/(2*bendAmount); var radius = Math.sqrt(center*center + fixedRadius*fixedRadius); var cp = new CompositeTransform(); cp.add(new SphereInversion(new Vector3d(0,0,center), radius)); cp.add(new PlaneReflection(new Vector3d(0,0,1))); return cp; } function getCylinderBend(fixedRadius, bendAmount){ var center = (fixedRadius*fixedRadius - bendAmount*bendAmount)/(2*bendAmount); var radius = Math.sqrt(center*center + fixedRadius*fixedRadius); var cp = new CompositeTransform(); cp.add(new RingWrap(radius)); cp.add(new Translation(0,0,-(center+bendAmount))); return cp; } // TODO: this needs an expand on the image to fix border issues or have Image3D do it automatically function main(args) { // parameters of base image var imagePath = args.image; var imageWidth = 40*MM; var imageHeight = 40*MM; var imageThickness = 2*MM; // parameters of bending var makeSphereBend = true; var makeCylinderBend = false; var bendAmount = 2*MM; // parameters of bail var hasBail = true; var bailHoleSize = 3*MM; var bailThickness = 1*MM; var rotateBail = true; var bailLocation = imageHeight/2 - bailThickness / 5; // make var gridW = imageWidth + 2*MM; // 1 MM margins var gridH = imageHeight + 2*(bailHoleSize + 2*bailThickness); var gridD = imageThickness + 5*bendAmount; var imageBox = makeImage(imagePath, imageWidth, imageHeight, imageThickness); if(makeSphereBend) imageBox.setTransform(getSphereBend(bailLocation,bendAmount)); if(makeCylinderBend) imageBox.setTransform(getCylinderBend(imageWidth/2, bendAmount)); var pendant = imageBox; if(hasBail){ pendant = new Union(); pendant.add(imageBox); var bail = makeBail(0, bailLocation, 0, bailHoleSize, bailThickness, rotateBail); pendant.add(bail); } var bounds = new Bounds(-gridW/2,gridW/2,-gridH/2,gridH/2,-gridD/2,gridD/2); var scene = new Scene(pendant,bounds,voxelSize); return scene; }
Preferences
Close
Printability Check
Region check
Voxel size
Number of regions
Largest region
Close