openjscad-aurora-webapp
52 строки · 1.3 Кб
1// title: Four to three (sides)
2// author: Eduard Bespalov
3// license: MIT License
4// description: testing solidFromSlices()
5
6function getParameterDefinitions() {7return [8{ name: 'radius', caption: 'Radius:', type: 'float', default: 10 },9{ name: 'height', caption: 'Height:', type: 'float', default: 35 },10{ name: 'twist', caption: 'Twist:', type: 'int', default: 90}11];12}
13
14function main(params) {15var thing = thingTwisted(params.radius, params.height, params.twist);16return thing;17}
18
19function thingTwisted(radius, height, twistangle) {20twistangle = twistangle || 0;21
22var cag = CAG.fromPoints([23[-radius, -radius, 0],24[radius, -radius, 0],25[radius, radius, 0]26]).expand(2, CSG.defaultResolution2D);27
28var flatBottom = CSG.Polygon.createFromPoints(29cag.getOutlinePaths()[0].points30);31
32var thing = flatBottom.solidFromSlices({33numslices: height34,callback: function(t) {35var coef = 1 - t;36if (coef < 0.01) coef = 0.01;//must not collapse polygon37var h = height * t;38var cag = CAG.fromPoints([39[-radius, -radius, h],40[radius, -radius, h],41[radius * coef, radius, h],42[-radius * coef, radius, h]43]).expand(2, CSG.defaultResolution2D)44.rotate([0,0,0], [0,0,1], twistangle * t);45
46return CSG.Polygon.createFromPoints(47cag.getOutlinePaths()[0].points48).translate([0, 0, h]);49}50});51return thing;52}
53