首页 > 解决方案 > 更改 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;
        }

标签: c#wpfhelix-3d-toolkit

解决方案


Model3DGroup包含一组GeometryModel3D. 材料属性在GeometryModel3D. 你需要改变GeometryModel3D.Material


推荐阅读