예제 #1
0
        /// <summary>
        /// 配置指定要素的字段
        /// </summary>
        /// <param name="AnnotationFeatureClass"></param>
        /// <param name="AnnotationFeatureCursor"></param>
        /// <param name="AnnotationFeature"></param>
        public void ConfigFields(IFeatureClass AnnotationFeatureClass, IFeatureCursor AnnotationFeatureCursor, IFeature AnnotationFeature)
        {
            IWorkspace     WorkSpace = ((IDataset)AnnotationFeatureClass).Workspace;
            IWorkspaceEdit edit      = WorkSpace as IWorkspaceEdit;

            bool startEdit = edit.IsBeingEdited();

            if (!startEdit)
            {
                edit.StartEditing(false);
            }
            edit.StartEditOperation();
            try
            {
                int index = AnnotationFeature.Fields.FindField("Status");
                AnnotationFeature.set_Value(index, esriAnnotationStatus.esriAnnoStatusPlaced);
                index = AnnotationFeature.Fields.FindField("Angle");
                AnnotationFeature.set_Value(index, 90);
                index = AnnotationFeature.Fields.FindField("FontName");
                AnnotationFeature.set_Value(index, "华文彩云");
            }//先找到字段的索引值,再set_Value
            catch { }
            AnnotationFeature.Store();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(AnnotationFeature);
            AnnotationFeatureCursor.Flush();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(AnnotationFeatureCursor);
            edit.StopEditOperation();
            startEdit = edit.IsBeingEdited();
            if (startEdit)
            {
                edit.StopEditing(true);
            }
        }
예제 #2
0
 private void CreateFeature(IGeometry geo, IMap pMap, IFeatureClass fc)
 {
     try
     {
         if (geo == null || fc == null || pMap == null)
         {
             return;
         }
         IDataset       pDataset       = fc as IDataset;
         IWorkspaceEdit pWorkspaceEdit = pDataset.Workspace as IWorkspaceEdit;
         int            index          = fc.FindField(fc.ShapeFieldName);
         IGeometryDef   pGD            = fc.Fields.get_Field(index).GeometryDef;
         if (pGD.HasZ)
         {
             IZAware pZA = geo as IZAware;
             pZA.ZAware = true;
             IZ     pZ = geo as IZ;
             double zmin = -1000, zmax = 1000;
             if (pGD.SpatialReference.HasZPrecision())
             {
                 pGD.SpatialReference.GetZDomain(out zmin, out zmax);
             }
             if (pZ != null)
             {
                 pZ.SetConstantZ(0);
             }
             else
             {
                 IPoint p = geo as IPoint;
                 if (p.Z.ToString() == "非数字")
                 {
                     p.Z = 0;
                 }
             }
         }
         if (pGD.HasM)
         {
             IMAware pMA = geo as IMAware;
             pMA.MAware = true;
         }
         if (!pWorkspaceEdit.IsBeingEdited())
         {
             pWorkspaceEdit.StartEditing(true);
             pWorkspaceEdit.StartEditOperation();
         }
         IFeature pFeature = fc.CreateFeature();
         pFeature.Shape = geo;
         pFeature.Store();
         if (pWorkspaceEdit.IsBeingEdited())
         {
             pWorkspaceEdit.StartEditOperation();
             pWorkspaceEdit.StopEditing(true);
         }
         pMap.ClearSelection();
     }
     catch (System.Exception ex)
     {
         return;
     }
 }
