Ejemplo n.º 1
0
        private void gvResult_DoubleClick(object sender, EventArgs e)
        {
            if (this.m_ContentType == enumContentType.Rule)
            {
                return;
            }

            DataRow rowError = gvResult.GetFocusedDataRow();

            if (rowError == null)
            {
                return;
            }

            if (this.m_HookHelper.FocusMap != null)
            {
                IMap theMap = this.m_HookHelper.FocusMap;
                theMap.ClearSelection();

                string strTargetLayer = rowError[Field_Name_TargetLayer] as string;
                if ((enumErrorType)rowError["ErrorType"] == enumErrorType.Topology)
                {
                    strTargetLayer = rowError["TPTC"] as string;
                }

                MapLayersController mapController = new MapLayersController(theMap);
                mapController.SetAllLayersVisible(false);
                mapController.SetLayerVisible(strTargetLayer, true);
                if (rowError.Table.Columns.Contains(Field_Name_ReferLayer))
                {
                    string strReferLayer = rowError[Field_Name_ReferLayer] as string;
                    mapController.SetLayerVisible(strReferLayer, true);
                }

                IFeature fRefer = null;
                IFeature fError = GetErrorFeature(rowError, ref fRefer);
                if (this.SelectedErrorFeatureChanged != null)
                {
                    this.SelectedErrorFeatureChanged.Invoke(fError, fRefer);
                }

                //if (fRefer!=null && this.SelectedReferFeatureChanged != null)
                //    this.SelectedReferFeatureChanged.Invoke(fRefer);

                if (fError != null)
                {
                    Hy.Common.Utility.Esri.MapOperAPI.ZoomToFeature(Control.FromHandle((IntPtr)(this.m_HookHelper.Hook as IMapControl2).hWnd) as AxMapControl, fError.Shape);
                    Hy.Common.Utility.Esri.MapOperAPI.FlashGeometry(this.m_HookHelper.Hook as IMapControl4, fError.Shape);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Sets the task.
        /// </summary>
        /// <param name="task">The task.</param>
        public void SetTask(CheckTask task)
        {
            XGifProgress progressbar = new XGifProgress();

            try
            {
                //如果task为null则认为释放资源
                if (task == null)
                {
                    UCDispose();
                    return;
                }

                //如果不为空,做处理
                m_CurrentTask = task;

                //如果打开新建的任务
                progressbar.ShowHint("正在打开当前质检任务.....");
                //初始化规则树

                this.ucRulesTree.CurrentSchemaId = task.SchemaID;
                this.ucRulesTree.CurrentTaskName = task.Name;
                //采用委托,在创建此控件的线程上调用加载tree方法,防止出现“当前对象正在其他地方使用”的错误;
                LoadRules Load = new LoadRules(this.ucRulesTree.LoadRulesTree);
                this.BeginInvoke(Load);

                this.ucResult.CurrentTask = m_CurrentTask;
                if (File.Exists(task.GetMXDFile()))
                {
                    //打开配置的mxd模板图层
                    UcMap.LoadMxFile(task.GetMXDFile());
                    TocControl.SetBuddyControl(UcMap.Object);
                    TocControl.Update();
                    UcMap.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                    m_MapLayersController = new MapLayersController(UcMap.Map);
                }
                else
                {
                    progressbar.Hide();
                    MessageBoxApi.ShowErrorMessageBox(task.GetMXDFile() + "不存在!无法打开此任务");
                    return;
                }
                //加载结果
                if (task.ResultConnection != null)
                {
                    //加载已经检查完成的任务
                    this.TabCtrl.ShowTabHeader         = DefaultBoolean.True;
                    this.TabCtrl.SelectedTabPage       = this.TabPageCheckResults;
                    this.ucResultsTree.CurrentSchemaId = task.SchemaID;
                    this.ucResultsTree.CurrentTaskName = task.Name;
                    Sundary.ResultDbOper resultOper = new Hy.Check.UI.UC.Sundary.ResultDbOper(task.ResultConnection);
                    this.ucResultsTree.LayersResultsDt   = resultOper.GetLayersResults();
                    this.ucResultsTree.ResultsDt         = resultOper.GetAllResults();
                    this.ucResultsTree.CheckResultsCount = resultOper.GetResultsCount();
                    this.ucResultsTree.LoadResultsTree();
                }
                else
                {
                    TabCtrl.SelectedTabPage    = this.TabPageRules;
                    this.TabCtrl.ShowTabHeader = DefaultBoolean.False;
                    this.ucResultsTree.CurrentTreeList.Nodes.Clear();
                }
                //加载top错误图层到map
                if (task.TopoWorkspace != null)
                {
                    //获取当前任务子库中的图层集名
                    m_pDatasetSon = TopoOperAPI.GetCurrentSonDataSet(task.TopoWorkspace as IFeatureWorkspace);
                    // 获取子库中所有的要素类的名称
                    TopoOperAPI.GetFcTopoNameInSon(UcMap, task.TopoWorkspace as IFeatureWorkspace, m_pDatasetSon);
                }
                this.dockTree.Visibility   = DockVisibility.Visible;
                this.dockTree.Text         = "规则列表";
                this.dockTree.Width        = 260;
                this.dockLegend.Visibility = DockVisibility.Visible;
            }
            catch (Exception ex)
            {
                progressbar.Hide();
                //GT_CONST.LogAPI.CheckLog.AppendErrLogs(ex.Message);
                XtraMessageBox.Show("打开结果库失败!", "提示");
            }
            finally
            {
                progressbar.Hide(); //关闭打开结果库进度服务
            }
        }
Ejemplo n.º 3
0
        private IFeature GetFeature(DataRow rowError, string strLayerName)
        {
            IMap theMap = this.m_HookHelper.FocusMap;
            MapLayersController mapController = new MapLayersController(theMap);
            enumErrorType       errType       = (enumErrorType)Convert.ToInt32(rowError["ErrorType"]);

            switch (errType)
            {
            case enumErrorType.Topology:
            {
                ITopologyLayer topoLayerTarget = mapController.GetLayer(strLayerName) as ITopologyLayer;
                if (topoLayerTarget == null)
                {
                    return(null);
                }

                ITopology topology = topoLayerTarget.Topology;
                IErrorFeatureContainer errFeatureContainer = topology as IErrorFeatureContainer;
                esriTopologyRuleType   ruleType            = (esriTopologyRuleType)Convert.ToInt32(rowError[Field_Name_TopologyRuleType]);
                //string strGeoType = rowError[Field_Name_TopologyGeometryType] as string;
                //esriGeometryType geoType = (strGeoType == "点" ? esriGeometryType.esriGeometryPoint : (strGeoType == "线" ? esriGeometryType.esriGeometryLine : esriGeometryType.esriGeometryPolygon));
                esriGeometryType geoType = (esriGeometryType)Convert.ToInt32(rowError[Field_Name_TopologyGeometryType]);
                int sourceClassID        = (int)rowError["SourceLayerID"];
                int sourceOID            = (int)rowError["OID"];
                int targetClassID        = (int)rowError["TargetLayerID"];
                int targetOID            = Convert.ToInt32(rowError["OID2"]);

                return(errFeatureContainer.get_ErrorFeature((topology as IGeoDataset).SpatialReference, ruleType, geoType, sourceClassID, sourceOID, targetClassID, targetOID) as IFeature);
            }
            break;

            case enumErrorType.Normal:
            {
                IFeatureLayer flyrTarget = mapController.GetLayer(strLayerName) as IFeatureLayer;
                if (flyrTarget == null)
                {
                    return(null);
                }

                // 改为优先从OID查找定位
                if (rowError.Table.Columns.Contains(Field_Name_TargetOID) && rowError[Field_Name_TargetOID] != DBNull.Value)
                {
                    return(flyrTarget.FeatureClass.GetFeature((int)rowError[Field_Name_TargetOID]));
                }
                else if (rowError.Table.Columns.Contains(Field_Name_TargetBSM) && !string.IsNullOrEmpty(rowError[Field_Name_TargetBSM] as string))
                {
                    IQueryFilter qFilter    = new QueryFilterClass();
                    IFields      fields     = flyrTarget.FeatureClass.Fields;
                    int          fieldIndex = fields.FindField("BSM");
                    if (fieldIndex < 0)
                    {
                        return(null);
                    }

                    IField bsmField = fields.get_Field(fieldIndex);
                    if (bsmField.Type == esriFieldType.esriFieldTypeInteger)
                    {
                        qFilter.WhereClause = string.Format("BSM={0}", rowError[Field_Name_TargetBSM]);
                    }
                    else
                    {
                        qFilter.WhereClause = string.Format("BSM='{0}'", rowError[Field_Name_TargetBSM]);
                    }
                    IFeatureCursor fCursor = flyrTarget.FeatureClass.Search(qFilter, false);

                    return(fCursor.NextFeature());
                }
                else
                {
                    return(null);
                }
            }

            default: return(null);
            }
        }