public static BlockInfoModel AnalysisEntryAndExitbr(BlockReference br) { BlockInfoModel item = new BlockInfoModel(); Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; Database db = doc.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { BlockTableRecord block = trans.GetObject(br.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord; foreach (ObjectId id in block) { Entity entity = trans.GetObject(id, OpenMode.ForRead) as Entity; if (entity is DBText) { DBText dbText = entity as DBText; item.DbText.Add(AutoCad2ModelTools.DbText2Model(dbText));; } else if (entity is Polyline) { Polyline polyLine = entity as Polyline; item.PolyLine.Add(AutoCad2ModelTools.Polyline2Model(polyLine)); } else if (entity is Line) { item.Line.Add(AutoCad2ModelTools.Line2Model(entity as Line)); } else if (entity is Hatch) { item.Hatch.Add(AutoCad2ModelTools.Hatch2Model(entity as Hatch)); } else if (entity is Circle) { item.Circle.Add(AutoCad2ModelTools.Circle2Model(entity as Circle)); } } } //扩展数据 return(item); }
public static BlockInfoModel AnalysisEntryAndExitbr(BlockReference br, AttributeModel attModel) { BlockInfoModel item = new BlockInfoModel(); Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; Database db = doc.Database; using (Transaction trans = db.TransactionManager.StartTransaction()) { Dictionary <AttributeItemType, string> dicList = new Dictionary <AttributeItemType, string>(); foreach (AttributeItemModel itemm in attModel.attributeItems) { switch (itemm.AtItemType) { case AttributeItemType.UseLandNumber: dicList.Add(AttributeItemType.UseLandNumber, GetValueByAttributeName(br, "用地代码", trans)); break; case AttributeItemType.LotNumber: dicList.Add(AttributeItemType.LotNumber, GetValueByAttributeName(br, "地块编号", trans)); break; } } BlockTableRecord block = trans.GetObject(br.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord; foreach (ObjectId id in block) { Entity entity = trans.GetObject(id, OpenMode.ForRead) as Entity; object result = null; if (entity is DBText) { DBText dbText = entity as DBText; result = AutoCad2ModelTools.DbText2Model(dbText, attModel); item.DbText.Add(result as DbTextModel); } if (entity is MText) { MText dbText = entity as MText; result = AutoCad2ModelTools.DbText2Model(dbText, attModel); item.DbText.Add(result as DbTextModel); } else if (entity is Polyline) { Polyline polyLine = entity as Polyline; result = AutoCad2ModelTools.Polyline2Model(polyLine, attModel); item.PolyLine.Add(result as PolyLineModel); } else if (entity is Line) { result = AutoCad2ModelTools.Line2Model(entity as Line, attModel); item.Line.Add(result as LineModel); } else if (entity is Hatch) { result = AutoCad2ModelTools.Hatch2Model(entity as Hatch, attModel); item.Hatch.Add(result as HatchModel); } else if (entity is Circle) { result = AutoCad2ModelTools.Circle2Model(entity as Circle, attModel); item.Circle.Add(result as CircleModel); } if (result is PolyLineModel) { foreach (GemoTypeModel gemoType in (result as PolyLineModel).Vertices) { foreach (AttributeItemModel atm in (gemoType as GemoTypeModel).attItemList) { if (dicList.ContainsKey(atm.AtItemType)) { atm.AtValue = dicList[atm.AtItemType]; } } } } else if (result is HatchModel) { foreach (GemoTypeModel gemoType in (result as HatchModel).loopPoints.Values) { foreach (AttributeItemModel atm in (result as GemoTypeModel).attItemList) { if (dicList.ContainsKey(atm.AtItemType)) { atm.AtValue = dicList[atm.AtItemType]; } } } } else { foreach (AttributeItemModel atm in (result as GemoTypeModel).attItemList) { if (dicList.ContainsKey(atm.AtItemType)) { atm.AtValue = dicList[atm.AtItemType]; } } } } } //扩展数据 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); } }