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); } }
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); } }
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); }
public static bool IsInThisWork(object reference) { return(StepWork.GetWork(reference) != null); }
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) { } }