示例#1
0
        public RoadInfoItemModel GetRoadItemInfo(MText text)
        {
            RoadInfoItemModel item = new RoadInfoItemModel();

            item.RoadLength = "";
            item.RoadWidth  = "";
            item.RoadType   = "";
            item.ColorIndex = "";

            using (Transaction tran = CadHelper.Instance.Database.TransactionManager.StartTransaction())
            {
                item.RoadName         = text.Text.Replace(" ", "").Replace(" ", "").Replace("\r", "").Replace("\n", "");
                item.RoadNameLocaiton = new List <System.Drawing.PointF>();
                double textLen    = text.TextHeight * item.RoadName.Length + text.LineSpaceDistance * (item.RoadName.Length - 1);
                double partLength = textLen / item.RoadName.Length;

                for (int j = 1; j < item.RoadName.Length + 1; j++)
                {
                    item.RoadNameLocaiton.Add(MethodCommand.GetEndPointByTrigonometricHu(text.Rotation, MethodCommand.Point3d2Pointf(text.Location), partLength * j));
                }

                item.RoadNameLayer = text.Layer;
                item.RoadNameType  = "text";
            }
            return(item);
        }
示例#2
0
        public RoadInfoItemModel GetRoadItemInfo(Polyline line, List <DBText> txtList, List <Polyline> sectionLineList, List <DBText> sectionTextList)
        {
            RoadInfoItemModel item = new RoadInfoItemModel();

            item.RoadLength = line.Length.ToString();
            item.RoadWidth  = line.ConstantWidth.ToString();
            item.RoadType   = "polyline";
            item.ColorIndex = line.ColorIndex == 256 ? MethodCommand.GetLayerColorByID(line.LayerId) : System.Drawing.ColorTranslator.ToHtml(line.Color.ColorValue);
            item.roadList   = PolylineMethod.GetPolyLineInfoPt(line);
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db  = doc.Database;

            using (Transaction tran = db.TransactionManager.StartTransaction())
            {
                int vtnum = line.NumberOfVertices;
                for (int i = 0; i < vtnum - 1; i++)
                {
                    foreach (DBText mText in txtList)
                    {
                        if (item.RoadName != null)
                        {
                            break;
                        }
                        Point2d pt = mText.AlignmentPoint.Convert2d(new Plane());



                        if (PolylineMethod.PtInPolyLine(pt, line.GetPoint2dAt(i), line.GetPoint2dAt(i + 1), 20) == 1)
                        {
                            item.RoadName         = mText.TextString.Replace(" ", "").Replace(" ", "");
                            item.RoadNameLocaiton = new List <System.Drawing.PointF>();
                            item.sectionList      = new List <RoadSectionItemModel>();

                            double middleLen  = MethodCommand.DistancePointToPoint(mText.Position, mText.AlignmentPoint);
                            double textLen    = MethodCommand.GetEndLengthByTheorem(middleLen, mText.Height / 2) * 2;
                            double partLength = textLen / item.RoadName.Length;

                            for (int j = 1; j < item.RoadName.Length + 1; j++)
                            {
                                item.RoadNameLocaiton.Add(MethodCommand.GetEndPointByTrigonometricHu(mText.Rotation, MethodCommand.Point3d2Pointf(mText.Position), partLength * j));
                            }

                            item.RoadNameLayer = mText.Layer;
                            item.RoadNameType  = "text";

                            break;
                        }
                    }
                    //获取横截面


                    foreach (Polyline pl in sectionLineList)
                    {
                        for (int j = 0; j < pl.NumberOfVertices; j++)
                        {
                            double dic = MethodCommand.DistancePointToSegment(pl.GetPoint2dAt(j), line.GetPoint2dAt(i), line.GetPoint2dAt(i + 1));
                            if (dic < 60)
                            {
                                RoadSectionItemModel modelsc = new RoadSectionItemModel();
                                modelsc.Line = AutoCad2ModelTools.Polyline2Model(pl);
                                DBText secMtext = MethodCommand.FindMTextIsInPolyineForPipe(pl, sectionTextList);
                                if (secMtext != null)
                                {
                                    modelsc.SectionName = AutoCad2ModelTools.DbText2Model(secMtext);
                                }
                                item.sectionList.Add(modelsc);
                            }
                        }
                    }
                }

                item.isDashed = MethodCommand.GetLayerLineTypeByIDEx(line);

                item.individualName   = "";
                item.individualFactor = "";
                item.individualCode   = "";
                item.individualStage  = "";

                // 增加个体编码、个体要素、个体名称
                System.Data.DataTable tb = Method.AutoGenerateNumMethod.GetAllPolylineNumsEx(line);
                if (tb.Rows != null && tb.Rows.Count > 0)
                {
                    foreach (System.Data.DataRow row in tb.Rows)
                    {
                        if ((string)row["多段线id"] == line.Id.Handle.Value.ToString())
                        {
                            item.individualName   = (string)row["个体名称"];
                            item.individualFactor = (string)row["个体要素"];
                            item.individualCode   = (string)row["个体编码"];
                            item.individualStage  = (string)row["个体阶段"];
                        }
                    }
                }
                return(item);
            }
        }
