public static PolyLineModel Polyline2Model(Autodesk.AutoCAD.DatabaseServices.Polyline polyLine) { PolyLineModel polylineModel = new PolyLineModel(); polylineModel.individualName = ""; polylineModel.individualFactor = ""; polylineModel.individualCode = ""; polylineModel.individualStage = ""; // 增加个体编码、个体要素、个体名称 System.Data.DataTable tb = Method.AutoGenerateNumMethod.GetAllPolylineNumsEx(polyLine); if (tb.Rows != null && tb.Rows.Count > 0) { foreach (System.Data.DataRow row in tb.Rows) { if ((string)row["多段线id"] == polyLine.Id.Handle.Value.ToString()) { polylineModel.individualName = (string)row["个体名称"]; polylineModel.individualFactor = (string)row["个体要素"]; polylineModel.individualCode = (string)row["个体编码"]; polylineModel.individualStage = (string)row["个体阶段"]; } } } polylineModel.Area = polyLine.Area; polylineModel.Closed = polyLine.Closed; polylineModel.Color = polyLine.ColorIndex == 256 ? MethodCommand.GetLayerColorByID(polyLine.LayerId) : System.Drawing.ColorTranslator.ToHtml(polyLine.Color.ColorValue); polylineModel.Vertices = new System.Collections.ArrayList(); int vn = polyLine.NumberOfVertices; //lwp已知的多段线 //if(polylineModel.Closed) //{ // for (int i = 0; i < vn; i++) // { // Point2d pt = polyLine.GetPoint2dAt(i); // PointF ptf = new PointF((float)pt.X, (float)pt.Y); // polylineModel.Vertices.Add(ptf); // } //} //else //{ for (int i = 0; i < vn; i++) { Point2d pt = polyLine.GetPoint2dAt(i); SegmentType st = polyLine.GetSegmentType(i); if (st == SegmentType.Arc) { ArcModel arc = new ArcModel(); CircularArc2d cir = polyLine.GetArcSegment2dAt(i); // arc.Center = new System.Drawing.PointF((float)cir.Center.X,(float)cir.Center.Y); arc.Center = Point2d2Pointf(cir.Center); arc.Radius = cir.Radius; arc.Startangel = cir.StartAngle; arc.EndAngel = cir.EndAngle; // arc.StartPoint = new System.Drawing.PointF((float)cir.StartPoint.X, (float)cir.StartPoint.Y); if (cir.HasStartPoint) { arc.StartPoint = Point2d2Pointf(cir.StartPoint); } // arc.EndPoint = new System.Drawing.PointF((float)cir.EndPoint.X, (float)cir.EndPoint.Y); if (cir.HasEndPoint) { arc.EndPoint = Point2d2Pointf(cir.EndPoint); } MyPoint spt = new MyPoint(arc.StartPoint.X, arc.StartPoint.Y); MyPoint ept = new MyPoint(arc.EndPoint.X, arc.EndPoint.Y); MyPoint center = new MyPoint(arc.Center.X, arc.Center.Y); arc.Color = polylineModel.Color; // arc.pointList = MethodCommand.GetRoationPoint(spt, ept, center, arc.Startangel,arc.EndAngel,cir.IsClockWise); arc.pointList = MethodCommand.GetArcPointsByPoint2d(cir.GetSamplePoints(20)); //arc.pointList = MethodCommand.GetArcPoints(arc.Center,arc.Startangel,arc.EndAngel,arc.Radius); // arc.pointList.Insert(0, arc.StartPoint); // arc.pointList.Add(arc.EndPoint); polylineModel.Vertices.Add(arc); } else if (st == SegmentType.Line) { LineModel line = new LineModel(); LineSegment2d lineSe = polyLine.GetLineSegment2dAt(i); if (lineSe.HasStartPoint) { line.StartPoint = Point2d2Pointf(lineSe.StartPoint); } if (lineSe.HasEndPoint) { line.EndPoint = Point2d2Pointf(lineSe.EndPoint); } if (line.StartPoint.X == line.EndPoint.X && line.StartPoint.Y == line.EndPoint.Y) { line.Angle = 0; line.Length = 0; } else if (line.StartPoint.X == line.EndPoint.X) { line.Angle = 90; } line.Color = polylineModel.Color; polylineModel.Vertices.Add(line); } } //} polylineModel.isDashed = GetLayerLineTypeByIDEx(polyLine); return(polylineModel); }
public static PolyLineModel Polyline2Model(Autodesk.AutoCAD.DatabaseServices.Polyline polyLine, AttributeModel atModel) { PolyLineModel polylineModel = new PolyLineModel(); polylineModel.individualName = ""; polylineModel.individualFactor = ""; polylineModel.individualCode = ""; polylineModel.individualStage = ""; // 增加个体编码、个体要素、个体名称 System.Data.DataTable tb = Method.AutoGenerateNumMethod.GetAllPolylineNumsEx(polyLine); if (tb.Rows != null && tb.Rows.Count > 0) { foreach (System.Data.DataRow row in tb.Rows) { if ((string)row["多段线id"] == polyLine.Id.Handle.Value.ToString()) { polylineModel.individualName = (string)row["个体名称"]; polylineModel.individualFactor = (string)row["个体要素"]; polylineModel.individualCode = (string)row["个体编码"]; polylineModel.individualStage = (string)row["个体阶段"]; } } } polylineModel.Area = polyLine.Area; polylineModel.Closed = polyLine.Closed; polylineModel.Color = polyLine.ColorIndex == 256 ? MethodCommand.GetLayerColorByID(polyLine.LayerId) : System.Drawing.ColorTranslator.ToHtml(polyLine.Color.ColorValue); polylineModel.Vertices = new System.Collections.ArrayList(); int vn = polyLine.NumberOfVertices; //lwp已知的多段线 for (int i = 0; i < vn; i++) { Point2d pt = polyLine.GetPoint2dAt(i); SegmentType st = polyLine.GetSegmentType(i); if (st == SegmentType.Arc) { ArcModel arc = new ArcModel(); CircularArc2d cir = polyLine.GetArcSegment2dAt(i); // arc.Center = new System.Drawing.PointF((float)cir.Center.X,(float)cir.Center.Y); arc.Center = Point2d2Pointf(cir.Center); arc.Radius = cir.Radius; arc.Startangel = cir.StartAngle; arc.EndAngel = cir.EndAngle; // arc.StartPoint = new System.Drawing.PointF((float)cir.StartPoint.X, (float)cir.StartPoint.Y); if (cir.HasStartPoint) { arc.StartPoint = Point2d2Pointf(cir.StartPoint); } // arc.EndPoint = new System.Drawing.PointF((float)cir.EndPoint.X, (float)cir.EndPoint.Y); if (cir.HasEndPoint) { arc.EndPoint = Point2d2Pointf(cir.EndPoint); } MyPoint spt = new MyPoint(arc.StartPoint.X, arc.StartPoint.Y); MyPoint ept = new MyPoint(arc.EndPoint.X, arc.EndPoint.Y); MyPoint center = new MyPoint(arc.Center.X, arc.Center.Y); arc.Color = polylineModel.Color; // arc.pointList = MethodCommand.GetRoationPoint(spt, ept, center, arc.Startangel,arc.EndAngel,cir.IsClockWise); arc.pointList = MethodCommand.GetArcPointsByPoint2d(cir.GetSamplePoints(20)); //arc.pointList = MethodCommand.GetArcPoints(arc.Center,arc.Startangel,arc.EndAngel,arc.Radius); // arc.pointList.Insert(0, arc.StartPoint); // arc.pointList.Add(arc.EndPoint); foreach (AttributeItemModel item in atModel.attributeItems) { string attValue = ""; switch (item.AtItemType) { case AttributeItemType.Area: attValue = polyLine.Area.ToString(); break; case AttributeItemType.TxtHeight: break; case AttributeItemType.Color: attValue = polylineModel.Color; break; case AttributeItemType.Content: break; case AttributeItemType.LayerName: attValue = polyLine.Layer; break; case AttributeItemType.LineScale: attValue = polyLine.LinetypeScale.ToString(); break; case AttributeItemType.LineType: attValue = GetLayerLineTypeByID(polyLine); break; case AttributeItemType.Overallwidth: attValue = polyLine.ConstantWidth.ToString(); break; case AttributeItemType.TotalArea: break; } if (!string.IsNullOrEmpty(attValue)) { item.AtValue = attValue; arc.attItemList.Add(item); } } polylineModel.Vertices.Add(arc); } else if (st == SegmentType.Line) { LineModel line = new LineModel(); LineSegment2d lineSe = polyLine.GetLineSegment2dAt(i); if (lineSe.HasStartPoint) { line.StartPoint = Point2d2Pointf(lineSe.StartPoint); } if (lineSe.HasEndPoint) { line.EndPoint = Point2d2Pointf(lineSe.EndPoint); } if (line.StartPoint.X == line.EndPoint.X && line.StartPoint.Y == line.EndPoint.Y) { line.Angle = 0; line.Length = 0; } else if (line.StartPoint.X == line.EndPoint.X) { line.Angle = 90; } line.Color = polylineModel.Color; foreach (AttributeItemModel item in atModel.attributeItems) { string attValue = ""; switch (item.AtItemType) { case AttributeItemType.Area: attValue = polyLine.Area.ToString(); break; case AttributeItemType.TxtHeight: break; case AttributeItemType.Color: attValue = polylineModel.Color; break; case AttributeItemType.Content: break; case AttributeItemType.LayerName: attValue = polyLine.Layer; break; case AttributeItemType.LineScale: attValue = polyLine.LinetypeScale.ToString(); break; case AttributeItemType.LineType: attValue = GetLayerLineTypeByID(polyLine); break; case AttributeItemType.Overallwidth: attValue = polyLine.ConstantWidth.ToString(); break; case AttributeItemType.TotalArea: break; } item.AtValue = attValue; line.attItemList.Add(item); } polylineModel.Vertices.Add(line); } } return(polylineModel); }
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); } } } }