예제 #3
0
        /// <summary>
        /// 提交当前版本(经过仲裁)
        /// </summary>
        /// <param name="pWorkspace">工作区</param>
        /// <param name="sVersion">父版本名称</param>
        public static void PostVerison(IWorkspace pWorkspace, string sVersion)
        {
            IVersion pVersion = (IVersion)pWorkspace;

            if (!IsLocked(pVersion))
            {
                throw new Exception("不能提交数据到父版本,其它用户正在编辑");
            }

            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pVersion;

            if (!pWorkspaceEdit.IsBeingEdited())
            {
                throw new Exception("请开始编辑会话");
            }

            IVersionEdit pVersionEdit = (IVersionEdit)pVersion;
            IVersionInfo pVersionInfo = pVersion.VersionInfo;

            try
            {
                string sParentName = pVersionInfo.VersionName;
                bool   bConflicts  = pVersionEdit.Reconcile(sParentName);
                if (bConflicts)
                {
                    pWorkspaceEdit.StopEditing(true);
                }
                else
                {
                    if (pVersionEdit.CanPost())
                    {
                        pVersionEdit.Post(sParentName);
                        pWorkspaceEdit.StopEditing(true);
                    }
                    else
                    {
                        pWorkspaceEdit.StopEditing(true); // false
                        //MessageBox.Show("不能提交数据到父版本[" + sParentName + "]");
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (pWorkspaceEdit.IsBeingEdited())
                {
                    pWorkspaceEdit.StopEditing(true); // false
                }
                pWorkspaceEdit.StartEditing(true);
            }
        }
예제 #4
0
        //停止编辑
        public static void StopEditing(AxMapControl axmap, ILayer player)
        {
            m_strOperator = "";
            if (pWorkspaceEdit == null)
            {
                return;
            }
            // Check edit conditions before allowing edit to stop
            m_CurrentLayer = player;
            m_MapControl   = axmap;
            if (m_CurrentLayer == null)
            {
                return;
            }
            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_CurrentLayer;

            if (pFeatureLayer.FeatureClass == null)
            {
                return;
            }
            IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null)
            {
                return;
            }

            // If the current document has been edited then prompt the user to save changes
            //IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

            if (pWorkspaceEdit.IsBeingEdited())
            {
                bool bHasEdits = false;
                pWorkspaceEdit.HasEdits(ref bHasEdits);
                bool bSave = false;
                if (bHasEdits)
                {
                    DialogResult result;
                    result = MessageBoxEx.Show("你想保存你的编辑吗?", "提示!", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                    if (DialogResult.Yes == result)
                    {
                        bSave = true;
                    }
                }
                pWorkspaceEdit.StopEditing(bSave);
            }

            m_MapControl.Map.ClearSelection();
            m_MapControl.ActiveView.Refresh();
        }
예제 #5
0
        /// <summary>
        /// 开始编辑,使工作空间处于可编辑状态
        /// 在进行图层编辑前必须调用本方法
        /// </summary>
        public void StartEditing()
        {
            try
            {
                if (m_pCurrentLayer == null)
                {
                    return;
                }

                if (!(m_pCurrentLayer is IGeoFeatureLayer))
                {
                    return;
                }

                IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;
                IDataset      pDataset      = (IDataset)pFeatureLayer.FeatureClass;
                if (pDataset == null)
                {
                    return;
                }

                // 开始编辑,并设置Undo/Redo 为可用
                IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                if (!pWorkspaceEdit.IsBeingEdited())
                {
                    pWorkspaceEdit.StartEditing(true);
                    pWorkspaceEdit.EnableUndoRedo();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        }
예제 #6
0
        /// <summary>
        /// 检查工作空间中是否有数据处于编辑状态
        /// </summary>
        /// <returns>是否正在编辑</returns>
        public bool InEdit()
        {
            try
            {
                if (m_pCurrentLayer == null)
                {
                    return(false);
                }

                IFeatureLayer pFeatureLayer = (IFeatureLayer)m_pCurrentLayer;
                if (pFeatureLayer.FeatureClass == null)
                {
                    return(false);
                }

                IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;
                if (pDataset == null)
                {
                    return(false);
                }

                IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                if (pWorkspaceEdit.IsBeingEdited())
                {
                    return(true);
                }

                return(false);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
                return(false);
            }
        }
예제 #7
0
        private bool InEdit(ILayer player)
        {
            // Check edit conditions before allowing edit to stop
            CreateShape.m_CurrentLayer = player;
            if (CreateShape.m_CurrentLayer == null)
            {
                return(false);
            }
            try
            {
                IFeatureLayer pFeatureLayer = (IFeatureLayer)CreateShape.m_CurrentLayer;
                if (pFeatureLayer.FeatureClass == null)
                {
                    return(false);
                }
                IDataset pDataset = (IDataset)pFeatureLayer.FeatureClass;
                if (pDataset == null)
                {
                    return(false);
                }
                IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                if (pWorkspaceEdit.IsBeingEdited())
                {
                    return(true);
                }

                return(false);
            }
            catch
            {
                return(false);
            }
        }
예제 #8
0
        public static IFeatureLayer FindFeatureLayerByFCName(IBasicMap pMap, string fcName, bool checkEdit)
        {
            string str = fcName.ToLower();
            UID    uid = new UID
            {
                Value = "{6CA416B1-E160-11D2-9F4E-00C04F6BC78E}"
            };
            IEnumLayer layer = pMap.get_Layers(uid, true);

            layer.Reset();
            for (ILayer layer2 = layer.Next(); layer2 != null; layer2 = layer.Next())
            {
                if (layer2 is IFeatureLayer)
                {
                    string[] strArray = ((layer2 as IFeatureLayer).FeatureClass as IDataset).Name.Split(new char[] { '.' });
                    if (strArray[strArray.Length - 1].ToLower() == str)
                    {
                        if (!checkEdit)
                        {
                            return(layer2 as IFeatureLayer);
                        }
                        IWorkspaceEdit workspace =
                            ((layer2 as IFeatureLayer).FeatureClass as IDataset).Workspace as IWorkspaceEdit;
                        if (workspace.IsBeingEdited())
                        {
                            return(layer2 as IFeatureLayer);
                        }
                    }
                }
            }
            return(null);
        }
예제 #9
0
 public static void LinesToPolygons(IFeatureClass ifeatureClass_0, IFeatureClass ifeatureClass_1)
 {
     if (ifeatureClass_0.ShapeType == esriGeometryType.esriGeometryPolygon)
     {
         IFeatureCursor       featureCursor            = ifeatureClass_1.Search(null, false);
         IEnvelope            envelope                 = (ifeatureClass_1 as IGeoDataset).Extent.Envelope;
         IInvalidArea         invalidAreaClass         = new InvalidArea();
         IFeatureConstruction featureConstructionClass = new FeatureConstruction();
         IWorkspaceEdit       workspace                = (ifeatureClass_0 as IDataset).Workspace as IWorkspaceEdit;
         if (!workspace.IsBeingEdited())
         {
             workspace.StartEditing(false);
             workspace.StartEditOperation();
         }
         try
         {
             featureConstructionClass.ConstructPolygonsFromFeaturesFromCursor(null, ifeatureClass_0, envelope,
                                                                              true, false, featureCursor, invalidAreaClass, -1, null);
             workspace.StopEditOperation();
             workspace.StopEditing(true);
         }
         catch (Exception exception1)
         {
             Exception exception = exception1;
             MessageBox.Show(string.Concat("Construct polygons failed. ", exception.Message));
             workspace.AbortEditOperation();
         }
         ComReleaser.ReleaseCOMObject(featureCursor);
     }
     else
     {
         MessageBox.Show("目标层不是一个面层.");
     }
 }
예제 #10
0
 public static void LinesSelfBreak(IFeatureClass ifeatureClass_0, string string_0)
 {
     if (ifeatureClass_0.ShapeType == esriGeometryType.esriGeometryPolyline)
     {
         IQueryFilter queryFilterClass = new QueryFilter()
         {
             WhereClause = string_0
         };
         IFeatureCursor       featureCursor            = ifeatureClass_0.Search(queryFilterClass, false);
         IFeatureConstruction featureConstructionClass = new FeatureConstruction();
         IWorkspaceEdit       workspace = (ifeatureClass_0 as IDataset).Workspace as IWorkspaceEdit;
         if (!workspace.IsBeingEdited())
         {
             workspace.StartEditing(false);
             workspace.StartEditOperation();
         }
         try
         {
             featureConstructionClass.PlanarizeLinesFromCursor(null, ifeatureClass_0, featureCursor, -1);
             workspace.StopEditOperation();
             workspace.StopEditing(true);
         }
         catch (Exception exception1)
         {
             Exception exception = exception1;
             MessageBox.Show(string.Concat("线打断出错. ", exception.Message));
             workspace.AbortEditOperation();
         }
         ComReleaser.ReleaseCOMObject(featureCursor);
     }
     else
     {
         MessageBox.Show("目标层不是一个线层.");
     }
 }
예제 #11
0
        /// <summary>
        /// 对街道、房屋实体进行编码
        /// </summary>
        /// <param name="pFeatureLayer">需要编码的图层</param>
        /// <param name="pENTIID">需要编码的字段名称</param>
        private static void CreateHouseCode(IFeatureLayer pFeatureLayer, string pENTIID)
        {
            #region 针对GUID编码来讲
            //遍历Feature
            IDataset       pDataset       = pFeatureLayer.FeatureClass as IDataset;
            IWorkspaceEdit pWorkspaceEdit = null;
            if (pDataset != null)
            {
                pWorkspaceEdit = pDataset.Workspace as IWorkspaceEdit;
                if (pWorkspaceEdit != null || pWorkspaceEdit.IsBeingEdited() == false)
                {
                    pWorkspaceEdit.StartEditing(true);
                    pWorkspaceEdit.StartEditOperation();
                }
                IFeatureCursor pFeatureCursor = pFeatureLayer.Search(null, false);

                //test
                int      test     = pFeatureLayer.FeatureClass.FeatureCount(null);
                IFeature pFeature = pFeatureCursor.NextFeature();
                while (pFeature != null)
                {
                    //获取单条Feature的某个字段值
                    int test2 = pFeature.Fields.FindFieldByAliasName(pENTIID);

                    string pGUID = System.Guid.NewGuid().ToString();
                    pFeature.set_Value(pFeature.Fields.FindFieldByAliasName(pENTIID), pGUID);
                    pFeature.Store();
                    pFeature = pFeatureCursor.NextFeature();
                }
                pWorkspaceEdit.StopEditing(true);
                pWorkspaceEdit.StopEditOperation();
            }

            #endregion
        }
예제 #12
0
        private void GetSelctionSet(IFeatureLayer pFeatureLayer, IGeometry pGeometry, bool bjustone, int Shift)
        {
            IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
            //没开启编辑的不可选择
            IDataset       pDataset       = pFeatureClass as IDataset;
            IWorkspaceEdit pWorkspaceEdit = pDataset.Workspace as IWorkspaceEdit;

            if (!pWorkspaceEdit.IsBeingEdited())
            {
                return;
            }
            switch (Shift)
            {
            case 1:       //增加选择结果集
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultAdd, bjustone);
                break;

            case 4:       //减少选择结果集
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultSubtract, bjustone);
                break;

            case 2:
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultXOR, bjustone);
                break;

            default:       //新建选择结果集
                ModPublic.GetSelctionSet(pFeatureLayer, pGeometry, pFeatureClass, esriSelectionResultEnum.esriSelectionResultNew, bjustone);
                break;
            }
        }
        private void StartEditing()
        {
            GetCurrentLayer();
            if (m_CurrentLayer == null)
            {
                return;
            }
            if ((IGeoFeatureLayer)m_CurrentLayer == null)
            {
                return;
            }

            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_CurrentLayer;
            IDataset      pDataset      = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null)
            {
                return;
            }

            IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;

            if (!pWorkspaceEdit.IsBeingEdited())
            {
                pWorkspaceEdit.StartEditing(true);
                pWorkspaceEdit.EnableUndoRedo();
            }
        }
