c# - 更改 helix 工具包加载的 STL 模型的颜色(材质)。无法从 Model3DGroup 转换为 GeometryModel3D
问题描述
我想更改从 .stl 文件加载的 3D 模型的颜色。
问题是它被加载为 Model3DGroup。Model3DGroup 没有允许更改颜色的属性材料。我试图将 Model3DGroup 转换为 GeometryModel3D (它具有材料属性)。转换后几何为空,视口不显示任何内容。
我可以在这段代码中改进什么以便能够从 stl 文件更改模型的颜色?也许还有其他方法可以做到吗?
我在这里发现了类似的问题也没有解决方案,所以这次也许有人可以提供帮助。 Helix 3d-toolkit 显示的 .STL 模型颜色变化
XAML:
<helix:HelixViewport3D x:Name="viewPort3d" ZoomExtentsWhenLoaded="True">
<helix:DefaultLights/>
<ModelVisual3D x:Name="ViewPortModel" Content="{Binding Actual3dModel}"/>
</helix:HelixViewport3D>
C#:
private Model3DGroup actual3dModel;
public Model3DGroup Actual3dModel
{
get {
return actual3dModel;
}
set
{
actual3dModel = value;
OnPropertyChanged("Actual3dModel");
}
}
private void LoadModel()
{
var importer = new HelixToolkit.Wpf.ModelImporter();
var model = importer.Load("Assets/Model.stl");
var m0 = (MeshGeometry3D)((GeometryModel3D)model.Children[0]).Geometry;
var outsideMaterial = MaterialHelper.CreateMaterial(Colors.Red, 0.1);
var insideMaterial = MaterialHelper.CreateMaterial(Colors.Blue);
var modelGroup = new Model3DGroup();
modelGroup.Children.Add(new GeometryModel3D { Geometry = m0, Material = outsideMaterial, BackMaterial = insideMaterial });
Actual3dModel = modelGroup;
}
也以这种方式尝试过(再次显示空模型)。
private void LoadModel2()
{
this.dispatcher = Dispatcher.CurrentDispatcher;
var loader = new ModelImporter();
var model = loader.Load("Assets/Model.stl", this.dispatcher);
GeometryModel3D gmodel = model.Children[0] as GeometryModel3D;
DiffuseMaterial material = new DiffuseMaterial(new SolidColorBrush(Colors.Red));
gmodel.Material = material;
gmodel.BackMaterial = material;
var modelGroup = new Model3DGroup();
modelGroup.Children.Add(gmodel);
Actual3dModel = modelGroup;
}
解决方案
Model3DGroup
包含一组GeometryModel3D
. 材料属性在GeometryModel3D
. 你需要改变GeometryModel3D.Material
。
推荐阅读
- java - 微服务:没有使用 Spring API 网关的服务发现
- python - TypeError:需要一个类似字节的对象,而不是 'str' 'xxx';'xxx'
- python - Tokenizer() 中相同频率词的排名标准和 Tokenizer().texts_to_matrix() 在 Keras 中的工作
- python - TF Object Detection API:将指标保存到磁盘
- bash - 如何在 /bin/dash 中模拟“${@:2}”
- laravel - 在laravel中查询具有多个条件的数据库的有效方法
- random-forest - 在带有预处理的 GridSearchCV 管道中使用 SMOTEENN
- unit-testing - kotlin 中的单元测试无法返回值
- flutter - 有没有办法在不使用 dart 循环的情况下找到两个列表之间的唯一值
- python - 如何在 django 中使用模型表单编辑对象?