using Arction.Wpf.ChartingMVVM;
using Arction.Wpf.ChartingMVVM.Axes;
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 Txgy.EWS.Client.PageModule.Models;
using WW.Cad.Model.Entities;
using WW.Cad.Model;
using Color = System.Windows.Media.Color;
using Colors = System.Windows.Media.Colors;
using WW.Cad.IO;
using Arction.Wpf.ChartingMVVM.Annotations;
using Txgy.Microseismic.BaseLib.Models;
using ACadSharp.Entities;
using Txgy.EWS.Client.Common.MessageEvents;
using Prism.Events;
using System.Threading;
using Arction.Wpf.ChartingMVVM.Titles;
using Newtonsoft.Json.Linq;
using System.Windows;
using Action = System.Action;
using SciColorMaps.Portable;
using Txgy.EWS.Client.Models;

namespace Txgy.EWS.Client.PageModule.ViewModels
{
    public class PlanViewModel : BindableBase
    {
        public string eventLayerName = "地震事件";
        public Color eventLayerColor = Colors.Red;
        public Color eventColor = Colors.Red;
        public Color eventTextColor = Colors.Blue;
        public double eventLayerLineWeight = 1;
        public double eventTextSize = 12;
        public string cnstLTypeName = "地震事件2";

        public string CadFilePath { get; set; }
        public SizeDoubleXYZ EventSize;

        //LCPlanModel _lcModel;
        //public CadLineList cadLineList;
        public List<MmEvent> ShowEvents;
        public List<PointLineSeries3D> eventList;

        private ChartTitle _chartTitle;
        
        public ChartTitle ChartTitle
        {
            get { return _chartTitle; }
            set
            {                
                SetProperty(ref _chartTitle, value);
            }
        }


        private double _scale = 1;
        public double Scale
        {
            get { return _scale; }
            set
            {
                SetProperty(ref _scale, value);
            }
        }
        #region LightningChart属性
        private int _widthRS = 2000;
        public int WidthRS
        {
            get { return _widthRS; }
            set
            {
                SetProperty(ref _widthRS, value);
            }
        }
        private int _heightRS = 700;
        public int HeightRS
        {
            get { return _heightRS; }
            set
            {
                SetProperty(ref _heightRS, value);
            }
        }
        private int _depthRS = 2000;
        public int DepthRS
        {
            get { return _depthRS; }
            set
            {
                SetProperty(ref _depthRS, value);
            }
        }
        private double _sideRotationRS = 0;
        public double SideRotationRS
        {
            get { return _sideRotationRS; }
            set
            {
                SetProperty(ref _sideRotationRS, value);
            }
        }
        private double _horizontalRotationRS = 0;
        public double HorizontalRotationRS
        {
            get { return _horizontalRotationRS; }
            set
            {
                SetProperty(ref _horizontalRotationRS, value);
            }
        }
        private double _verticalRotationRS = 90;
        public double VerticalRotationRS
        {
            get { return _verticalRotationRS; }
            set
            {
                //Console.WriteLine(value.ToString());
                SetProperty(ref _verticalRotationRS, value);

            }
        }
        private double _distanceRS = 1300;
        public double DistanceRS
        {
            get { return _distanceRS; }
            set
            {
                //Console.WriteLine(value.ToString());
                SetProperty(ref _distanceRS, value);

            }
        }
        private bool _clipDispaly = true;
        public bool ClipDispaly
        {
            get { return _clipDispaly; }
            set
            {
                SetProperty(ref _clipDispaly, value);
            }
        }
        private WallXZ _bottomWall;
        public WallXZ BottomWall
        {
            get { return _bottomWall; }
            set
            {
                SetProperty(ref _bottomWall, value);
            }
        }
        private AxisX3D _axisXPri3D;
        public AxisX3D AxisXPri3D
        {
            get { return _axisXPri3D; }
            set
            {
                SetProperty(ref _axisXPri3D, value);
            }
        }
        private AxisY3D _axisYPri3D;
        public AxisY3D AxisYPri3D
        {
            get { return _axisYPri3D; }
            set
            {
                SetProperty(ref _axisYPri3D, value);
            }
        }
        private AxisZ3D _axisZPri3D;
        public AxisZ3D AxisZPri3D
        {
            get { return _axisZPri3D; }
            set
            {
                SetProperty(ref _axisZPri3D, value);
            }
        }
        private ProjectionType _projectionTypeRS = ProjectionType.Orthographic;
        public ProjectionType ProjectionTypeRS
        {
            get { return _projectionTypeRS; }
            set
            {
                SetProperty(ref _projectionTypeRS, value);
            }
        }
        private Fill _chartBackGround = new Fill();