示例#3
0
        private void GetSpecialDataRowInfo(List <object> list, DataTable tb, string layerName)
        {
            if (list != null && list.Count > 0)
            {
                if (list[0] is RoadInfoItemModel)
                {
                    DataColumn dc  = new DataColumn("道路名称");
                    DataColumn dc1 = new DataColumn("道路长度");
                    DataColumn dc2 = new DataColumn("道路宽度");
                    DataColumn dc3 = new DataColumn("线颜色");

                    if (!tb.Columns.Contains("道路名称"))
                    {
                        tb.Columns.Add(dc);
                    }
                    if (!tb.Columns.Contains("道路长度"))
                    {
                        tb.Columns.Add(dc1);
                    }
                    //if (!tb.Columns.Contains("道路宽度"))
                    //{
                    //    tb.Columns.Add(dc2);
                    //}
                    if (!tb.Columns.Contains("线颜色"))
                    {
                        tb.Columns.Add(dc3);
                    }


                    for (int i = 0; i < list.Count; i++)
                    {
                        int     colNum = 1;
                        DataRow dr     = tb.NewRow();
                        dr[0] = layerName;

                        if (list[i] is RoadInfoItemModel)
                        {
                            RoadInfoItemModel road = list[i] as RoadInfoItemModel;
                            dr["道路名称"] = road.RoadName == null ? "" : road.RoadName;
                            dr["道路长度"] = road.RoadLength == null ? "" : road.RoadLength;
                            dr["线颜色"]  = road.ColorIndex;
                            for (int j = 0; j < road.roadList.Count; j++)
                            {
                                DataColumn dc5 = new DataColumn("Point" + (j + 1));
                                if (!tb.Columns.Contains("Point" + (j + 1)))
                                {
                                    tb.Columns.Add(dc5);
                                }
                                dr[("Point" + (j + 1))] = "X:" + road.roadList[j].X + ",Y:" + road.roadList[j].Y;
                            }
                            if (road.sectionList != null && road.sectionList.Count > 0)
                            {
                                DataColumn dc5 = new DataColumn("横截面类型");

                                if (!tb.Columns.Contains("横截面类型"))
                                {
                                    tb.Columns.Add(dc5);
                                }

                                for (int j = 0; j < road.sectionList.Count; j++)
                                {
                                    DataColumn dc51 = new DataColumn("横截面文本位置" + (j + 1));

                                    if (!tb.Columns.Contains("横截面文本位置" + (j + 1)))
                                    {
                                        tb.Columns.Add(dc51);
                                    }
                                    dr[("横截面类型")]             = road.sectionList[j].SectionName.Text;
                                    dr[("横截面文本位置" + (j + 1))] = "X:" + road.sectionList[j].SectionName.Position.X + ",Y:" + road.sectionList[j].SectionName.Position.Y;
                                    PolyLineModel lmm = road.sectionList[j].Line;
                                    DataColumn    dc6 = new DataColumn("横截面线段起点" + (j + 1));
                                    if (!tb.Columns.Contains("横截面线段起点" + (j + 1)))
                                    {
                                        tb.Columns.Add(dc6);
                                    }
                                    DataColumn dc61 = new DataColumn("横截面线段终点" + (j + 1));
                                    if (!tb.Columns.Contains("横截面线段终点" + (j + 1)))
                                    {
                                        tb.Columns.Add(dc61);
                                    }
                                    for (int z = 0; z < lmm.Vertices.Count; z++)
                                    {
                                        LineModel ff = (LineModel)lmm.Vertices[z];

                                        dr[("横截面线段起点" + (j + 1))] = "X:" + ff.StartPoint.X + ",Y:" + ff.StartPoint.Y;
                                        dr[("横截面线段终点" + (j + 1))] = "X:" + ff.EndPoint.X + ",Y:" + ff.EndPoint.Y;
                                    }
                                }
                            }
                        }
                        tb.Rows.Add(dr);
                    }
                }

                if (list[0] is PipeItemModel)
                {
                    DataColumn dc  = new DataColumn("管线类型");
                    DataColumn dc1 = new DataColumn("管线长度");
                    DataColumn dc2 = new DataColumn("管线宽度");
                    DataColumn dc3 = new DataColumn("管线颜色");
                    DataColumn dc6 = new DataColumn("管道信息位置");


                    if (!tb.Columns.Contains("管线类型"))
                    {
                        tb.Columns.Add(dc);
                    }
                    if (!tb.Columns.Contains("管道信息位置"))
                    {
                        tb.Columns.Add(dc6);
                    }
                    if (!tb.Columns.Contains("管线长度"))
                    {
                        tb.Columns.Add(dc1);
                    }
                    if (!tb.Columns.Contains("管线宽度"))
                    {
                        tb.Columns.Add(dc2);
                    }
                    if (!tb.Columns.Contains("管线颜色"))
                    {
                        tb.Columns.Add(dc3);
                    }



                    for (int i = 0; i < list.Count; i++)
                    {
                        int     colNum = 1;
                        DataRow dr     = tb.NewRow();


                        if (list[i] is PipeItemModel)
                        {
                            PipeItemModel road = list[i] as PipeItemModel;
                            dr["所在图层"]   = road.PipeLayer == null ? "" : road.PipeLayer;
                            dr["管线类型"]   = road.PipeType == null ? "" : road.PipeType;
                            dr["管道信息位置"] = "X:" + road.TxtLocation.X + ",Y:" + road.TxtLocation.Y;
                            dr["管线长度"]   = road.PipeLength == null ? "" : road.PipeLength;
                            dr["管线宽度"]   = road.Style.LineWidth == null ? "" : road.Style.LineWidth;
                            dr["管线颜色"]   = road.ColorIndex;
                            for (int j = 0; j < road.pipeList.Count; j++)
                            {
                                DataColumn dc5 = new DataColumn("Point" + (j + 1));
                                if (!tb.Columns.Contains("Point" + (j + 1)))
                                {
                                    tb.Columns.Add(dc5);
                                }
                                dr[("Point" + (j + 1))] = "X:" + road.pipeList[j].X + ",Y:" + road.pipeList[j].Y;
                            }
                        }
                        tb.Rows.Add(dr);
                    }
                }
            }
        }