using ACadSharp.Tables; using Arction.Wpf.ChartingMVVM; using Arction.Wpf.ChartingMVVM.Series3D; using Arction.Wpf.ChartingMVVM.Views.View3D; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using Txgy.EWS.Client.Common; using WW.Cad.IO; using WW.Cad.Model; using Colors = System.Windows.Media.Colors; using Color = System.Windows.Media.Color; using WW.Cad.Model.Objects; using WW.Cad.Model.Entities; namespace Txgy.EWS.Client.PageModule.Models { public class LCPlanModel : BindableBase { public string CadFilePath { get; set; } public LCPlanModel() { //CadFilePath = AppDomain.CurrentDomain.BaseDirectory + "\\resources\\" + GlobalConfig.ProjectConfig.CadFileName; CadFilePath = GlobalConfig.ProjectConfig.CadFileName; } public List CreateBackgroudByDwg() { List dwgSeries = new List(); DxfModel model = DwgReader.Read(CadFilePath); try { Color color = Colors.Black; double lineWidth = 0.05; int lineStyle = 0; bool closeLine = true; foreach (var item in model.Layers) { switch (item.Name) { case "N1100台站位置(实际位置)": break; case "等高线-20": color = Color.FromRgb(192, 192, 192); lineWidth = 0.1; lineStyle = 1; closeLine = false; break; case "边界线": color = Color.FromRgb(255, 0, 255); lineWidth = 0.1; lineStyle = 1; closeLine = true; break; case "工作面标记": color = Colors.LightGray; lineWidth = 0.1; lineStyle = 1; closeLine = true; break; case "断层": color = Colors.Red; lineWidth = 0.03; lineStyle = 1; closeLine = true; break; } if (item.Enabled) { //Console.WriteLine($"名称:{item.Name}\t开关:{item.Enabled.ToString()}\t线宽:{item.LineWeight}\t线型:{item.LineType.Name}"); var entitys = model.Entities.Where(et => et.Layer.Name == item.Name); if (entitys != null) { foreach (var entity in entitys) { if (entity.EntityType== "LWPOLYLINE") { //Console.WriteLine($"线宽:{item.LineWeight}\t颜色:{entity.Color.ToString()}"); List points = new List(); foreach (var point in ((DxfLwPolyline)entity).Vertices) { double x = (point.X - GlobalConfig.BaseX) / 1000f; double y = (point.Y - GlobalConfig.BaseY) / 1000f; points.Add(new SeriesPoint3D(x, 50, y, color)); } dwgSeries.Add(CreateDxfLwPolyline(item.Name, entity.ToString(), false, lineStyle, lineWidth, points.ToArray(), closeLine)); } if (entity.EntityType=="TEXT") { Console.WriteLine(1); } } //Console.WriteLine(entitys.Count()); } //Console.WriteLine(item.Model.Entities.Count); } } //foreach (var item in model.Entities) //{ // if (item.Layer.Enabled) // { // Console.WriteLine(item.EntityType); // switch (item.EntityType) // { // case "LWPOLYLINE": // switch (item.Layer.Name) // { // case "N1100台站位置(实际位置)": // break; // case "等高线-20": // color = Color.FromRgb(192, 192, 192); // lineWidth = 0.1; // lineStyle = 1; // closeLine = false; // break; // case "边界线": // color = Color.FromRgb(255, 0, 255); // lineWidth = 0.1; // lineStyle = 1; // closeLine = true; // break; // case "工作面标记": // color = Colors.LightGray; // lineWidth = 0.1; // lineStyle = 1; // closeLine = true; // break; // case "断层": // color = Colors.Red; // lineWidth = 0.03; // lineStyle = 1; // closeLine = true; // break; // } // break; // } // List points = new List(); // foreach (var point in ((DxfLwPolyline)item).Vertices) // { // double x = (point.X - GlobalConfig.BaseX) / 100f; // double y = (point.Y - GlobalConfig.BaseY) / 100f; // points.Add(new SeriesPoint3D(x, 50, y, color)); // } // dwgSeries.Add(CreateDxfLwPolyline(item.Layer.Name, item.ToString(), false, lineStyle, lineWidth, points.ToArray(), closeLine)); // } // //if (item.EntityType == "LWPOLYLINE" && // // (item.Layer.Name == "巷道集合" // // || item.Layer.Name == "工作面标记" // // || item.Layer.Name == "断层" // // || item.Layer.Name == "边界线" // // || item.Layer.Name == "等高线-20" // // || item.Layer.Name == "N1100台站位置(实际位置)")) // //{ // // if (item.Layer.Name == "N1100台站位置(实际位置)") // // { // // //color = Color.FromRgb(192, 192, 192); // // //lineWidth = 0.1; // // //lineStyle = 1; // // //closeLine = false; // // Console.WriteLine(item.EntityType.ToString()); // // } // // if (item.Layer.Name == "等高线-20") // // { // // color = Color.FromRgb(192, 192, 192); // // lineWidth = 0.1; // // lineStyle = 1; // // closeLine = false; // // } // // if (item.Layer.Name=="边界线") // // { // // color = Color.FromRgb(255,0,255); // // lineWidth = 0.1; // // lineStyle = 1; // // } // // if (item.Layer.Name == "工作面标记") // // { // // color = Colors.LightGray; // // lineWidth = 0.1; // // lineStyle = 1; // // } // // else if (item.Layer.Name == "断层") // // { // // color = Colors.Red; // // lineWidth = 0.03; // // lineStyle = 1; // // } // // //Console.WriteLine(entcnt++); // // //int cnt = ((DxfLwPolyline)item).Vertices.Count; // // //int num = 0; // // //SeriesPoint3D[] points3 = new SeriesPoint3D[cnt]; // // //foreach (var item2 in ((DxfLwPolyline)item).Vertices) // // //{ // // // double x = (item2.X - GlobalConfig.BaseX) / 100f; // // // double y = (item2.Y - GlobalConfig.BaseY) / 100f; // // // points3[num] = new SeriesPoint3D(x, 50, y, color); // // // //Console.WriteLine($"ID:{item2.Id}\tX:{x}\tY:{y}"); // // // num++; // // // //Console.WriteLine($"ID:{item2.Id}\tPosition:{item2.Position}\tX:{item2.X}\tY:{item2.Y}\tBulge{item2.Bulge}"); // // //} // // //PointLineSeries3D seriesMultiColorLine = new PointLineSeries3D(); // // //seriesMultiColorLine.Title.Text = "Multi-color line"; // // //seriesMultiColorLine.MultiColorLine = true; // // //seriesMultiColorLine.AllowUserInteraction = true; // // //seriesMultiColorLine.PointsVisible = false; // // //seriesMultiColorLine.LineStyle.LineOptimization = (LineOptimization)lineStyle; // // //seriesMultiColorLine.LineStyle.Width = lineWidth; // // //seriesMultiColorLine.Points = points3; // // //seriesMultiColorLine.ClosedLine= closeLine; // //} //} } catch (Exception ex) { Console.WriteLine(ex.Message); } return dwgSeries; } public List CreateCadImage3DList() { List pls3ds = new List(); //for (int i = 0; i < 20; i++) //{ pls3ds.Add(CreatePointLine3D("i", "cad", new SeriesPoint3D[] { new SeriesPoint3D(10,10,10), new SeriesPoint3D(100,20,20), new SeriesPoint3D(120,30,30), new SeriesPoint3D(40,40,1), new SeriesPoint3D(50,50,4), new SeriesPoint3D(60,60,8), }, 1, 1)); //} return pls3ds; } /// /// Create collection of polygons /// /// internal Polygon3DCollection CreatePolygons() { List polygons = new List(5); Polygon3DCollection polygon3Ds = new Polygon3DCollection(); polygons.Add( CreatePolygon("Polygon A", Colors.Magenta, new Polygon3DPoint[] { new Polygon3DPoint(0,0), new Polygon3DPoint(0,10), new Polygon3DPoint(8,10), new Polygon3DPoint(8,8), new Polygon3DPoint(4,8), new Polygon3DPoint(3,7), new Polygon3DPoint(3,0), }, 0, 20)); polygons.Add(CreatePolygon("Polygon B", Colors.Orange, new Polygon3DPoint[] { new Polygon3DPoint(4,8), new Polygon3DPoint(8,8), new Polygon3DPoint(8,6), new Polygon3DPoint(3,6), new Polygon3DPoint(3,7), }, 0, 30)); polygons.Add(CreatePolygon("Polygon C", Colors.MistyRose, new Polygon3DPoint[] { new Polygon3DPoint(3,6), new Polygon3DPoint(8,6), new Polygon3DPoint(8,2), new Polygon3DPoint(5,2), new Polygon3DPoint(6,4), new Polygon3DPoint(3,4), }, 0, 15)); polygons.Add(CreatePolygon("Polygon D", Colors.CornflowerBlue, new Polygon3DPoint[] { new Polygon3DPoint(3,4), new Polygon3DPoint(6,4), new Polygon3DPoint(5,2), new Polygon3DPoint(8,2), new Polygon3DPoint(8,0), new Polygon3DPoint(3,0), }, 0, 25)); Color color = Colors.Aquamarine; polygons.Add(CreatePolygon("Polygon E", Color.FromArgb(100, color.R, color.G, color.B), new Polygon3DPoint[] { new Polygon3DPoint(8, 10), new Polygon3DPoint(6, 7.5), new Polygon3DPoint(7.5, 3), new Polygon3DPoint(10, 4), new Polygon3DPoint(9, 9), }, 10, 40)); polygon3Ds.AddRange(polygons); return polygon3Ds; } /// /// Create polygons /// /// /// /// /// /// /// private static Polygon3D CreatePolygon(string title, Color color, Polygon3DPoint[] edgePoints, double minY, double maxY) { Polygon3D polygon = new Polygon3D(); polygon.Material.DiffuseColor = color; polygon.Material.DiffuseColor = color; polygon.Points = edgePoints; polygon.YMin = minY; polygon.YMax = maxY; return polygon; } private static PointLineSeries3D CreatePointLine3D(string title, string tag, SeriesPoint3D[] seriesPoint3Ds, int lineStyle, double lineWidth) { PointLineSeries3D pls3d = new PointLineSeries3D { Tag = tag, Points = seriesPoint3Ds, PointsVisible = true, MultiColorLine = true, AllowUserInteraction = true }; pls3d.LineStyle.LineOptimization = (LineOptimization)lineStyle; pls3d.LineStyle.Width = lineWidth; pls3d.Points = seriesPoint3Ds; return pls3d; } public static PointLineSeries3D CreateDxfLwPolyline(string tag, string title, bool allowUser, int lineStyle, double lineWidth, SeriesPoint3D[] points, bool closeLine) { PointLineSeries3D pls3d = new PointLineSeries3D(); pls3d.Tag = tag; pls3d.Title.Text = title; pls3d.MultiColorLine = true; pls3d.AllowUserInteraction = allowUser; pls3d.PointsVisible = false; pls3d.LineStyle.LineOptimization = (LineOptimization)lineStyle; pls3d.LineStyle.Width = lineWidth; pls3d.Points = points; pls3d.ClosedLine = closeLine; return pls3d; } } }