Ejemplo n.º 1
0
        //获取标注圆内的注记集合
        public static List <mcRecordSet> GetCircleAnnosNew(List <IGeometry> geoCircelList, List <IGeomInfo> geoCircelInfoList, mcRecordSet AnnoRecordSet)
        {
            List <mcRecordSet> AnnoInCircles = new List <mcRecordSet>();

            for (int i = 0; i < geoCircelList.Count; i++)
            {
                //获取单个标注圆内的注记
                mcRect circleRect = null;
                geoCircelList[i].CalRect(out circleRect);
                IPntInfo pntInfo    = geoCircelInfoList[i] as IPntInfo;
                mcRect   ExpandRect = new mcRect();
                ExpandRect.xmin = circleRect.xmin - (pntInfo.width / 2) - 2;
                ExpandRect.ymin = circleRect.ymin - (pntInfo.height / 2) - 2;
                ExpandRect.xmax = circleRect.xmax + (pntInfo.width / 2) + 2;
                ExpandRect.ymax = circleRect.ymax + (pntInfo.height / 2) + 2;
                mcRecordSet AnnoInCircle = null;
                mcQueryDef  queryDef     = new mcQueryDef();
                queryDef.set_rect(ExpandRect, meSpaQueryMode.meModeContain);
                AnnoRecordSet.Select(queryDef, out AnnoInCircle);
                AnnoInCircles.Add(AnnoInCircle);
            }
            return(AnnoInCircles);
        }
Ejemplo n.º 2
0
        //获取新数据内标注圆的集合
        public static void GetAnnoCircleGeoList(string frame_layername, out List <IGeometry> Anno_CircleGeoList, out List <IGeomInfo> Anno_CircleGeoInfoList, AxWorkSpace.AxMxWorkSpace WorkSpace)
        {
            List <IGeometry> _Anno_CircleGeoList     = new List <IGeometry>();
            List <IGeomInfo> _Anno_CircleGeoInfoList = new List <IGeomInfo>();
            //  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();

            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 geoCircle     = null;
                    IGeomInfo geoCircleInfo = null;
                    containCircle.GetGeometry(out geoCircle);
                    _Anno_CircleGeoList.Add(geoCircle);
                    containCircle.GetInfo(out geoCircleInfo);
                    _Anno_CircleGeoInfoList.Add(geoCircleInfo);
                }
                containCircle.MoveNext();
            }
            Anno_CircleGeoList     = _Anno_CircleGeoList;
            Anno_CircleGeoInfoList = _Anno_CircleGeoInfoList;
        }