更改由螺旋工具包加载的 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

我找到解决办法了。我不知道为什么,但将model.Children[0]更改为model.Children[1]解决了问题。

现在模型显示,材质颜色改变。

最新更新