예제 #14
0
        // 关闭feature的工作空间编辑状态
        public void StopEditing(IFeature pFeature)
        {
            try
            {
                IFeatureClass pFC      = pFeature.Table as IFeatureClass;
                IDataset      pDataset = pFC as IDataset;
                if (pDataset == null)
                {
                    return;
                }

                //如果数据已被修改,则提示用户是否保存
                IWorkspaceEdit pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                if (pWorkspaceEdit.IsBeingEdited())
                {
                    pWorkspaceEdit.StopEditing(true);
                }
                IActiveView pActiveView = m_SceneCtrl.Scene  as IActiveView;
                pActiveView.Refresh();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message.ToString());
            }
        }
예제 #15
0
 private void dataGridViewX_CellValueChanged(object sender, DataGridViewCellEventArgs e)
 {
     try
     {
         IFeature pfeature = advTree.SelectedNode.Tag as IFeature;
         if (pfeature != null)
         {
             IWorkspaceEdit iWE = (pfeature.Class as IDataset).Workspace as IWorkspaceEdit;
             if (!iWE.IsBeingEdited())
             {
                 iWE.StartEditing(false);
             }
             iWE.StartEditOperation();
             int fdpos = pfeature.Fields.FindFieldByAliasName(dataGridViewX[e.ColumnIndex - 1, e.RowIndex].Value.ToString());
             pfeature.set_Value(fdpos, dataGridViewX[e.ColumnIndex, e.RowIndex].Value.ToString());
             pfeature.Store();
             iWE.StopEditOperation();
             labelEditStatus.Text    = "已完成更改!";
             labelEditStatus.Visible = true;
             this.Refresh();
             iWE = null;
         }
     }
     catch
     {
         MessageBox.Show("请按正确的字段格式填写属性!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
     }
 }
        private void UpdateFeature(IFeature selectedFeature, ISegmentCollection polylineSegments)
        {
            ISegmentCollection polyline = new PolylineClass();

            polyline.AddSegmentCollection(polylineSegments);
            IFeatureClass  featureClass  = selectedFeature.Class as IFeatureClass;
            IDataset       dataset       = featureClass as IDataset;
            IWorkspaceEdit workspaceEdit = dataset.Workspace as IWorkspaceEdit;

            if (!(workspaceEdit.IsBeingEdited()))
            {
                return;
            }

            try
            {
                workspaceEdit.StartEditOperation();
                selectedFeature.Shape = polyline as IGeometry;
                selectedFeature.Store();
                workspaceEdit.StopEditOperation();
            }
            catch (Exception ex)
            {
                workspaceEdit.AbortEditOperation();
                MessageBox.Show("移动线段失败!!" + ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
예제 #17
0
 private void ToolStripMenuItem_Click(object sender, EventArgs e)
 {
     try
     {
         IDataset       dataset       = (IDataset)Variable.pAttributeTableFeatureLayer.FeatureClass;
         IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)dataset.Workspace;
         if (workspaceEdit.IsBeingEdited())
         {
             MessageBox.Show("地图处于编辑状态,暂时无法删除字段!");
             return;
         }
         if (MessageBox.Show(string.Format("确定要删除 {0} 字段吗?", this.columnName), "", MessageBoxButtons.OKCancel) == DialogResult.OK)
         {
             IFeatureClass featureClass = Variable.pAttributeTableFeatureLayer.FeatureClass;
             IFields       fields       = featureClass.Fields;
             IField        field        = fields.get_Field(this.columnIndex);
             featureClass.DeleteField(field);                   // 删除字段
             dataGridView1.Columns.RemoveAt(this.columnIndex);  // 删除列
             MessageBox.Show(string.Format("{0} 字段已删除!", this.columnName));
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\n" + ex.ToString(), "异常");
     }
 }
예제 #18
0
        public bool IsValid(object caller, ICSharpCode.Core.Condition condition)
        {
            bool            hasUndos = false;
            DF2DApplication app      = DF2DApplication.Application;

            if (app == null || app.Current2DMapControl == null)
            {
                return(false);
            }

            IWorkspaceEdit pWorkspaceEdit = Class.Common.CurWspEdit;

            if (pWorkspaceEdit == null)
            {
                return(false);
            }

            if (pWorkspaceEdit.IsBeingEdited())
            {
                pWorkspaceEdit.HasUndos(ref hasUndos);
                if (hasUndos)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
 //保存编辑
 private void barButtonItem3_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
 {
     if (pWorkspaceEdit == null)
     {
         return;
     }
     try
     {
         if (attributeEditObjectsList.Count != 0)
         {
             WriteAttributeToFeatureClass(featureLayer.FeatureClass);
         }
         startEdit = pWorkspaceEdit.IsBeingEdited();
         if (startEdit)
         {
             pWorkspaceEdit.StopEditing(true);
         }
         setButtonEnable(false);
         ctrlAttrubuteGrid1.SetGridEditable(false);
         toolStripStatusLabel1.Text = "";
         hasEdited = false;
         attributeEditObjectsList = new List <AttributeEditObject>();
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
         PS.Plot.Common.LogHelper.WriteLog(typeof(Form_Attribute), ex, "属性表编辑");
     }
 }
예제 #20
0
 private void tSB_AddField_Click(object sender, EventArgs e)
 {
     try
     {
         IDataset       dataset       = (IDataset)Variable.pAttributeTableFeatureLayer.FeatureClass;
         IWorkspaceEdit workspaceEdit = (IWorkspaceEdit)dataset.Workspace;
         if (workspaceEdit.IsBeingEdited())
         {
             MessageBox.Show("地图处于编辑状态,暂时无法新建字段!");
             return;
         }
         NewFieldFrm newFieldForm = new NewFieldFrm();
         if (newFieldForm.ShowDialog() == DialogResult.OK)
         {
             this.RefreshAttributeTable();
             int newColumnIndex = dataGridView1.Columns.Count - 1;
             dataGridView1.FirstDisplayedScrollingColumnIndex = newColumnIndex;  // 滚动到新字段对应的列
             MessageBox.Show(string.Format("{0} 字段新建成功!", this.dataGridView1.Columns[newColumnIndex].Name));
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message + "\n" + ex.ToString(), "异常");
     }
 }
예제 #21
0
        //IFeatureClass CreateFeature Example
        private IFeature IFeatureClass_Create(IFeatureClass featureClass, IGeometry pGeometry)
        {
            IWorkspaceEdit iWE = (featureClass as IDataset).Workspace as IWorkspaceEdit;

            if (!iWE.IsBeingEdited())
            {
                iWE.StartEditing(false);
            }
            iWE.StartEditOperation();
            IFeature feature = featureClass.CreateFeature();

            //Apply the constructed shape to the new features shape
            feature.Shape = pGeometry;
            //如果不是shp 则初始化子类型
            if ((featureClass as IDataset).Workspace.WorkspaceFactory.WorkspaceType != esriWorkspaceType.esriFileSystemWorkspace)
            {
                ISubtypes    subtypes    = (ISubtypes)featureClass;
                IRowSubtypes rowSubtypes = (IRowSubtypes)feature;
                if (subtypes.HasSubtype)         // does the feature class have subtypes?
                {
                    rowSubtypes.SubtypeCode = 1; //in this example 1 represents the Primary Pipeline subtype
                }
                // initalize any default values that the feature has
                rowSubtypes.InitDefaultValues();
                //Commit the default values in the feature to the database
            }
            feature.Store();
            iWE.StopEditOperation();
            //iWE.StopEditing(true);
            iWE = null;
            return(feature);
        }
예제 #22
0
        //IFeatureClass CreateFeature Example
        private IFeature IFeatureClass_Create(IFeatureClass featureClass, IGeometry pGeometry)
        {
            if (featureClass.ShapeType != ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon)
            {
                return(null);
            }
            IWorkspaceEdit iWE = (featureClass as IDataset).Workspace as IWorkspaceEdit;

            if (!iWE.IsBeingEdited())
            {
                iWE.StartEditing(false);
            }

            IFeature feature = featureClass.CreateFeature();

            //Apply the constructed shape to the new features shape
            feature.Shape = pGeometry;
            ISubtypes    subtypes    = (ISubtypes)featureClass;
            IRowSubtypes rowSubtypes = (IRowSubtypes)feature;

            if (subtypes.HasSubtype)         // does the feature class have subtypes?
            {
                rowSubtypes.SubtypeCode = 1; //in this example 1 represents the Primary Pipeline subtype
            }
            // initalize any default values that the feature has
            rowSubtypes.InitDefaultValues();
            //Commit the default values in the feature to the database
            feature.Store();
            iWE.StopEditing(true);
            iWE = null;
            return(feature);
        }
예제 #23
0
        //======================================================================================================

        #region 判断要素是否在同一图层以及图层的编辑状态
        //===================================================================================================
        //陈胜鹏  2009-08-19 添加
        /// <summary>
        /// 从图面上获取选中要素所在数据集的工作空间,判断是否开启编辑
        /// </summary>
        /// <param name="pMap">当前加载了数据的地图对象</param>
        /// <returns></returns>
        private bool GetDatasetEditState(ESRI.ArcGIS.Carto.IMap pMap)
        {
            int    pSameLyr = 0; //记录要素是否为同层
            ILayer pLayer   = null;

            //判断选择的要素是否处于同一个图层
            for (int i = 0; i < pMap.LayerCount; i++)
            {
                IFeatureLayer     pFeatLyr = null;
                IFeatureSelection pFeatSel = null;
                pLayer = pMap.get_Layer(i);
                if (pLayer is IGroupLayer)
                {
                    if (pLayer.Name == "示意图")
                    {
                        continue;
                    }
                    ICompositeLayer pComLayer = pLayer as ICompositeLayer;
                    for (int j = 0; j < pComLayer.Count; j++)
                    {
                        ILayer mLayer = pComLayer.get_Layer(j);
                        pFeatLyr = mLayer as IFeatureLayer;
                        if (pFeatLyr != null)
                        {
                            pFeatSel = pFeatLyr as IFeatureSelection;
                            if (pFeatSel.SelectionSet.Count > 0)
                            {
                                pSameLyr     = pSameLyr + 1;
                                m_MergeLayer = pFeatLyr;//当只有一个图层被选中时,pFeatLyr就是要进行融合的目标图层
                            }
                        }
                    }
                }

                pFeatLyr = pLayer as IFeatureLayer;
                if (pFeatLyr != null)
                {
                    pFeatSel = pFeatLyr as IFeatureSelection;
                    if (pFeatSel.SelectionSet.Count > 0)
                    {
                        pSameLyr     = pSameLyr + 1;
                        m_MergeLayer = pFeatLyr;//当只有一个图层被选中时,pFeatLyr就是要进行融合的目标图层
                    }
                }
            }
            //如果选择的要素所在的层数不是1,即要素不在同一个层
            if (pSameLyr != 1)
            {
                return(false);
            }

            //一系列的QI后获得IWorkspaceEdit接口对象pWSE
            IFeatureClass  pFeatCls = m_MergeLayer.FeatureClass as IFeatureClass;
            IDataset       pDS      = pFeatCls as IDataset;
            IWorkspace     pWs      = pDS.Workspace as IWorkspace;
            IWorkspaceEdit pWSE     = pWs as IWorkspaceEdit;

            return(pWSE.IsBeingEdited());  //返回编辑状态
        }
예제 #24
0
        public void executeRegionGroup()
        {
            createOutRaster();
            if (OutRaster == null)
            {
                Console.WriteLine("not all inputs specified");
                return;
            }
            IWorkspaceEdit wksE   = (IWorkspaceEdit)vWks;
            bool           weEdit = true;

            if (wksE.IsBeingEdited())
            {
                weEdit = false;
            }
            else
            {
                wksE.StartEditing(false);
            }
            wksE.StartEditOperation();
            Console.WriteLine("Counter = " + counter.ToString());
            int readclmsStep = PixelBlockWidth + 2;
            int readrwsStep  = PixelBlockHeight + 2;

            IPnt outloc = new PntClass();
            IPnt inloc  = new PntClass();

            try
            {
                for (int rp = 0; rp < rws; rp += PixelBlockHeight)     //rws
                {
                    for (int cp = 0; cp < clms; cp += PixelBlockWidth) //clms
                    {
                        Console.WriteLine("Write Raster location = " + cp.ToString() + ":" + rp.ToString());
                        Console.WriteLine("Read Raster location = " + (cp - 1).ToString() + ":" + (rp - 1).ToString());
                        outloc.SetCoords(cp, rp);
                        inloc.SetCoords(cp - 1, rp - 1);
                        middleRowColumn(outloc);
                    }
                }
                IRaster2            rs2     = (IRaster2)OutRaster;
                IRasterDataset      rsDset  = rs2.RasterDataset;
                IRasterDatasetEdit2 rsDsetE = (IRasterDatasetEdit2)rsDset;
                rsDsetE.AlterAttributeTable(vatTable);
                wksE.StopEditOperation();
                if (weEdit)
                {
                    wksE.StopEditing(true);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            finally
            {
            }
            return;
        }
예제 #25
0
        /// <summary>
        /// 开始编辑
        /// </summary>
        /// <param name="player"></param>
        public static void StartEditing(ILayer player, string strOperator)
        {
            // 开始编辑前检查编辑状态
            m_strOperator  = strOperator;
            m_CurrentLayer = player;
            if (m_CurrentLayer == null)
            {
                return;
            }

            if ((IGeoFeatureLayer)m_CurrentLayer == null)
            {
                return;
            }
            IFeatureLayer pFeatureLayer = (IFeatureLayer)m_CurrentLayer;
            IDataset      pDataset      = (IDataset)pFeatureLayer.FeatureClass;

            if (pDataset == null)
            {
                return;
            }

            // Start editing, making sure that undo/redo are enabled
            pWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
            if (!pWorkspaceEdit.IsBeingEdited())
            {
                try
                {
                    pWorkspaceEdit.StartEditing(true);
                    pWorkspaceEdit.StartEditOperation();
                    pWorkspaceEdit.EnableUndoRedo();
                }
                catch
                {
                    if (pWorkspaceEdit.IsBeingEdited())
                    {
                        pWorkspaceEdit.StopEditOperation();
                        pWorkspaceEdit.StopEditing(true);
                        pWorkspaceEdit.StartEditing(true);
                        pWorkspaceEdit.StartEditOperation();
                        pWorkspaceEdit.EnableUndoRedo();
                    }
                }
            }
        }
예제 #26
0
        /// <summary>
        /// Stop Edit.
        /// </summary>
        /// <param name="workspace"></param>
        /// <param name="saveEdits"></param>
        public static void StopEdit(IWorkspace workspace, bool saveEdits)
        {
            IWorkspaceEdit iWorkspaceEdit = workspace as IWorkspaceEdit;

            if (iWorkspaceEdit.IsBeingEdited())
            {
                iWorkspaceEdit.StopEditing(saveEdits);
            }
        }
예제 #27
0
        public void StartDataTable()
        {
            IWorkspaceEdit workspace = (this.itable_0 as IDataset).Workspace as IWorkspaceEdit;

            if (!workspace.IsBeingEdited())
            {
                workspace.StartEditing(false);
            }
        }
예제 #28
0
        public void SaveDataTable()
        {
            IWorkspaceEdit workspace = (this.itable_0 as IDataset).Workspace as IWorkspaceEdit;

            if (workspace.IsBeingEdited())
            {
                workspace.StopEditing(true);
            }
        }
예제 #29
0
        //写历史
        private void WriteHisOfFeatureClass(IFeatureClass pCurFeatureClass, IFeatureClass pHisFeatureClass, IGeometry pGeometry)
        {
            if (pCurFeatureClass == null)
            {
                return;
            }
            if (pHisFeatureClass == null)
            {
                return;
            }
            IWorkspace pTagetWorkspace = null;

            try
            {
                pTagetWorkspace = (pHisFeatureClass as IDataset).Workspace;
            }
            catch
            { }
            IWorkspaceEdit wsEdit = pTagetWorkspace as IWorkspaceEdit;

            if (wsEdit.IsBeingEdited() == true)
            {
                wsEdit.StopEditing(true);
            }
            wsEdit.StartEditing(false);
            wsEdit.StartEditOperation();
            ISpatialFilter pFilter = new SpatialFilterClass();

            pFilter.Geometry   = pGeometry;
            pFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
            IFeatureCursor pFeaCursor = pCurFeatureClass.Search(pFilter, false);

            if (pFeaCursor != null)
            {
                Exception       err0  = null;
                System.DateTime pDate = DateTime.Today;
                NewFeatures(pHisFeatureClass, pFeaCursor, "ZZRQ", DateTime.Today.ToShortDateString() as object, true, null, out err0);

                System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeaCursor);
                pFeaCursor = null;
                if (err0 == null)
                {
                    wsEdit.StopEditOperation();
                    wsEdit.StopEditing(true);
                }
                else
                {
                    wsEdit.StopEditOperation();
                    wsEdit.StopEditing(false);
                }
            }
            else
            {
                wsEdit.StopEditOperation();
                wsEdit.StopEditing(false);
            }
        }
        public override void SetValue(object component, object value)
        {
            IRow pRow = component as IRow;

            if (m_CodedValueDomain != null)
            {
                if (!m_UseCVDomain)
                {
                    if (!((IDomain)m_CodedValueDomain).MemberOf(value))
                    {
                        System.Windows.Forms.MessageBox.Show(string.Format(
                                                                 "Value {0} is not valid for coded value domain {1}", value.ToString(), ((IDomain)m_CodedValueDomain).Name));
                        return;
                    }
                }
                else
                {
                    bool foundMatch = false;
                    for (int i = 0; i < m_CodedValueDomain.CodeCount; i++)
                    {
                        if (value.ToString() == m_CodedValueDomain.get_Name(i))
                        {
                            foundMatch = true;
                            value      = i;
                            break;
                        }
                    }

                    if (!foundMatch)
                    {
                        System.Windows.Forms.MessageBox.Show(string.Format(
                                                                 "Value {0} is not valid for coded value domain {1}", value.ToString(), ((IDomain)m_CodedValueDomain).Name));
                        return;
                    }
                }
            }

            pRow.set_Value(m_FieldIndex, value);
            bool weStartedEditing = false;

            if (m_WorkspaceEdit != null)
            {
                if (!m_WorkspaceEdit.IsBeingEdited())
                {
                    m_WorkspaceEdit.StartEditing(false);
                    weStartedEditing = true;
                }
                m_WorkspaceEdit.StartEditOperation();
                pRow.Store();
                m_WorkspaceEdit.StopEditOperation();

                if (weStartedEditing)
                {
                    m_WorkspaceEdit.StopEditing(true);
                }
            }
        }
        public void ProcessFeature(IWorkspaceEdit iwe, IFeatureLayer ifl_active, IRow rw)
        {
            double value = double.NaN;

            if (CoordinateSystem == "")
            {
                CoordinateSystem = ((IFeature)rw).Shape.SpatialReference.Name;
            }

            if (this.LinearUnit == null || this.LinearUnit == "")
            {
                if (fieldTier == 2)
                {
                    LinearUnit = rw.get_Value(GetFieldUnitIndex()).ToString();
                }

                if (this.LinearUnit == null || this.LinearUnit.Trim() == "")
                {
                    LinearUnit = GetSpatialReferenceLinearUnit(((IFeature)rw).Shape.SpatialReference);
                }
            }

            if (LinearUnit.IndexOf("meter", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                if (useArealUnit)
                {
                    currentAreaUnit = esriAreaUnits.esriSquareMeters;
                    LinearUnit = "Square Meters";
                }
                else
                {
                    currentLinearUnit = esriUnits.esriMeters;
                }
            }
            else if (LinearUnit.IndexOf("foot", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                if (useArealUnit)
                {
                    currentAreaUnit = esriAreaUnits.esriSquareFeet;
                    LinearUnit = "Square Feet";
                }
                else
                {
                    currentLinearUnit = esriUnits.esriFeet;
                }
            }
            else if (LinearUnit.IndexOf("acre", 0, StringComparison.CurrentCultureIgnoreCase) > -1)
            {
                currentAreaUnit = esriAreaUnits.esriAcres;
                currentLinearUnit = esriUnits.esriUnknownUnits;
                LinearUnit = "Acres";
            }

            if (doReCalcValues || !double.TryParse(rw.get_Value(GetFieldIndex()).ToString(), out value) || value == double.NaN || value == 0.0)
            {
                value = DoMeasure(rw);

                //try writing the (single) measured value to the table
                try
                {
                    IFeature feat = (IFeature)rw;

                    //if we are re-calculating all values, there is no need to start editing on each row
                    if (!doReCalcValues)
                    {
                        if (!iwe.IsBeingEdited())
                            iwe.StartEditing(true);

                        iwe.StartEditOperation();
                    }

                    feat.set_Value(GetFieldIndex(), value);
                    feat.set_Value(GetFieldUnitIndex(), LinearUnit);
                    feat.Store();
                }
                catch (Exception err)
                {
                }
                finally
                {
                    if (!doReCalcValues)
                    {
                        iwe.StopEditOperation();

                        if (iwe.IsBeingEdited())
                            iwe.StopEditing(true);

                        //there may be more than one row that requires editing
                        doReCalcValues = true;
                    }
                }
            }

            values.Add(value);
        }