You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenSCAD模块实例颜色异常:多实例均显示最后设置颜色如何解决?

解决OpenSCAD模块实例颜色统一显示问题

问题根源

你的代码里有两个核心问题导致颜色失效:

  • 第二个实例前的#是OpenSCAD的预览高亮标记,会强制将该几何体显示为高亮色(默认蓝色),直接覆盖你设置的color属性
  • OpenSCAD即时预览模式对difference这类布尔操作的颜色继承支持有限,容易出现颜色被运算逻辑"覆盖"的情况

修复方案

  1. 移除预览高亮符号:删掉第二个实例中的#,让color("blue")能正常生效
  2. 优化颜色作用范围:把颜色逻辑嵌入模块内部,确保颜色能覆盖整个布尔运算后的几何体,避免颜色丢失
  3. 强制实体独立:给不同实例添加微小的Z轴偏移,让OpenSCAD识别为独立实体,避免预览时合并渲染导致颜色统一

修改后的代码

use <pd-gears.scad>
hole_diameter = 85;
mm_per_tooth = 4.8;
number_of_teeth = 60;
thickness = 10;
clearance = 0;
echo(" Outer radius: ", outer_radius(mm_per_tooth, number_of_teeth));
$fn = 60;

module pieSlice(a, r, h) {
  rotate_extrude(angle=a) square([r, h]);
}

module gear_instance(hole_diameter, mm_per_tooth, number_of_teeth, thickness) {
  gear(
    hole_diameter=hole_diameter,
    mm_per_tooth=mm_per_tooth,
    number_of_teeth=number_of_teeth,
    thickness=thickness
  );
}

// 新增颜色参数,让模块直接支持颜色设置
module half_gear(hole_diameter, mm_per_tooth, number_of_teeth, thickness, ccolor="white") {
  color(ccolor) {
    difference() {
      gear_instance(hole_diameter, mm_per_tooth, number_of_teeth, thickness);
      translate([0, 0, -0.5]) {
        rotate(-90) pieSlice(132, 50, 11);
        rotate(42) pieSlice(48, 50, 5);
        rotate(222) translate(v=[0, 0, 6]) pieSlice(48, 50, 5);
      }
    }
  }
}

// 直接传入绿色参数
half_gear(hole_diameter, mm_per_tooth, number_of_teeth, thickness, "green");

// 移除#标记,传入蓝色参数,添加微小偏移确保实体独立
translate([0,0,0.001]) half_gear(hole_diameter, mm_per_tooth, number_of_teeth, thickness, "blue");

补充说明

  • 若不想修改模块,也可以保留外层color()包裹,但必须确保color()完全包含整个half_gear调用,同时移除#标记
  • 渲染模式(按F6)下颜色一定会正常显示,预览模式(按F5)若仍有问题,微小偏移是最直接的解决方法

内容的提问来源于stack exchange,提问作者CArlos R

火山引擎 最新活动