ArcGIS Engine基础(2)之各类数据源管理(Cad)

实现根据字符串获取CAD工作空间和图层

        private static CadDataSource _instance = null;
        // 获取实例互斥锁
        private static readonly object _getInstanceMutexLocker = new object();

        private CadDataSource() { }

        public static CadDataSource CreateSingleton() {
            if (_instance != null) return _instance;
            lock (_getInstanceMutexLocker) {
                if (_instance == null) _instance = new CadDataSource();
            }
            return _instance;
        }


        /// <summary>
        /// 打开CAD工作空间
        /// </summary>
        /// <param name="workspaceDataSourceString">CAD文件全路径</param>
        /// <returns>工作空间</returns>
        public IWorkspace OpenWorkspace(string workspaceDataSourceString) {
            IWorkspace pWorkspace = null;

            IWorkspaceFactory workspaceFactory = WorkspaceFactoryWrapper.GetWorkspaceFactory(
                "esriDataSourcesFile.CadWorkspaceFactory");

            try {
                pWorkspace = workspaceFactory.OpenFromFile(workspaceDataSourceString, 0);
            }
            catch {
            }

            return pWorkspace;
        }


        /// <summary>
        /// 打开CAD图层
        /// </summary>
        /// <param name="layerDataSourceString">CAD文件全路径</param>
        /// <returns>打开的CAD图层</returns>
        public ILayer OpenLayer(string layerDataSourceString) {
            ICadDrawingDataset cadDrawingDataset = GetCadDrawingDataset(layerDataSourceString);
            if (cadDrawingDataset == null) return null;

            int pos = layerDataSourceString.LastIndexOf('\\') + 1;
            string cadFileName = layerDataSourceString.Substring(pos);

            ICadLayer cadLayer = new CadLayerClass();
            cadLayer.CadDrawingDataset = cadDrawingDataset;
            cadLayer.Name = cadFileName;

            return cadLayer;
        }

        /// <summary>
        /// 获取CAD数据范围
        /// </summary>
        /// <param name="layerDataSourceString">CAD文件全路径</param>
        /// <returns>CAD数据范围</returns>
        public IEnvelope GetExtent(string layerDataSourceString) {
            ICadDrawingDataset cadDrawingDataset = GetCadDrawingDataset(layerDataSourceString);
            if (cadDrawingDataset == null) return null;

            IGeoDataset geoDataset = cadDrawingDataset as IGeoDataset;
            if (geoDataset == null) return null;

            return geoDataset.Extent;
        }


        #region 私有方法

        private ICadDrawingDataset GetCadDrawingDataset(string layerDataSourceString) {
            if (string.IsNullOrEmpty(layerDataSourceString)) return null;

            int pos = layerDataSourceString.LastIndexOf('\\') + 1;
            string cadPathName = layerDataSourceString.Substring(0, pos);
            string cadFileName = layerDataSourceString.Substring(pos);

            try {
                IFeatureWorkspace featureWorkspace = OpenWorkspace(cadPathName) as IFeatureWorkspace;
                if (featureWorkspace == null) return null;

                ICadDrawingWorkspace cadDrawingWorkspace = featureWorkspace as ICadDrawingWorkspace;

                ICadDrawingDataset cadDrawingDataset = cadDrawingWorkspace.OpenCadDrawingDataset(cadFileName);

                return cadDrawingDataset;
            }
            catch {
                return null;
            }
        }

        #endregion

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xizhjxust_GIS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值