乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 13|回复: 0

[分享]用C#实现命令“创建要素”的实现方法

[复制链接]

3

主题

11

帖子

1

银币

初来乍到

Rank: 1

铜币
23
发表于 2010-9-25 10:10:00 | 显示全部楼层 |阅读模式
平台:vs.net2008  Map3d 2010

部份实现代码:

using OSGeo.MapGuide;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.Gis.Map.Platform;
using Autodesk.Gis.Map.Platform.Interop;

        ///
        /// 创建要素
        ///
        public void CreateFeature()
        {
            AcMapMap currentMap = AcMapMap.GetCurrentMap();
            MgLayerCollection layers = currentMap.GetLayers();
            MgLayerBase layer = SelectLayer(layers);
            MgClassDefinition classDef = layer.GetClassDefinition();
            MgPropertyDefinitionCollection propDefs = classDef.GetProperties();
            ObjectIdCollection objIds = CGcEditor.SelectEntities();
             int count = 0;
             Database db =
                     Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
             TransactionManager tm = db.TransactionManager;
             using (Transaction transaction = tm.StartTransaction())
             {
                 foreach (ObjectId objId in objIds)
                 {
                     Entity entity = (Entity)tm.GetObject(objId, OpenMode.ForWrite, false);
                     bool addSuccess = AddFeature(layer, entity);
                     if (addSuccess)
                     {
                         count++;
                         entity.Erase();
                     }
                 }
                 string msg = "Convert the entity to feature successfully.";
                 if (count > 1)
                 {
                     msg = string.Format("Converted {0} entities to features successfully!", count);
                 }
                 if (count > 0)
                 {
                     CGcEditor.ShowMessage(msg);
                 }
                 transaction.Commit();
             }
        }



        ///
        /// Entity -> MgGeometry
        ///
        private bool AddFeature(MgLayerBase layer, Entity entity)
        {
            if (layer == null || entity == null)
                return false;
            MgGeometry geometry = CEntityToGeometryConverter.EntityToGeometry(entity);
            if (geometry == null)
                return false;
            MgClassDefinition classDef = layer.GetClassDefinition();
            string featClassName = layer.FeatureClassName;
            MgPropertyDefinitionCollection propDefs = classDef.GetProperties();
            MgGeometricPropertyDefinition geoPropDef = propDefs.GetItem(classDef.DefaultGeometryPropertyName)
                                                                    as MgGeometricPropertyDefinition;
            
            int layerGeometryType = geoPropDef.GeometryTypes;            
            int geoType = geometry.GetGeometryType();
            if (!GeometryTypeValidate(layerGeometryType, geoType))
            {
                CGcEditor.ShowMessage("Geometry type of the entity is invalid to the targeting layer.");
                return false;
            }
            MgPropertyCollection props = new MgPropertyCollection();
            props = InputPropertyValues(propDefs, geometry);
            if (props != null)
            {
                MgInsertFeatures insertFeat = new MgInsertFeatures(featClassName, props);
                MgFeatureCommandCollection featCommands = new MgFeatureCommandCollection();
                featCommands.Add(insertFeat);
                try
                {
                    layer.UpdateFeatures(featCommands);
                }
                catch (System.Exception e)
                {
                    CGcEditor.ShowMessage("Failed to add a Feature.");
                    CGcEditor.ShowMessage(e.Message);
                    return false;
                }
                return true;
            }
            else
            {
                CGcEditor.ShowMessage("Operation cancelled");
                return false;
            }
        }



        ///
        /// Convert Entity to MgGeometry.
        ///
        public static MgGeometry EntityToGeometry(Entity entity)
        {
            if (entity == null)
                return null;
            MgGeometry geometry = null;
            string entityType = entity.GetType().Name;
            switch (entityType)
            {
                case "DBPoint":
                    geometry = PointGeometryConvert((DBPoint)entity);
                    break;
                case "Line":
                    geometry = LineGeometryConvert((Line)entity);
                    break;
                case "Polyline":
                    geometry = PolylineGeometryConvert((Polyline)entity);
                    break;
                case "MPolygon":
                    geometry = MPolygonGeometryConvert((MPolygon)entity);
                    break;
                default:
                    break;
            }
            return geometry;
        }
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 03:42 , Processed in 2.600388 second(s), 54 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表