印章制作工坊
导航切换
首页
帮助
开启全屏
图片反转
模糊度
阀值
function getParameterDefinitions() { return [ { name:'stamp_width', caption: '印章宽度', type: 'float', initial: 40.0 }, { name:'stamp_elevation', caption: '印章高度', type: 'float', initial: 1.5 }, { name:'margin', caption: '印章边距', type: 'float', initial: 0.5 }, { name:'base_thickness', caption: '底座厚度', type: 'float', initial: 0 } ]; } function main(params) { var paths_array = [[8, 8, 2]]; var input_width = paths_array[0][0]; var input_height = paths_array[0][1]; var tVersion = paths_array[0][2]; var dispo_width = params.stamp_width - 2*params.margin; var sTrace = dispo_width/input_width; var stamp_height = input_height*sTrace + 2*params.margin; var i, len, j, l, poly; var stamp = new CSG(); for (i=1, len=paths_array.length; i < len; i++) { poly = [paths_array[i][1][0]]; for (j=1, l=paths_array[i][1].length; j < l; j++) { point = paths_array[i][1][j]; if (point[0] === undefined && point[1] === undefined) continue; if (point[0] == poly[poly.length -1][0] && point[1] == poly[poly.length -1][1]) continue; if (! alreadyInPath(poly, point)) { poly.push(point); } } if (paths_array[i][0] == 1) { stamp = stamp.union(scale(sTrace, linear_extrude({height:(params.stamp_elevation+params.base_thickness)/sTrace}, polygon(poly)))); } else { stamp = stamp.subtract(scale(sTrace, linear_extrude({height:(params.stamp_elevation+params.base_thickness)/sTrace}, polygon(poly)))); } } stamp = stamp.translate([-sTrace*input_width/2, -sTrace*input_height/2, 0]); stamp = stamp.setColor(0.5, 0.5, 0.6); stamp = stamp.scale([-1, -1, 1]); if (params.base_thickness > 0){ var base = CSG.cube({radius: [params.stamp_width/2, stamp_height/2, params.base_thickness/2]}); base = base.translate([0, 0, params.base_thickness/2]); base = base.setColor(0.75, 0.75, 0.85); return base.union(stamp); } return stamp; } function alreadyInPath(pArray, pPoint) { for (var i=0, l=pArray.length; i < l; i++) { if (pPoint[0] == pArray[i][0] && pPoint[1] == pArray[i][1]) { return true; } } return false; }