[分享]用C#实现命令“创建要素”的实现方法
<font face="Verdana"><p>平台:vs.net2008 AutoCAD Map3d 2010</p>
<p> </p>
<p>部份实现代码:</p><font face="Verdana">
<p><br/>using OSGeo.MapGuide;<br/>using Autodesk.AutoCAD.DatabaseServices;<br/>using Autodesk.AutoCAD.EditorInput;<br/>using Autodesk.Gis.Map.Platform;<br/>using Autodesk.Gis.Map.Platform.Interop;</font></p>
<p><br/> /// <summary><br/> /// 创建要素<br/> /// </summary><br/> public void CreateFeature()<br/> {<br/> AcMapMap currentMap = AcMapMap.GetCurrentMap();<br/> MgLayerCollection layers = currentMap.GetLayers();</p>
<p> MgLayerBase layer = SelectLayer(layers);<br/> MgClassDefinition classDef = layer.GetClassDefinition();<br/> MgPropertyDefinitionCollection propDefs = classDef.GetProperties();</p>
<p> ObjectIdCollection objIds = CGcEditor.SelectEntities();<br/> int count = 0;<br/> Database db =<br/> Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;<br/> TransactionManager tm = db.TransactionManager;<br/> using (Transaction transaction = tm.StartTransaction())<br/> {<br/> foreach (ObjectId objId in objIds)<br/> {<br/> Entity entity = (Entity)tm.GetObject(objId, OpenMode.ForWrite, false);<br/> bool addSuccess = AddFeature(layer, entity);<br/> if (addSuccess)<br/> {<br/> count++;<br/> entity.Erase();<br/> }<br/> }</p>
<p> string msg = "Convert the entity to feature successfully.";<br/> if (count > 1)<br/> {<br/> msg = string.Format("Converted {0} entities to features successfully!", count);<br/> }<br/> if (count > 0)<br/> {<br/> CGcEditor.ShowMessage(msg);<br/> }<br/> transaction.Commit();<br/> }<br/> }</font></p>
<p> </p>
<p> </p><font face="Verdana">
<p><br/> /// <summary><br/> /// Entity -> MgGeometry<br/> /// </summary><br/> private bool AddFeature(MgLayerBase layer, Entity entity)<br/> {<br/> if (layer == null || entity == null)<br/> return false;</p>
<p> MgGeometry geometry = CEntityToGeometryConverter.EntityToGeometry(entity);<br/> if (geometry == null)<br/> return false;</p>
<p> MgClassDefinition classDef = layer.GetClassDefinition();<br/> string featClassName = layer.FeatureClassName;<br/> MgPropertyDefinitionCollection propDefs = classDef.GetProperties();<br/> MgGeometricPropertyDefinition geoPropDef = propDefs.GetItem(classDef.DefaultGeometryPropertyName)<br/> as MgGeometricPropertyDefinition;<br/> <br/> int layerGeometryType = geoPropDef.GeometryTypes; <br/> int geoType = geometry.GetGeometryType();<br/> if (!GeometryTypeValidate(layerGeometryType, geoType))<br/> {<br/> CGcEditor.ShowMessage("Geometry type of the entity is invalid to the targeting layer.");<br/> return false;<br/> }</p>
<p> MgPropertyCollection props = new MgPropertyCollection();<br/> props = InputPropertyValues(propDefs, geometry);<br/> if (props != null)<br/> {<br/> MgInsertFeatures insertFeat = new MgInsertFeatures(featClassName, props);<br/> MgFeatureCommandCollection featCommands = new MgFeatureCommandCollection();<br/> featCommands.Add(insertFeat);<br/> try<br/> {<br/> layer.UpdateFeatures(featCommands);<br/> }<br/> catch (System.Exception e)<br/> {<br/> CGcEditor.ShowMessage("Failed to add a Feature.");<br/> CGcEditor.ShowMessage(e.Message);<br/> return false;<br/> }<br/> return true;<br/> }<br/> else<br/> {<br/> CGcEditor.ShowMessage("Operation cancelled");<br/> return false;<br/> }<br/> }</font></p>
<p> </p>
<p> </p><font face="Verdana">
<p><br/> /// <summary><br/> /// Convert Entity to MgGeometry.<br/> /// </summary><br/> public static MgGeometry EntityToGeometry(Entity entity)<br/> {<br/> if (entity == null)<br/> return null;<br/> MgGeometry geometry = null;</p>
<p> string entityType = entity.GetType().Name;</p>
<p> switch (entityType)<br/> {<br/> case "DBPoint":<br/> geometry = PointGeometryConvert((DBPoint)entity);<br/> break;</p>
<p> case "Line":<br/> geometry = LineGeometryConvert((Line)entity);<br/> break;</p>
<p> case "Polyline":<br/> geometry = PolylineGeometryConvert((Polyline)entity);<br/> break;</p>
<p> case "MPolygon":<br/> geometry = MPolygonGeometryConvert((MPolygon)entity);<br/> break;</p>
<p> default:<br/> break;<br/> }<br/> return geometry;<br/> }</font></p>
页:
[1]