        public Fill ChartBackGround
        {
            get { return _chartBackGround; }
            set
            {
                SetProperty(ref _chartBackGround, value);
            }
        }
        public Light3DCollection Lights { get; set; }
        public Polygon3DCollection Polygons { get; set; }
        public PointLineSeries3DCollection ChartPointLineCollection { get; set; }
        public Annotation3DCollection ChartAnnotationCollection { get; set; }
        public List<PointLineSeries3D> cadImage3DList { get; set; }
        #endregion

        public PlanViewModel(IEventAggregator ea)
        {
            ////Color _color = Color.FromName(_colorName);
            //CadFilePath = GlobalConfig.ProjectConfig.CadFileName;
            ////_lcModel = new LCPlanModel();

            //_chartBackGround.GradientFill = GradientFill.Solid;
            //_chartBackGround.GradientColor = Colors.White;

            //_chartTitle = new ChartTitle();
            //_chartTitle.Text = "平面视图";
            //_bottomWall = new WallXZ();
            //_bottomWall.Material = new Material3D() { DiffuseColor = Color.FromArgb(0, 248, 248, 255) };
            //_bottomWall.SetGridStripColor1(Color.FromArgb(0, 248, 248, 255));
            //_bottomWall.SetGridStripColor2(Color.FromArgb(0, 248, 248, 255));
            //Lights = View3D.CreateDefaultLights();
            //Lights[1].Location.SetValues((GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin) / 2f, 100,
            //    (GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin) / 2f);
           
            //WidthRS = (int)((GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin) / Scale);
            //HeightRS = (int)((GlobalConfig.ProjectConfig.WorkArea.ZMax - GlobalConfig.ProjectConfig.WorkArea.ZMin) / Scale);
            //DepthRS = (int)((GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin) / Scale);

            ////AxisXPri3D = new AxisX3D();
            ////AxisXPri3D.Minimum = 0;
            ////AxisXPri3D.Maximum = (GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin) / Scale;
            //////AxisXPri3D.MajorDiv = 0.5;
            ////AxisXPri3D.Title.Text = "横轴";
            ////AxisXPri3D.LabelsVisible = true;
            ////AxisXPri3D.LabelsColor = Colors.Black;
            ////AxisXPri3D.Orientation = PlaneXAxis3D.XZ;
            ////AxisXPri3D.Location = AxisXLocation3D.BottomFront;
            ////AxisXPri3D.LabelsNumberFormat = "00000000";

            ////AxisYPri3D = new AxisY3D();
            ////AxisYPri3D.Minimum = (GlobalConfig.ProjectConfig.WorkArea.ZMin / Scale);
            ////AxisYPri3D.Maximum = (GlobalConfig.ProjectConfig.WorkArea.ZMax / Scale);
            ////AxisYPri3D.Reversed = true;
            ////AxisYPri3D.LabelsColor = Colors.Black;
            //////AxisYPri3D.Visible = false;

            ////AxisZPri3D = new AxisZ3D();
            ////AxisZPri3D.Minimum = 0;
            ////AxisZPri3D.Maximum = (GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin) / Scale;
            //////AxisZPri3D.MajorDiv = 0.5;
            ////AxisZPri3D.Title.Text = "纵轴";
            ////AxisZPri3D.Orientation = PlaneZAxis3D.XZ;
            ////AxisZPri3D.Location = AxisZLocation3D.BottomRight;
            ////AxisZPri3D.LabelsColor = Colors.Black;
            ////AxisZPri3D.LabelsNumberFormat = "0000000";

            //AxisXPri3D = new AxisX3D();
            //AxisXPri3D.Maximum = GlobalConfig.ProjectConfig.WorkArea.EMax / Scale;
            //AxisXPri3D.Minimum = GlobalConfig.ProjectConfig.WorkArea.EMin / Scale;

            ////AxisXPri3D.Maximum = (GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin) / Scale;

            ////AxisXPri3D.MajorDiv = 500;
            ////AxisXPri3D.MajorDivCount = 1;
            //AxisXPri3D.Title.Text = "横轴";
            //AxisXPri3D.Title.Visible = false;

            //AxisXPri3D.LabelsColor = Colors.Black;
            //AxisXPri3D.LabelsNumberFormat = "00000000";
            //AxisXPri3D.AutoFormatLabels = false;
            //AxisXPri3D.Orientation = PlaneXAxis3D.XZ;
            //AxisXPri3D.Location = AxisXLocation3D.TopFront;

            //AxisYPri3D = new AxisY3D();
            //AxisYPri3D.Maximum = 30;
            //AxisYPri3D.Minimum = 0;
            //AxisYPri3D.Visible = false;

            //AxisZPri3D = new AxisZ3D();
            //AxisZPri3D.Maximum = GlobalConfig.ProjectConfig.WorkArea.NMax / Scale;
            //AxisZPri3D.Minimum = GlobalConfig.ProjectConfig.WorkArea.NMin / Scale;

            ////AxisZPri3D.Maximum = (GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin) / Scale;
            ////AxisZPri3D.MajorDiv = 500;
            ////AxisZPri3D.MajorDivCount = 1;
            //AxisZPri3D.Title.Text = "纵轴";
            //AxisZPri3D.Title.Visible = false;

            //AxisZPri3D.LabelsColor = Colors.Black;
            //AxisZPri3D.LabelsNumberFormat = "0000000";
            //AxisZPri3D.AutoFormatLabels = false;
            //AxisZPri3D.Orientation = PlaneZAxis3D.XZ;
            //AxisZPri3D.Location = AxisZLocation3D.TopRight;

           
            ////Polygons = _lcModel.CreatePolygons();
            //ChartPointLineCollection = new PointLineSeries3DCollection();
            //ChartAnnotationCollection = new Annotation3DCollection();
            //CreateBackgroudByDwg();

            //EventSize = new SizeDoubleXYZ(GlobalConfig.eventDSize*20, GlobalConfig.eventDSize*20, GlobalConfig.eventDSize * 20);
            //ShowEvents = new List<MmEvent>();
            //_ea = ea;
            //this._ea.GetEvent<UpdateEventsMessage>().Subscribe(u =>
            //{               
            //    CreateEventList();
            //});
            //CreateEventList();
        }
        public void CreateBackgroudByDwg()
        {
            cadImage3DList = new List<PointLineSeries3D>();
            DxfModel model = DwgReader.Read(CadFilePath);
            //try
            {
                Color color = Colors.Black;
                double lineWidth = 0.05;
                int lineStyle = 1;
                bool closeLine = true;
                foreach (var item in model.Layers)
                {
                    if (item.Enabled)
                    {
                        //CadLinePropertyModel clpm = CadLineList.LineProperties.Find(lp => lp.Name == item.Name);
                        CadLinePropertyModel clpm = null;
                        if (clpm != null)
                        {
                            color = clpm.LineColor;
                            lineWidth = clpm.LineWidth;
                            closeLine = clpm.CloseLine;
                            //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.Layer.Name == "埋深线")
                                    //{
                                    //    Console.WriteLine("埋深线："+entity.EntityType);
                                    //}
                                    //if (entity.Layer.Name=="巷道集合")
                                    //{
                                    //    Console.WriteLine(entity.EntityType);
                                    //}
                                    if (entity.EntityType == "POLYLINE")
                                    {
                                        List<SeriesPoint3D> points = new List<SeriesPoint3D>();
                                        foreach (var point in ((DxfPolyline3D)entity).Vertices)
                                        {
                                            //double x = (point.X - GlobalConfig.BaseX) / Scale;
                                            //double y = (point.Y - GlobalConfig.BaseY) / Scale;
                                            double x = (point.X) / Scale;
                                            double y = (point.Y) / Scale;
                                            points.Add(new SeriesPoint3D(x, clpm.LayerHeight, y, color));
                                        }
                                        cadImage3DList.Add(CreateDxfLwPolyline("cad-" + item.Name, entity.ToString()
                                            , false, lineStyle, lineWidth, points.ToArray(), closeLine));
                                    }
                                    if (entity.EntityType == "LWPOLYLINE")
                                    {
                                        List<SeriesPoint3D> points = new List<SeriesPoint3D>();
                                        foreach (var point in ((DxfLwPolyline)entity).Vertices)
                                        {
                                            //double x = (point.X - GlobalConfig.BaseX) / Scale;
                                            //double y = (point.Y - GlobalConfig.BaseY) / Scale;
                                            double x = (point.X) / Scale;
                                            double y = (point.Y) / Scale;
                                            points.Add(new SeriesPoint3D(x, clpm.LayerHeight, y, color));
                                        }
                                        cadImage3DList.Add(CreateDxfLwPolyline("cad-" + item.Name, entity.ToString()
                                            , false, lineStyle, lineWidth, points.ToArray(), closeLine));
                                    }

                                    if (entity.EntityType == "TEXT")
                                    {
                                        DxfText et = (DxfText)entity;
                                        //if (item.Name.Contains("台站"))
                                        //{
                                        //    ChartAnnotationCollection.Add(CreateDxfText(((DxfText)entity), "cad-text", 12, clpm.LayerHeight));

                                        //}
                                        if (et.AlignmentPoint1.X >= GlobalConfig.ProjectConfig.WorkArea.EMin &&
                                            et.AlignmentPoint1.X <= GlobalConfig.ProjectConfig.WorkArea.EMax &&
                                            et.AlignmentPoint1.Y >= GlobalConfig.ProjectConfig.WorkArea.NMin &&
                                            et.AlignmentPoint1.Y <= GlobalConfig.ProjectConfig.WorkArea.EMax)
                                        {
                                            //Console.WriteLine($"R:{((DxfText)entity).Color.R}\tG:{((DxfText)entity).Color.G}\tB:{((DxfText)entity).Color.B}");

                                            ChartAnnotationCollection.Add(CreateDxfText(((DxfText)entity), "cad-text", 12, clpm.LayerHeight));
                                        }

                                    }
                                    if (entity.EntityType== "MTEXT")
                                    {
                                        DxfMText et = (DxfMText)entity;
                                        
                                        //if (et.AlignmentPoint1.X >= GlobalConfig.ProjectConfig.WorkArea.EMin &&
                                        //    et.AlignmentPoint1.X <= GlobalConfig.ProjectConfig.WorkArea.EMax &&
                                        //    et.AlignmentPoint1.Y >= GlobalConfig.ProjectConfig.WorkArea.NMin &&
                                        //    et.AlignmentPoint1.Y <= GlobalConfig.ProjectConfig.WorkArea.EMax)
                                        {                                          
                                            ChartAnnotationCollection.Add(CreateDxfMText(et, "cad-text", 12, clpm.LayerHeight));
                                        }
                                    }
                                }
                            }

                            //if (entitys != null)
                            //{

                            //    foreach (var entity in entitys)
                            //    {
                            //        if (entity.EntityType == "LWPOLYLINE" || (item.Name == "埋深線" && (entity.EntityType == "POLYLINE" || entity.EntityType == "HATCH")))
                            //        {
                            //            List<SeriesPoint3D> points = new List<SeriesPoint3D>();
                            //            //Console.WriteLine($"线宽：{item.LineWeight}\t颜色：{entity.Color.ToString()}");
                            //            //if (item.Name == "埋深線")
                            //            //{
                            //            //    Console.WriteLine(entity.EntityType);
                            //            //    if (entity.EntityType== "HATCH")
                            //            //    {
                            //            //        DxfHatch dh=(DxfHatch)entity;
                            //            //        DxfText dt = new DxfText();
                            //            //        dt.Text=dh.Name;
                            //            //        dt.AlignmentPoint1 = new WW.Math.Point3D(dh.ElevationPoint.X, dh.ElevationPoint.Y, 0);
                            //            //        Console.WriteLine($"name:{dh.Name}\t{dh.ElevationPoint.X}\t{dh.ElevationPoint.Y}");
                            //            //        if (dt.AlignmentPoint1.X >= GlobalConfig.ProjectConfig.WorkArea.EMin &&
                            //            //            dt.AlignmentPoint1.X <= GlobalConfig.ProjectConfig.WorkArea.EMax &&
                            //            //            dt.AlignmentPoint1.Y >= GlobalConfig.ProjectConfig.WorkArea.NMin &&
                            //            //            dt.AlignmentPoint1.Y <= GlobalConfig.ProjectConfig.WorkArea.EMax)
                            //            //        {                                                   
                            //            //            ChartAnnotationCollection.Add(CreateDxfText(dt, "cad-text", 12, clpm.LayerHeight));
                            //            //        }
                            //            //    }
                            //            //    else 
                            //            if (entity.EntityType == "POLYLINE")
                            //            {
                            //                foreach (var point in ((DxfPolyline3D)entity).Vertices)
                            //                {
                            //                    //double x = (point.X - GlobalConfig.BaseX) / Scale;
                            //                    //double y = (point.Y - GlobalConfig.BaseY) / Scale;
                            //                    double x = (point.X) / Scale;
                            //                    double y = (point.Y) / Scale;
                            //                    points.Add(new SeriesPoint3D(x, clpm.LayerHeight, y, color));
                            //                }
                            //            }
                            //            //}
                            //            else
                            //            {
                            //                foreach (var point in ((DxfLwPolyline)entity).Vertices)
                            //                {
                            //                    //double x = (point.X - GlobalConfig.BaseX) / Scale;
                            //                    //double y = (point.Y - GlobalConfig.BaseY) / Scale;
                            //                    double x = (point.X) / Scale;
                            //                    double y = (point.Y) / Scale;
                            //                    points.Add(new SeriesPoint3D(x, clpm.LayerHeight, y, color));
                            //                }
                            //            }

                            //            cadImage3DList.Add(CreateDxfLwPolyline("cad-" + item.Name, entity.ToString()
                            //                , false, lineStyle, lineWidth, points.ToArray(), closeLine));
                            //        }
                            //        //if (entity.EntityType == "TEXT" && (item.Name == "等高线-20"
                            //        //    || item.Name == "目标监测区"
                            //        //    || item.Name == "N1100台站位置（设计位置）"))
                            //        //if (entity.EntityType == "TEXT" && GlobalConfig.DwgLayersDisplay.Contains(item.Name))
                            //        if (entity.EntityType == "TEXT")
                            //        {
                            //            DxfText et = (DxfText)entity;
                            //            if (et.AlignmentPoint1.X >= GlobalConfig.ProjectConfig.WorkArea.EMin &&
                            //                et.AlignmentPoint1.X <= GlobalConfig.ProjectConfig.WorkArea.EMax &&
                            //                et.AlignmentPoint1.Y >= GlobalConfig.ProjectConfig.WorkArea.NMin &&
                            //                et.AlignmentPoint1.Y <= GlobalConfig.ProjectConfig.WorkArea.EMax)
                            //            {
                            //                //Console.WriteLine($"R:{((DxfText)entity).Color.R}\tG:{((DxfText)entity).Color.G}\tB:{((DxfText)entity).Color.B}");

                            //                ChartAnnotationCollection.Add(CreateDxfText(((DxfText)entity), "cad-text", 12, clpm.LayerHeight));
                            //            }

                            //        }
                            //    }
                            //    //Console.WriteLine(entitys.Count());

                            //}
                            //Console.WriteLine(item.Model.Entities.Count);
                        }
                    }
                }
                ChartPointLineCollection.AddRange(cadImage3DList);
            }
            //catch (Exception ex)
            //{
            //    Console.WriteLine(ex.Message);
            //}
        }        
        public void CreateEventList()
        {
            if (!GlobalData.AppendEvent)
            {
                List<PointLineSeries3D> newCollection = ChartPointLineCollection.ToList();
                //Console.WriteLine(newCollection.Count);
                newCollection.RemoveAll(x => x.Title.Text.Contains("微地震事件"));
                //Console.WriteLine(newCollection.Count);
                ChartPointLineCollection.Clear();
                ChartPointLineCollection.AddRange(newCollection);
                ChartPointLineCollection.ToList().RemoveAll(x => x.Title.Text.Contains("微地震事件"));
            }
            //if (GlobalData.DisplayEvents.Count > 0)
            if (GlobalData.SearchEvents.Count > 0)
            {
                eventList = new List<PointLineSeries3D>();
                PointLineSeries3D pls3d = new PointLineSeries3D();
                pls3d.Title.Text = "微地震事件";
                pls3d.Tag = "mm-event";
                pls3d.IndividualPointColors = true;
                pls3d.IndividualPointSizes = true;
                pls3d.LineVisible = false;
                pls3d.AllowUserInteraction = true;
                pls3d.PointsVisible = true;
                pls3d.PointStyle.Shape3D = PointShape3D.Sphere;
                pls3d.PointStyle.Size3D = EventSize;
                List<SeriesPoint3D> sp3List = new List<SeriesPoint3D>();
                //SeriesPoint3D[] sp3s = new SeriesPoint3D[GlobalData.EventResults.Count];
                foreach (var item in GlobalData.SearchEvents)
                {
                    //if (item.Y>38397500 && item.Y<38398200)
                    {
                        //float sizeFactor = (float)(((4f + item.ML) / (4f)) * 0.6f) + 0.4f;
                        float sizeFactor = (float)(((4f + item.ML) / (4f)) * 2f) + 0.1f;
                        int colorIndex = (int)(((item.Z - GlobalConfig.ProjectConfig.WorkArea.ZMin) 
                            / Math.Abs(GlobalConfig.ProjectConfig.WorkArea.ZMax - GlobalConfig.ProjectConfig.WorkArea.ZMin)) 
                            * GlobalConfig.ColorCountDefault);
                        Color ec = GlobalConfig.eventDepthColor[colorIndex];

                        sp3List.Add(new SeriesPoint3D((item.Y) / Scale, 20, (item.X) / Scale, ec, sizeFactor));
                    }
                    
                }
                pls3d.AddPoints(sp3List.ToArray(), true);
                ChartPointLineCollection.Add(pls3d);
               
            }
        }
        public PointLineSeries3D EventModel2Pls3d(MmEvent mm)
        {
            PointLineSeries3D pls3d = new PointLineSeries3D();
            pls3d.Title.Text = mm.EventTimeStr;
            pls3d.Tag = "mm-event";
            pls3d.IndividualPointColors = true;
            pls3d.IndividualPointSizes = true;
            pls3d.LineVisible = false;
            pls3d.AllowUserInteraction = true;
            pls3d.PointsVisible = true;
            pls3d.PointStyle.Shape3D = PointShape3D.Sphere;
            pls3d.PointStyle.Size3D = EventSize;
            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;
        }
        public Annotation3D CreateDxfText(DxfText dxfText, string tag, double fontSize, double layerHeight)
        {
            Annotation3D at3d = new Annotation3D();
            at3d.Tag = tag;
            at3d.Style = AnnotationStyle.Rectangle;
            at3d.AllowUserInteraction = false;
            at3d.BorderVisible = false;
            at3d.Shadow.Visible = false;
            at3d.Visible = true;
            at3d.Fill.Style = RectFillStyle.None;
            at3d.TextStyle.Color = Dc2Mc(dxfText.Color);
            at3d.TextStyle.Font = new WpfFont("微软雅黑", fontSize);
            at3d.Text = dxfText.Text;
            //at3d.TargetAxisValues = new PointDoubleXYZ((dxfText.AlignmentPoint1.X- GlobalConfig.BaseX)/Scale, 40, 
            //    (dxfText.AlignmentPoint1.Y- GlobalConfig.BaseY)/Scale);
            at3d.LocationCoordinateSystem = CoordinateSystem.AxisValues;
            at3d.LocationAxisValues.SetValues((dxfText.AlignmentPoint1.X) / Scale, layerHeight,
               (dxfText.AlignmentPoint1.Y) / Scale);
            //at3d.LocationAxisValues.SetValues((dxfText.AlignmentPoint1.X - GlobalConfig.BaseX) / Scale, layerHeight,
            //    (dxfText.AlignmentPoint1.Y - GlobalConfig.BaseY) / Scale);
            at3d.Anchor.SetValues(0.5, 0.5);
            return at3d;
        }
        public Annotation3D CreateDxfMText(DxfMText dxfText, string tag, double fontSize, double layerHeight)
        {
            Annotation3D at3d = new Annotation3D();
            at3d.Tag = tag;
            at3d.Style = AnnotationStyle.Rectangle;
            at3d.AllowUserInteraction = false;
            at3d.BorderVisible = false;
            at3d.Shadow.Visible = false;
            at3d.Visible = true;
            at3d.Fill.Style = RectFillStyle.None;
            at3d.TextStyle.Color = Colors.Blue;
            //at3d.TextStyle.Color = Dc2Mc(dxfText.Color);
            at3d.TextStyle.Font = new WpfFont("微软雅黑", fontSize);
            at3d.Text = dxfText.Text;
            at3d.LocationCoordinateSystem = CoordinateSystem.AxisValues;
            at3d.LocationAxisValues.SetValues((dxfText.InsertionPoint.X) / Scale, layerHeight,
               (dxfText.InsertionPoint.Y) / Scale);
            //at3d.LocationAxisValues.SetValues((dxfText.InsertionPoint.X - GlobalConfig.BaseX) / Scale, layerHeight,
            //    (dxfText.InsertionPoint.Y - GlobalConfig.BaseY) / Scale);
            at3d.Anchor.SetValues(0.5, 0.5);
            return at3d;
        }
        /// <summary>
        /// dxfColor2MediaColor
        /// </summary>
        /// <param name="en"></param>
        /// <returns></returns>
        public static Color Dc2Mc(EntityColor en)
        {
            return Color.FromRgb(en.R, en.G, en.B);
        }
    }    
}
