如何在OpenSCAD中创建精准匹配数据比例的3D饼图
OpenSCAD 自定义3D饼图实现方案
你之前用$fn=3的三角截面圆柱拼接的方案,本质是用固定120度的三角块硬凑,只能拼出固定占比的分块,根本无法适配任意数据比例,直接自定义扇形切片模块是最灵活的实现方式,不需要依赖低精度圆柱拼接。
核心实现逻辑
- 先将所有数据值换算为占总数值的比例,再映射为0~360度对应的圆心角
- 封装通用饼图切片模块,支持自定义切片角度、半径、厚度,直接生成标准扇形柱体
- 按顺序累加角度放置每个切片,给不同切片绑定对应颜色即可
可直接运行的完整代码
// 全局参数配置 $fn = 24; // 圆弧渲染精度 pie_r = 10; // 饼图半径 pie_h = 2; // 饼图厚度 // 单个饼图切片模块 module pie_slice(angle, radius=pie_r, height=pie_h) { angle_step = 1; // 圆弧采样步长,值越小边缘越平滑 shape_points = [[0, 0]]; for(a = [0:angle_step:angle]) { shape_points = concat( shape_points, [ [radius * cos(a), radius * sin(a)] ] ); } linear_extrude(height=height) polygon(shape_points); } // 填入你的数据集,格式为[数值, 颜色] dataset = [ [30, "red"], [25, "blue"], [20, "green"], [25, "purple"] ]; // 自动计算占比生成饼图 total_val = sum([for(item=dataset) item[0]]); current_rotate = 0; for(d = dataset) { slice_val = d[0]; slice_color = d[1]; slice_angle = slice_val / total_val * 360; color(slice_color) rotate([0, 0, current_rotate]) pie_slice(angle=slice_angle); current_rotate += slice_angle; }
方案优势
- 适配任意占比的数据集,不需要手动计算坐标、旋转角度硬凑位置,修改
dataset里的数值即可自动生成对应比例的饼图 - 渲染精度可控,不会出现低分辨率圆柱的明显棱角
- 扩展方便:如果需要做突出显示的分离式饼图,只要在对应切片的
rotate之后,沿切片中线方向加对应偏移量的translate即可;如果需要加标注、抬升切片效果也可以直接在模块基础上修改。
另外注意你原有代码第一行的语法错误:fn=$24是错误写法,全局精度声明应该是$fn=24,美元符号要写在fn前面。
内容的提问来源于stack exchange,提问作者Ben Freeman
相关产品推荐
相关产品推荐

