//获取外包矩形的多边形 public static mcGeoPolygon GetRectPolygon(mcRect rect) { mcGeoPolygon GeoPolygon = new mcGeoPolygon(); mcLongList LongList = new mcLongList(); mcDots regDots = new mcDots(); mcDot dot1 = new mcDot(); mcDot dot2 = new mcDot(); mcDot dot3 = new mcDot(); mcDot dot4 = new mcDot(); dot1.x = rect.xmin; dot1.y = rect.ymin; dot2.x = rect.xmin; dot2.y = rect.ymax; dot3.x = rect.xmax; dot3.y = rect.ymax; dot4.x = rect.xmax; dot4.y = rect.ymin; regDots.Add(dot1); regDots.Add(dot2); regDots.Add(dot3); regDots.Add(dot4); LongList.Append(4); GeoPolygon.SetDots(regDots, LongList); return(GeoPolygon); }
//获取标注圆的圆心坐标 public static mcDots GetCircleCoor(mcRecordSet recordset) { mcDots circleDots = new mcDots(); int SfcID = 0; SfcID = recordset.MoveFirst(); //找到图例中的注记圆 while (!recordset.IsEOF()) { IGeometry GeoResult = null; recordset.GetGeometry(out GeoResult); mcRect rect = null; GeoResult.CalRect(out rect); double width = Math.Round(rect.xmax - rect.xmin, 2); double heigth = Math.Round(rect.ymax - rect.ymin, 2); //判断是否是注记圆 if (width == heigth) { //计算保留图例圆的中心点坐标 mcDot CircleDot = new mcDot(); CircleDot.x = (rect.xmax + rect.xmin) / 2; CircleDot.y = (rect.ymin + rect.ymax) / 2; circleDots.Add(CircleDot); } SfcID = recordset.MoveNext(); } return(circleDots); }
//获取新数据内标注圆的坐标集合 public static mcDots GetAnnoCircleDots(string frame_layername, AxWorkSpace.AxMxWorkSpace WorkSpace) { mcDots dots = new mcDots(); // 1、找到最大的图框 mcRecordSet AllFeatures_RecordSet = GetLayerRecordSet(frame_layername, WorkSpace); List <double> mpLengths = new List <double>(); int sfID = 0; sfID = AllFeatures_RecordSet.MoveFirst(); while (!AllFeatures_RecordSet.IsEOF()) { mcRecord record = null; AllFeatures_RecordSet.GetAtt(out record); object per = null; record.GetFldVal("mpLength", out per); mpLengths.Add((double)per); sfID = AllFeatures_RecordSet.MoveNext(); } mpLengths.Sort(); mcQueryDef lengthDef = new mcQueryDef(); lengthDef.Filter = "mpLength=" + mpLengths[mpLengths.Count - 1]; mcRecordSet frameRecordSet = null; AllFeatures_RecordSet.Select(lengthDef, out frameRecordSet); frameRecordSet.MoveFirst(); IGeometry geoFrame = null; frameRecordSet.GetGeometry(out geoFrame); // 2、找到图例圆 IXGroupLayer m_Layer = null; m_Layer = WorkSpace.MapCollection.get_Item(0).get_Layer2("T01_0060.WT") as IXGroupLayer; IVectorCls vcls = m_Layer.get_Layer(2).XClass as IVectorCls; mcQueryDef queryDef = new mcQueryDef(); //图框的外包矩形 mcRect FrameRect = null; geoFrame.CalRect(out FrameRect); //计算、保留图例圆的中心点坐标 mcDot CircleDot = new mcDot(); mcRect CircleRect = null;//右下角图例圆的外包矩形 mcGeoPolygon queryPolygon = GetRectPolygon(FrameRect); queryDef.set_Spatial(queryPolygon, meSpaQueryMode.meModeContain); mcRecordSet containCircle = null; vcls.Select(queryDef, out containCircle);//图框内的圆 containCircle.MoveFirst(); while (!containCircle.IsEOF()) { mcObjectID id = null; containCircle.GetID(out id); IGeomInfo geoInfo = null; containCircle.GetInfo(out geoInfo); IPntInfo pntInfo = geoInfo as IPntInfo; if (pntInfo.height > 20 && pntInfo.width > 20) { IGeometry circle = null; containCircle.GetGeometry(out circle); circle.CalRect(out CircleRect); //确定右下角图例圆的中心点坐标 CircleDot.x = (CircleRect.xmin + CircleRect.xmax) / 2; CircleDot.y = (CircleRect.ymin + CircleRect.ymax) / 2; dots.Add(CircleDot); } containCircle.MoveNext(); } return(dots); }