コード例 #1
0
        public Model3D GetModel3D()
        {
            try
            {
                var ret = new Model3DGroup();

                using (var currentWork = new StepWork("Create 3D Mode", this)
                {
                    MaxSteps = GeometryModel3DList.Count
                })
                {
                    foreach (var item in GeometryModel3DList)
                    {
                        var geometryModel3D = item.CreateGeometryModel3D();

                        if (geometryModel3D != null)
                        {
                            ret.Children.Add(geometryModel3D);
                        }

                        currentWork.CurrentStep++;
                    }
                }
                return(ret);
            }
            catch (Exception)
            {
                return(null);
            }
        }
コード例 #2
0
ファイル: MainWindow.xaml.cs プロジェクト: zhaozehong/WPF_3D
        public DPGeometryModel3DGroup LoadModel3DGroup(string xamlFile)
        {
            try
            {
                using (var fileStream = new FileStream(xamlFile, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    using (var currentWork = new StepWork("Load 3D Mode", fileStream)
                    {
                        MaxSteps = fileStream.Length
                    })
                    {
                        using (var reader = new XmlTextReader(fileStream))
                        {
                            if (!MoveToNextNode(reader, XmlNodeType.Element, "Model3DGroup"))
                            {
                                return(null);
                            }

                            var ret = new DPGeometryModel3DGroup();

                            if (!reader.IsEmptyElement)
                            {
                                while (true)
                                {
                                    var geometryModel3D = LoadGeometryModel3D(reader);
                                    if (geometryModel3D == null)
                                    {
                                        break;
                                    }

                                    ret.GeometryModel3DList.Add(geometryModel3D);

                                    currentWork.CurrentStep = fileStream.Position;
                                }
                            }

                            reader.Close();

                            return(ret);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
コード例 #3
0
        public DPGeometryModel3DGroup GetSimplifiedGeometryModel3DGroup(UInt32 resolution)
        {
            var bounds = GetBounds();

            if (bounds.IsEmpty)
            {
                return(null);
            }
            if (Double.IsNaN(bounds.SizeX) || Double.IsNaN(bounds.SizeY) || Double.IsNaN(bounds.SizeZ))
            {
                return(null);
            }

            var max      = Math.Max(bounds.SizeX, bounds.SizeY);
            var unitSize = Math.Max(max, bounds.SizeZ) / resolution;

            var ret = new DPGeometryModel3DGroup();

            using (var currentWork = new StepWork("Compress 3D Mode", this)
            {
                MaxSteps = GeometryModel3DList.Count
            })
            {
                foreach (var item in GeometryModel3DList)
                {
                    var geometryModel3D = item.GetSimplifiedGeometryModel3D(unitSize);

                    if (geometryModel3D != null)
                    {
                        ret.GeometryModel3DList.Add(geometryModel3D);
                    }

                    currentWork.CurrentStep++;
                }
            }

            return(ret);
        }
コード例 #4
0
 public static bool IsInThisWork(object reference)
 {
     return(StepWork.GetWork(reference) != null);
 }
コード例 #5
0
        public void SaveToFile(string filePathName)
        {
            try
            {
                using (var fileStream = new FileStream(filePathName, FileMode.Create, FileAccess.Write, FileShare.None))
                {
                    using (var currentWork = new StepWork("Save 3D Mode to file", this)
                    {
                        MaxSteps = GeometryModel3DList.Count
                    })
                    {
                        var writer = new XmlTextWriter(fileStream, Encoding.ASCII);
                        writer.Formatting = Formatting.Indented;

                        writer.WriteStartElement("Model3DGroup", @"http://schemas.microsoft.com/winfx/2006/xaml/presentation");
                        foreach (var item in GeometryModel3DList)
                        {
                            writer.WriteStartElement("GeometryModel3D");

                            #region GeometryModel3D.Geometry

                            writer.WriteStartElement("GeometryModel3D.Geometry");

                            #region MeshGeometry3D

                            writer.WriteStartElement("MeshGeometry3D");
                            writer.WriteAttributeString("Positions", item.GetPositionsString());
                            writer.WriteAttributeString("Normals", item.GetNormalsString());
                            writer.WriteAttributeString("TriangleIndices", item.GetTriangleIndicesString());
                            writer.WriteEndElement();

                            #endregion

                            writer.WriteEndElement();

                            #endregion

                            #region GeometryModel3D.MaterialColor

                            writer.WriteStartElement("GeometryModel3D.Material");
                            writer.WriteStartElement("DiffuseMaterial");
                            writer.WriteStartElement("DiffuseMaterial.Brush");
                            writer.WriteStartElement("SolidColorBrush");
                            writer.WriteAttributeString("Color", item.MaterialColor.ToString());
                            writer.WriteEndElement();
                            writer.WriteEndElement();
                            writer.WriteEndElement();
                            writer.WriteEndElement();

                            #endregion

                            #region GeometryModel3D.BackMaterialColor

                            writer.WriteStartElement("GeometryModel3D.BackMaterial");
                            writer.WriteStartElement("DiffuseMaterial");
                            writer.WriteStartElement("DiffuseMaterial.Brush");
                            writer.WriteStartElement("SolidColorBrush");
                            writer.WriteAttributeString("Color", item.BackMaterialColor.ToString());
                            writer.WriteEndElement();
                            writer.WriteEndElement();
                            writer.WriteEndElement();
                            writer.WriteEndElement();

                            #endregion

                            writer.WriteEndElement();

                            currentWork.CurrentStep++;
                        }
                        writer.WriteEndElement();

                        writer.Close();
                    }
                }
            }
            catch (Exception)
            {
            }
        }