更改 helix 工具包加载的 STL 模型的颜色 (material)。无法从 Model3DGroup 转换为 GeometryModel3D
Change color (material) of STL model loaded by helix toolkit. Can't convert from Model3DGroup to GeometryModel3D
我想更改从 .stl 文件加载的 3D 模型的颜色。
问题是它作为 Model3DGroup 加载。 Model3DGroup 没有允许更改颜色的 属性 material。
我试图将 Model3DGroup 转换为 GeometryModel3D(它有 material 属性)。转换后几何图形为空,视口什么也没有显示。
为了能够从 stl 文件更改模型的颜色,我可以在此代码中改进什么?也许还有其他方法可以做到?
我在这里也发现了类似的问题,但没有解决方案,所以也许这次有人可以提供帮助。
Helix 3d-toolkit Displayed .STL model color change
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
。 Material 属性 在 GeometryModel3D
中。您需要更改 GeometryModel3D.Material
.
我找到了解决方案。
我不知道为什么,但将 model.Children[0]
更改为 model.Children[1]
解决了问题。
现在显示模型并且 material 颜色已更改。
我想更改从 .stl 文件加载的 3D 模型的颜色。
问题是它作为 Model3DGroup 加载。 Model3DGroup 没有允许更改颜色的 属性 material。 我试图将 Model3DGroup 转换为 GeometryModel3D(它有 material 属性)。转换后几何图形为空,视口什么也没有显示。
为了能够从 stl 文件更改模型的颜色,我可以在此代码中改进什么?也许还有其他方法可以做到?
我在这里也发现了类似的问题,但没有解决方案,所以也许这次有人可以提供帮助。 Helix 3d-toolkit Displayed .STL model color change
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
。 Material 属性 在 GeometryModel3D
中。您需要更改 GeometryModel3D.Material
.
我找到了解决方案。
我不知道为什么,但将 model.Children[0]
更改为 model.Children[1]
解决了问题。
现在显示模型并且 material 颜色已更改。