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); }
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); } }
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); } } } }