Example #1
0
 public void ClearTrack()
 {
     try
     {
         mSceneControl.Bubbles.Clear();
         TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer;
         trackinglayer.Clear();
         m_rec = Rectangle2D.Empty;
         mSceneControl.Scene.Refresh();
         this.mDataGridView.Rows.Clear();
         this.mDataGridView.Columns.Clear();
         mSceneControl.Tracking       -= new Tracking3DEventHandler(bd_sceneControl_Tracking);
         mSceneControl.Tracked        -= new Tracked3DEventHandler(bd_sceneControl_Tracked);
         mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObjectSelected);
         Layer3Ds m_layer = mSceneControl.Scene.Layers;
         foreach (Layer3D layer in m_layer)
         {
             if (layer.Selection != null)
             {
                 layer.Selection.Clear();
             }
         }
     }
     catch (System.Exception ex)
     {
         Trace.WriteLine(ex.Message);
     }
 }
 public void OwnerBar()
 {
     try
     {
         Layer3Ds       mLayer3D = mSceneControl.Scene.Layers;
         Layer3DDataset mLayer   = null;
         Recordset      mRecord  = null;
         DatasetVector  mData    = null;
         String         str      = "";
         String         str1     = "";
         for (int i = 0; i < mOwnerStatist.GetPipeStatist.Count; i++)
         {
             mLayer = mLayer3D[mOwnerStatist.GetPipeStatist[i].ToString() + "@" + mDataSourceName] as Layer3DDataset;
             mData  = mLayer.Dataset as DatasetVector;
             for (int k = 0; k < mOwnerStatist.GetOwnerStatist.Count; k++)
             {
                 mRecord = mData.Query("OwnerShip='" + mOwnerStatist.GetOwnerStatist[k].ToString() + "'", CursorType.Dynamic);
                 mOwnerCount.Add(mRecord.RecordCount.ToString());
             }
         }
         OwnerCreate();
     }
     catch (System.Exception ex)
     {
         Trace.WriteLine(ex.Message);
     }
 }
        /// <summary>
        /// 删除缓冲区
        /// </summary>
        public void DeleteWhole()
        {
            try
            {
                mRecordset.DeleteAll();

                if (mLayerBuffer != null)
                {
                    mSceneControl.Scene.Layers.Remove(mLayerBuffer.Name);
                    mLayerBuffer = null;
                }
                mSceneControl.Scene.Refresh();

                if (mBufferDataset != null)
                {
                    mDatasource.Datasets.Delete(mBufferDataset.Name);
                    mBufferDataset = null;
                }
                Layer3Ds mlayer = mSceneControl.Scene.Layers;
                foreach (Layer3D layer in mlayer)
                {
                    if (layer.Selection != null)
                    {
                        layer.Selection.Clear();
                    }
                }
            }
            catch (System.Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Example #4
0
        public void LayerStyle_Ctrl()
        {
            Layer3Ds layer3ds = this.m_sceneControl.Scene.Layers;

            if (layer3ds.Count <= 0)
            {
                return;
            }
            TreeNode             treeNode     = this.m_LayersControl.Layer3DsTree.SelectedNode;
            Layer3DsTreeNodeBase treeNodeBase = treeNode as Layer3DsTreeNodeBase;

            if (treeNodeBase == null)
            {
                MessageBox.Show("请先选择一矢量图层");
                return;
            }
            Layer3D layer3D = treeNodeBase.GetData() as Layer3D;

            if (layer3D == null)
            {
                return;
            }
            if (layer3D.Type == Layer3DType.Dataset || layer3D.Type == Layer3DType.VectorFile)
            {
                if (m_DlgSetLayerStyle == null || m_DlgSetLayerStyle.IsDisposed)
                {
                    m_DlgSetLayerStyle = new DlgSetLayerStyle();
                }

                m_DlgSetLayerStyle.Initialize(m_sceneControl, layer3D, false);
                m_DlgSetLayerStyle.StartPosition = FormStartPosition.CenterScreen;
                m_DlgSetLayerStyle.Show();
            }
        }
Example #5
0
 /// <summary>
 /// 寻找目标点,进行飞行
 /// </summary>
 public void TargetPoint()
 {
     try
     {
         if (mFlyPoint3D.X == 0 && mFlyPoint3D.Y == 0 && mFlyPoint3D.Z == 0)
         {
             Layer3Ds       bd_3DLayers      = mSceneControl.Scene.Layers;
             Layer3DDataset bd_3DLayer       = bd_3DLayers[0] as Layer3DDataset;
             double         bd_3DLayerHeight = bd_3DLayer.Bounds.Height;
             double         bd_3DLayerWidth  = bd_3DLayer.Bounds.Width;
             int            PointX           = (int)(bd_3DLayer.Bounds.Left + bd_3DLayerWidth / 2);
             int            PointY           = (int)(bd_3DLayer.Bounds.Bottom + bd_3DLayerHeight / 2);
             Point          FlyPoint         = new Point(PointX, PointY);
             mFlyPoint3D = mSceneControl.Scene.PixelToGlobe(FlyPoint);
             FlyTo(200, mFlyPoint3D.X, mFlyPoint3D.Y, 0);
         }
         else
         {
             FlyTo(200, mFlyPoint3D.X, mFlyPoint3D.Y, 0);
         }
     }
     catch (Exception)
     {
     }
 }
Example #6
0
        //设置阴影分析范围
        private void cb_ShadowType_SelectedIndexChanged(object sender, EventArgs e)
        {
            int index = this.cb_ShadowType.SelectedIndex;

            if (index == 0)
            {
                m_shadowType = ShadowType.ALL;
                m_selection  = null;
            }
            else if (index == 1)
            {
                m_shadowType = ShadowType.SELECTION;
            }
            else if (index == 2)
            {
                m_shadowType = ShadowType.NONE;
                m_selection  = null;
            }

            Layer3Ds layers = m_sceneControl.Scene.Layers;

            //设置阴影类型
            for (int i = 0; i < layers.Count; i++)
            {
                Layer3D layer = layers[i];
                layer.ShadowType = m_shadowType;
            }
        }
Example #7
0
        //加载缓存
        private void AddCache_ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.openFileDialog.Title            = "打开三维缓存文件";
            this.openFileDialog.Filter           = "所有支持的三维缓存文件(*.sci, *.scv, *.scp,*.sci3d, *.sct, *.sit,*.gci,*.scm)|*.sci;*.scv;*.scp;*.sci3d;*.sct;*.sit;*.gci;*.scm";
            this.openFileDialog.InitialDirectory = Directory.GetCurrentDirectory();
            if (this.openFileDialog.ShowDialog() == DialogResult.OK)
            {
                String   fileName  = this.openFileDialog.FileName;
                String   extention = System.IO.Path.GetExtension(fileName);
                Layer3D  layer3D   = null;
                Layer3Ds layer3ds  = this.m_sceneControl.Scene.Layers;

                switch (extention)
                {
                case ".sci":
                case ".sci3d":
                case ".sit":
                case ".gci":
                {
                    layer3D = layer3ds.Add(fileName, Layer3DType.ImageFile, true);
                    layer3D.UpdateData();
                    this.m_sceneControl.Scene.Refresh();
                    this.m_sceneControl.Scene.EnsureVisible(layer3D.Bounds);
                    break;
                }

                case ".scv":
                {
                    layer3D = layer3ds.Add(fileName, Layer3DType.VectorFile, true);
                    //layer3D.UpdateData();
                    this.m_sceneControl.Scene.Refresh();
                    this.m_sceneControl.Scene.EnsureVisible(layer3D.Bounds);

                    break;
                }

                case ".scp":
                {
                    layer3D = layer3ds.Add(fileName, Layer3DType.OSGB, true);
                    this.m_sceneControl.Scene.Refresh();
                    //this.m_sceneControl.Scene.EnsureVisible(layer3D.Bounds);
                    if (layer3D != null)
                    {
                        m_layerOSGB = layer3D as Layer3DOSGBFile;
                    }
                    break;
                }

                case ".sct":
                {
                    TerrainLayer terrainlayer3D = this.m_sceneControl.Scene.TerrainLayers.Add(fileName, true);
                    this.m_sceneControl.Scene.Refresh();
                    this.m_sceneControl.Scene.EnsureVisible(terrainlayer3D.Bounds);

                    break;
                }
                }
            }
        }
Example #8
0
        internal static void Terminate()
        {
            for (int loop = 0; loop < 3; loop++)
            {
                SoundSources.DestroyAll();

                Cursors.DestroyAll();

                Texture2Ds.DestroyAll();
                CubemapTextures.DestroyAll();
                Fonts.DestroyAll();
                Chip2Ds.DestroyAll();

                Shader2Ds.DestroyAll();
                Shader3Ds.DestroyAll();
                Material2Ds.DestroyAll();
                Material3Ds.DestroyAll();
                MaterialPropertyBlocks.DestroyAll();

                ImagePackages.DestroyAll();

                Effects.DestroyAll();

                Meshs.DestroyAll();
                Deformers.DestroyAll();
                Models.DestroyAll();
                MassModels.DestroyAll();
                Terrain3Ds.DestroyAll();

                KeyframeAnimations.DestroyAll();
                AnimationSources.DestroyAll();

                Scenes.DestroyAll();

                Layer2Ds.DestroyAll();
                Object2Ds.DestroyAll();

                Layer3Ds.DestroyAll();
                Object3Ds.DestroyAll();

                PostEffects.DestroyAll();
                Transitions.DestroyAll();

                StaticFiles.DestroyAll();
                StreamFiles.DestroyAll();

                Shapes.DestroyAll();

                //Profilers.DestroyAll();

                Collector.Collect();
                System.GC.Collect();
                System.GC.WaitForPendingFinalizers();
                System.GC.Collect();
                Collector.Collect();
            }
        }
Example #9
0
        //刷新场景
        private void btn_RefreshScene_Click(object sender, EventArgs e)
        {
            Layer3Ds layers = this.m_sceneControl.Scene.Layers;

            for (int i = 0; i < layers.Count; i++)
            {
                Layer3D layer = layers[i];
                layer.UpdateData();
            }
            this.m_sceneControl.Scene.Refresh();
        }
Example #10
0
        /// <summary>
        /// 找出横断面线与管线相交的断点
        /// </summary>
        public void CrossSecLine()
        {
            try
            {
                Layer3Ds m_layer = mSceneControl.Scene.Layers;
                foreach (Layer3D mlayer in m_layer)
                {
                    if (mlayer.Selection != null)
                    {
                        mlayer.Selection.Clear();
                    }
                }

                QueryParameter para = new QueryParameter();
                para.HasGeometry        = true;
                para.SpatialQueryMode   = SpatialQueryMode.Intersect;
                para.SpatialQueryObject = mRec2D;
                Recordset      recordset = null;
                Layer3DDataset layer     = null;

                switch (mPipeType[0].ToString())
                {
                case "排水管网":
                    recordset = mUseData.OutWaterNetWork.Query(para);
                    layer     = mUseData.OutWaterLines;
                    break;

                case "给水管网":
                    recordset = mUseData.SupplyWaterNetWork.Query(para);
                    layer     = mUseData.SupplyWaterLines;
                    break;

                case "电力管网":
                    recordset = mUseData.ElectricNetWork.Query(para);
                    layer     = mUseData.ElectricLayer;
                    break;
                }

                List <Int32> ids = new List <int>(recordset.RecordCount);
                while (!recordset.IsEOF)
                {
                    ids.Add(recordset.GetID());
                    recordset.MoveNext();
                }
                layer.Selection.AddRange(ids.ToArray());
                layer.Selection.UpdateData();
                layer.Selection.Style.LineColor = Color.GreenYellow;
                mSceneControl.Scene.Refresh();
            }
            catch (Exception ex)
            {
                Trace.Write(ex.Message);
            }
        }
Example #11
0
        internal static void Update()
        {
            if (Collector.Collect())
            {
                SoundSources.Collect();

                Cursors.Collect();

                Texture2Ds.Collect();
                CubemapTextures.Collect();
                Fonts.Collect();
                Chip2Ds.Collect();

                Shader2Ds.Collect();
                Shader3Ds.Collect();
                Material2Ds.Collect();
                Material3Ds.Collect();
                MaterialPropertyBlocks.Collect();

                ImagePackages.Collect();
                MediaPlayers.Collect();

                Effects.Collect();

                Meshs.Collect();
                Deformers.Collect();
                Models.Collect();
                MassModels.Collect();
                Terrain3Ds.Collect();

                KeyframeAnimations.Collect();
                AnimationSources.Collect();
                AnimationClips.Collect();

                Scenes.Collect();

                Layer2Ds.Collect();
                Object2Ds.Collect();

                Layer3Ds.Collect();
                Object3Ds.Collect();

                PostEffects.Collect();

                Transitions.Collect();

                StaticFiles.Collect();
                StreamFiles.Collect();

                Shapes.Collect();
                Collider2Ds.Collect();
            }
        }
Example #12
0
        private void Scene_Opened(object sender, EventArgs e)
        {
            Layer3Ds layers = this.m_SceneControl.Scene.Layers;

            for (int i = 0; i < layers.Count; i++)
            {
                Layer3D layer = layers[i];
                if (layer.Type == Layer3DType.OSGB)
                {
                    m_LayerOSGB = layer as Layer3DOSGBFile;
                }
            }
        }
Example #13
0
        public bool SetQueryType(OSGBQueryType queryType)
        {
            m_queryType = queryType;

            m_srcDatasetVector = this.GetDataset();

            if (m_srcDatasetVector == null)
            {
                MessageBox.Show("找不到指定的面数据集!");
                return(false);
            }

            if (m_queryType == OSGBQueryType.SQL)
            {
                this.gb_SqlQuery.Enabled       = true;
                this.gb_BufferQuery.Enabled    = false;
                m_sceneControl.ObjectSelected -= new SuperMap.UI.ObjectSelectedEventHandler(m_sceneControl_ObjectSelected);
            }
            else
            {
                this.gb_SqlQuery.Enabled    = false;
                this.gb_BufferQuery.Enabled = true;

                //缓存区分析,需要先把原始数据集添加到场景中
                if (m_sceneControl.Scene.Layers.Contains(m_srcDatasetVector.Name))
                {
                    m_layerSrcRegion = m_sceneControl.Scene.Layers[m_srcDatasetVector.Name] as Layer3DDataset;
                }
                else
                {
                    m_layerSrcRegion = AddSrcRegionToScene(m_srcDatasetVector);
                }

                //将场景中其他图层设为不可见
                Layer3Ds layer3Ds = m_sceneControl.Scene.Layers;
                for (int i = 0; i < layer3Ds.Count; i++)
                {
                    Layer3D layer = layer3Ds[i];
                    if (layer.Name != m_layerSrcRegion.Name)
                    {
                        layer.IsVisible = false;
                    }
                }

                //注册事件
                m_sceneControl.ObjectSelected -= new SuperMap.UI.ObjectSelectedEventHandler(m_sceneControl_ObjectSelected);
                m_sceneControl.ObjectSelected += new SuperMap.UI.ObjectSelectedEventHandler(m_sceneControl_ObjectSelected);
            }
            return(true);
        }
Example #14
0
        public void GetTreeNode()
        {
            Layer3Ds mLayer = mScenecontrol.Scene.Layers;

            foreach (Layer3D m_layer in mLayer)
            {
                String m_layname = m_layer.Name;
                if (m_layname.Contains("管网"))
                {
                    mTreeNode = new TreeNode(m_layname);
                    treeView1.Nodes.Add(mTreeNode);
                }
            }
            treeView1.ExpandAll();
        }
Example #15
0
        /// <summary>
        /// 全线清除掉
        /// </summary>
        /// <param name="Layername">图层的名称</param>
        public void ConnectClearEdges(string Layername)
        {
            try
            {
                /* 判断是否有上游下游 即判断数组是否有值,有值清空数组 无值跳过
                 * 按图层名字清空图层选择集 并注销掉两个MouseDown事件
                 */
                if (mConnectUpEdges[0] != 0)
                {
                    Array.Clear(mConnectUpEdges, 0, mConnectUpEdges.Length);
                }
                mPipeConId1 = 0;
                mPipeConId2 = 0;
                if (mConnectDownEdges[0] != 0)
                {
                    Array.Clear(mConnectDownEdges, 0, mConnectDownEdges.Length);
                }

                if (mConnectUpNodes[0] != 0)
                {
                    Array.Clear(mConnectUpNodes, 0, mConnectUpNodes.Length);
                }
                if (mConnectDownNodes[0] != 0)
                {
                    Array.Clear(mConnectDownNodes, 0, mConnectDownNodes.Length);
                }
                Layer3Ds m_layer = mSceneControl.Scene.Layers;
                foreach (Layer3D layer in m_layer)
                {
                    if (layer.Selection != null)
                    {
                        layer.Selection.Clear();
                    }
                }
                mSceneControl.Scene.Layers[Layername].Selection.Clear();
                mSceneControl.Scene.Layers[Layername].Selection.UpdateData();
                mSceneControl.Scene.Refresh();
                mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObjectSelectedFlow);
                mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObjectSelectedCon);
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex);
            }
        }
 public void ClearRemoveRange()
 {
     try
     {
         mSceneControl.Scene.TrackingLayer.Clear();
         Layer3Ds m_layer = mSceneControl.Scene.Layers;
         foreach (Layer3D layer in m_layer)
         {
             if (layer.Selection != null)
             {
                 layer.Selection.Clear();
             }
         }
     }
     catch (Exception ex)
     {
         Trace.WriteLine(ex);
     }
 }
Example #17
0
        //将查询结果显示到场景中
        private Layer3D AddResultToScene(DatasetVector dataset, Color color)
        {
            Layer3Ds layer3Ds = m_sceneControl.Scene.Layers;

            //设置图层风格为依模型
            Layer3DSettingVector settingVector = new Layer3DSettingVector();
            GeoStyle3D           style3D       = new GeoStyle3D();

            style3D.AltitudeMode  = AltitudeMode.ClampToObject;
            style3D.FillForeColor = color;
            settingVector.Style   = style3D;

            //将数据添加到场景中
            Layer3DDataset layerDataset = layer3Ds.Add(dataset, settingVector, true);

            layerDataset.UpdateData();
            m_sceneControl.Scene.EnsureVisible(layerDataset);

            return(layerDataset);
        }
Example #18
0
        internal static void Terminate()
        {
            for (int loop = 0; loop < 3; loop++)
            {
                SoundSources.DestroyAll();

                Texture2Ds.DestroyAll();
                CubemapTextures.DestroyAll();

                Shader2Ds.DestroyAll();
                Material2Ds.DestroyAll();

                Effects.DestroyAll();

                Meshs.DestroyAll();
                Deformers.DestroyAll();
                Models.DestroyAll();

                KeyframeAnimations.DestroyAll();
                AnimationSources.DestroyAll();

                Scenes.DestroyAll();

                Layer2Ds.DestroyAll();
                Object2Ds.DestroyAll();

                Layer3Ds.DestroyAll();
                Object3Ds.DestroyAll();

                PostEffects.DestroyAll();
                //Profilers.DestroyAll();

                Collector.Collect();
                System.GC.Collect();
                System.GC.WaitForPendingFinalizers();
                System.GC.Collect();
                Collector.Collect();
            }
        }
Example #19
0
        //将原始面数据集加载到场景中
        private Layer3DDataset AddSrcRegionToScene(DatasetVector dataset)
        {
            Layer3Ds layer3Ds = m_sceneControl.Scene.Layers;

            //设置图层风格为依模型
            Layer3DSettingVector settingVector = new Layer3DSettingVector();
            GeoStyle3D           style3D       = new GeoStyle3D();

            style3D.AltitudeMode   = AltitudeMode.RelativeToGround;
            style3D.BottomAltitude = 1;
            style3D.FillForeColor  = Color.Blue;
            settingVector.Style    = style3D;

            //将数据添加到场景中
            Layer3DDataset layerDataset = layer3Ds.Add(dataset, settingVector, true, dataset.Name);

            layerDataset.UpdateData();
            m_sceneControl.Scene.EnsureVisible(layerDataset);

            m_sceneControl.Scene.Refresh();
            return(layerDataset);
        }
Example #20
0
        //绘制区域并开始分析
        private void btn_StartAnalysis_Click(object sender, EventArgs e)
        {
            if (m_shadowType == ShadowType.SELECTION)
            {
                //目前只允许一次选择一个图层中的对象
                Layer3Ds layers = m_sceneControl.Scene.Layers;
                for (int i = 0; i < layers.Count; i++)
                {
                    Layer3D     layer      = layers[i];
                    Selection3D seletion3D = layer.Selection;
                    if (seletion3D != null)
                    {
                        m_selection = seletion3D;
                        break;
                    }
                }
                if (m_selection == null)
                {
                    MessageBox.Show("请先选择要产生阴影的对象!");
                    return;
                }
            }

            this.RegisterEvents(false);
            this.RegisterEvents(true);

            m_oldAction           = m_sceneControl.Action;
            m_sceneControl.Action = Action3D.CreatePolygon;

            if (m_shadowQuery == null)
            {
                m_shadowQuery = this.CreateShadowVisibilityQuery();
            }

            this.btn_StartAnalysis.Enabled = false;
            this.btn_ClearResult.Enabled   = true;
        }
 public void ClearEvent()
 {
     try
     {
         mSceneControl.Tracking       -= new Tracking3DEventHandler(TrackingPullFlatEvent);
         mSceneControl.Tracked        -= new Tracked3DEventHandler(TrackedPullFlatEvent);
         mSceneControl.MouseDown      -= new MouseEventHandler(mSceneControlMouse);
         mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObject);
         mSceneControl.Scene.TrackingLayer.Clear();
         mSceneControl.Action = Action3D.Pan2;
         Layer3Ds m_layer = mSceneControl.Scene.Layers;
         foreach (Layer3D layer in m_layer)
         {
             if (layer.Selection != null)
             {
                 layer.Selection.Clear();
             }
         }
     }
     catch (Exception ex)
     {
         Trace.WriteLine(ex.Message);
     }
 }
Example #22
0
        //删除数据集
        private void DelDataset_ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            WorkspaceTreeNodeBase node = this.workspaceControl.WorkspaceTree.SelectedNode as WorkspaceTreeNodeBase;
            Dataset dataset            = node.GetData() as Dataset;

            //如果该图层在场景中打开,移除图层
            Layer3Ds layers = this.m_sceneControl.Scene.Layers;
            int      nLayer = layers.Count;

            for (int i = 0; i < nLayer; i++)
            {
                Layer3D layer = layers[i];
                if (layer.Caption.Contains(dataset.Name))
                {
                    layers.Remove(layer.Name);
                    nLayer--;
                    i--;
                }
            }
            Datasource datsource = dataset.Datasource;
            bool       ret       = datsource.Datasets.Delete(dataset.Name);

            datsource.Refresh();
        }
Example #23
0
        //Buffer查询
        public void BufferQuery()
        {
            try
            {
                //清除已有查询结果
                if (m_layerResultDataset != null)
                {
                    this.ClearResult();
                }
                //创建结果面数据集
                String bufferName = "bufferRegionDataset";
                if (m_workspace.Datasources[0].Datasets.Contains(bufferName))
                {
                    m_workspace.Datasources[0].Datasets.Delete(bufferName);
                }
                DatasetVector bufferDataset = (DatasetVector)m_workspace.Datasources[0].Datasets.CreateFromTemplate(bufferName, m_srcDatasetVector);

                BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter();
                bufferAnalystParam.EndType      = BufferEndType.Round;
                bufferAnalystParam.LeftDistance = m_bufferRadius;

                Boolean isTrue = SuperMap.Analyst.SpatialAnalyst.BufferAnalyst.CreateBuffer(m_selectRegion, bufferDataset, bufferAnalystParam, false, true);

                m_layerBufferDataset = this.AddResultToScene(bufferDataset, Color.FromArgb(100, 255, 255, 0)) as Layer3DDataset;

                //进行叠加分析
                QueryParameter para = new QueryParameter();
                para.SpatialQueryMode   = SpatialQueryMode.Intersect;
                para.SpatialQueryObject = bufferDataset;

                Recordset recordset = m_srcDatasetVector.Query(para);

                List <Int32> ids = new List <int>(recordset.RecordCount);

                while (!recordset.IsEOF)
                {
                    ids.Add(recordset.GetID());
                    recordset.MoveNext();
                }

                String resultName = "BufferResult";
                if (m_workspace.Datasources[0].Datasets.Contains(resultName))
                {
                    m_workspace.Datasources[0].Datasets.Delete(resultName);
                }
                DatasetVector dataset_result = (DatasetVector)m_workspace.Datasources[0].Datasets.CreateFromTemplate(resultName, m_srcDatasetVector);
                Console.Write(isTrue);


                // 将空间查询结果追加到新建的数据集中
                dataset_result.Append(recordset);

                m_layerSrcRegion.IsVisible = false;
                //将结果数据集添加到场景中

                Color color = Color.FromArgb(200, 0, 233, 0);
                m_layerResultDataset = this.AddResultToScene(dataset_result, color) as Layer3DDataset;

                //如果场景中有osgb图层,设置osgb图层可见
                Layer3Ds layer3ds = m_sceneControl.Scene.Layers;
                for (int i = 0; i < layer3ds.Count; i++)
                {
                    Layer3D layer = layer3ds[i];
                    if (layer.Type == Layer3DType.OSGB)
                    {
                        layer.IsVisible = true;
                    }
                }

                recordset.Dispose();
                m_selectRegion.Dispose();
                m_selectRegion = null;
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Example #24
0
        public void ContainQuery()
        {
            try
            {
                this.mDataGridView.Rows.Clear();
                this.mDataGridView.Columns.Clear();
                Layer3Ds m_layer = mSceneControl.Scene.Layers;
                foreach (Layer3D mlayer in m_layer)
                {
                    if (mlayer.Selection != null)
                    {
                        mlayer.Selection.Clear();
                    }
                }

                QueryParameter para = new QueryParameter();
                para.HasGeometry        = true;
                para.SpatialQueryMode   = SpatialQueryMode.Contain;
                para.SpatialQueryObject = m_rec;
                Recordset      recordset = null;
                Layer3DDataset layer     = null;
                for (int i = 0; i < 3; i++)
                {
                    if (i == 0)
                    {
                        recordset = mUseData.OutWaterNetWork.Query(para);
                        layer     = mUseData.OutWaterLines;
                    }
                    else if (i == 1)
                    {
                        recordset = mUseData.SupplyWaterNetWork.Query(para);
                        layer     = mUseData.SupplyWaterLines;
                    }
                    else if (i == 2)
                    {
                        recordset = mUseData.ElectricNetWork.Query(para);
                        layer     = mUseData.ElectricLayer;
                    }
                    List <Int32> ids = new List <int>(recordset.RecordCount);
                    while (!recordset.IsEOF)
                    {
                        ids.Add(recordset.GetID());
                        recordset.MoveNext();
                    }
                    layer.Selection.AddRange(ids.ToArray());
                    layer.Selection.UpdateData();
                    layer.Selection.Style.LineColor = Color.GreenYellow;
                    mSceneControl.Scene.Refresh();

                    //在DataGrid中显示表
                    recordset.MoveFirst();
                    FieldInfos fieldinfos = recordset.GetFieldInfos();
                    foreach (FieldInfo fieldInfo in fieldinfos)
                    {
                        if (i >= 1)
                        {
                            break;
                        }
                        if (!fieldInfo.IsSystemField)
                        {
                            if (fieldInfo.Name == "SmPPoint" || fieldInfo.Name == "SmNPoint")
                            {
                                continue;
                            }
                            string mCaption = fieldInfo.Caption;
                            this.mDataGridView.Columns.Add(mCaption, mCaption);
                        }
                    }
                    //初始化行
                    DataGridViewRow dataGridViewRow;
                    recordset.MoveFirst();

                    //根据选中的个数将对象的信息添加到列表中
                    while (!recordset.IsEOF)
                    {
                        dataGridViewRow = new DataGridViewRow();
                        for (int a = 0; a < recordset.FieldCount; a++)
                        {
                            if (!recordset.GetFieldInfos()[a].IsSystemField)
                            {
                                if (recordset.GetFieldInfos()[a].Name == "SmPPoint" || recordset.GetFieldInfos()[a].Name == "SmNPoint")
                                {
                                    continue;
                                }
                                //定义并获取字段值
                                object filevalue = recordset.GetFieldValue(a);

                                //添加到相应的位置
                                DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell();
                                if (filevalue != null)
                                {
                                    cell.ValueType = filevalue.GetType();
                                    cell.Value     = filevalue;
                                }
                                dataGridViewRow.Cells.Add(cell);
                            }
                        }
                        this.mDataGridView.Rows.Add(dataGridViewRow);
                        recordset.MoveNext();
                    }
                    this.mDataGridView.Update();
                    recordset.Dispose();
                }
                mSceneControl.Action = Action3D.Pan2;
                mSceneControl.Scene.Refresh();
            }
            catch (System.Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }
Example #25
0
        public void Layer3D_Click()
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Title  = "打开三维缓存文件";
            openFileDialog.Filter = "所有支持的三维缓存文件(*.sci, *.scv, *.scp,*.sci3d, *.sct, *.sit,*.gci,*.scm)|*.sci;*.scv;*.scp;*.sci3d;*.sct;*.sit;*.gci;*.scm";

            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                string   fileName  = openFileDialog.FileName;
                String   extention = System.IO.Path.GetExtension(fileName);
                Layer3D  layer3D   = null;
                Layer3Ds layer3ds  = this.m_SceneControl.Scene.Layers;

                switch (extention)
                {
                case ".sci":
                case ".sci3d":
                case ".sit":
                case ".gci":
                {
                    layer3D = layer3ds.Add(fileName, Layer3DType.ImageFile, true);
                    layer3D.UpdateData();
                    this.m_SceneControl.Scene.Refresh();
                    this.m_SceneControl.Scene.EnsureVisible(layer3D.Bounds);
                    break;
                }

                case ".scv":
                {
                    layer3D = layer3ds.Add(fileName, Layer3DType.VectorFile, true);
                    //layer3D.UpdateData();
                    this.m_SceneControl.Scene.Refresh();
                    this.m_SceneControl.Scene.EnsureVisible(layer3D.Bounds);

                    break;
                }

                case ".scp":
                {
                    layer3D = layer3ds.Add(fileName, Layer3DType.OSGB, true);

                    if (layer3D != null)
                    {
                        m_LayerOSGB = layer3D as Layer3DOSGBFile;
                        this.m_SceneControl.Scene.EnsureVisible(m_LayerOSGB.Bounds);
                        this.m_SceneControl.Scene.Refresh();
                    }

                    break;
                }

                case ".sct":
                {
                    TerrainLayer terrainlayer3D = this.m_SceneControl.Scene.TerrainLayers.Add(fileName, true);
                    this.m_SceneControl.Scene.Refresh();
                    this.m_SceneControl.Scene.EnsureVisible(terrainlayer3D.Bounds);

                    break;
                }
                }
            }
        }
 /// <summary>
 /// 给长度柱形图赋值
 /// </summary>
 public void LengBar()
 {
     try
     {
         Layer3Ds       mLayer3D = mSceneControl.Scene.Layers;
         Layer3DDataset mLayer   = null;
         Recordset      mRecord  = null;
         DatasetVector  mData    = null;
         String         str      = "";
         String         str1     = "";
         for (int i = 0; i < mLengthStatis.GetPipeStatist.Count; i++)
         {
             mLayer  = mLayer3D[mLengthStatis.GetPipeStatist[i].ToString() + "@" + mDataSourceName] as Layer3DDataset;
             mData   = mLayer.Dataset as DatasetVector;
             mRecord = mData.GetRecordset(false, CursorType.Static);
             mRecord.MoveFirst();
             if (i == 0)
             {
                 while (!mRecord.IsEOF)
                 {
                     for (int k = 0; k < mRecord.FieldCount; k++)
                     {
                         str = mRecord.GetFieldInfos()[k].Name;
                         if (str == "Length")
                         {
                             str1 = mRecord.GetFieldValue(k).ToString();
                             if (System.Convert.ToDouble(str1) > 0 && System.Convert.ToDouble(str1) <= 5)
                             {
                                 mCount[0]++;
                                 break;
                             }
                             else if (System.Convert.ToDouble(str1) > 5 && System.Convert.ToDouble(str1) <= 10)
                             {
                                 mCount[1]++;
                                 break;
                             }
                             else if (System.Convert.ToDouble(str1) > 10)
                             {
                                 mCount[2]++;
                                 break;
                             }
                         }
                     }
                     mRecord.MoveNext();
                 }
             }
             else if (i == 1)
             {
                 while (!mRecord.IsEOF)
                 {
                     for (int k = 0; k < mRecord.FieldCount; k++)
                     {
                         str = mRecord.GetFieldInfos()[k].Name;
                         if (str == "Length")
                         {
                             str1 = mRecord.GetFieldValue(k).ToString();
                             if (System.Convert.ToDouble(str1) > 0 && System.Convert.ToDouble(str1) <= 5)
                             {
                                 mCount1[0]++;
                                 break;
                             }
                             else if (System.Convert.ToDouble(str1) > 5 && System.Convert.ToDouble(str1) <= 10)
                             {
                                 mCount1[1]++;
                                 break;
                             }
                             else if (System.Convert.ToDouble(str1) > 10)
                             {
                                 mCount1[2]++;
                                 break;
                             }
                         }
                     }
                     mRecord.MoveNext();
                 }
             }
             else if (i == 2)
             {
                 while (!mRecord.IsEOF)
                 {
                     for (int k = 0; k < mRecord.FieldCount; k++)
                     {
                         str = mRecord.GetFieldInfos()[k].Name;
                         if (str == "Length")
                         {
                             str1 = mRecord.GetFieldValue(k).ToString();
                             if (System.Convert.ToDouble(str1) > 0 && System.Convert.ToDouble(str1) <= 5)
                             {
                                 mCount2[0]++;
                                 break;
                             }
                             else if (System.Convert.ToDouble(str1) > 5 && System.Convert.ToDouble(str1) <= 10)
                             {
                                 mCount2[1]++;
                                 break;
                             }
                             else if (System.Convert.ToDouble(str1) > 10)
                             {
                                 mCount2[2]++;
                                 break;
                             }
                         }
                     }
                     mRecord.MoveNext();
                 }
             }
         }
         LengthCreate();
     }
     catch (System.Exception ex)
     {
         Trace.WriteLine(ex.Message);
     }
 }
        public void LineInsertQuery()
        {
            Layer3Ds m_layer = mSceneControl.Scene.Layers;

            foreach (Layer3D mlayer in m_layer)
            {
                if (mlayer.Selection != null)
                {
                    mlayer.Selection.Clear();
                }
            }

            QueryParameter para = new QueryParameter();

            para.HasGeometry        = true;
            para.SpatialQueryMode   = SpatialQueryMode.Intersect;
            para.SpatialQueryObject = mRec2D;

            Recordset      recordset        = null;
            Layer3DDataset layer            = null;
            String         m_textID         = String.Empty;
            String         m_textName       = String.Empty;
            String         m_textDepth      = String.Empty;
            String         m_textDiameter   = String.Empty;
            String         m_InfomationText = String.Empty;

            for (int i = 0; i < 3; i++)
            {
                if (i == 0)
                {
                    recordset = mUseData.OutWaterNetWork.Query(para);
                    layer     = mUseData.OutWaterLines;
                }
                else if (i == 1)
                {
                    recordset = mUseData.SupplyWaterNetWork.Query(para);
                    layer     = mUseData.SupplyWaterLines;
                }
                else if (i == 2)
                {
                    recordset = mUseData.ElectricNetWork.Query(para);
                    layer     = mUseData.ElectricLayer;
                }


                List <Int32> ids = new List <int>(recordset.RecordCount);
                while (!recordset.IsEOF)
                {
                    m_textID          = System.Convert.ToString(recordset.GetFieldValue("SmID"));
                    m_textName        = System.Convert.ToString(recordset.GetFieldValue("Name"));
                    m_textDepth       = System.Convert.ToString(recordset.GetFieldValue("BottomAltitude"));
                    m_textDiameter    = System.Convert.ToString(recordset.GetFieldValue("PipeDiameter"));
                    m_InfomationText += m_textID + "      " + m_textName + "    " + m_textDepth + "            " + m_textDiameter + "\n";
                    ids.Add(recordset.GetID());
                    recordset.MoveNext();
                }
                layer.Selection.AddRange(ids.ToArray());
                layer.Selection.UpdateData();
                layer.Selection.Style.LineColor = Color.GreenYellow;
                mSceneControl.Scene.Refresh();
            }

            //进行文本标注
            String m_text = "编号" + "  " + "管线类别" + "  " + "埋设深度" + "  " + "管径" + "\n";

            m_text += m_InfomationText;
            TextPart3D mText1 = new TextPart3D();

            mText1.Text        = m_text;
            mText1.AnchorPoint = mAnchorPoint3D;
            TextStyle mTextStyle1 = new TextStyle();

            mTextStyle1.FontName    = "微软雅黑";
            mTextStyle1.ForeColor   = Color.Red;
            mTextStyle1.FontHeight  = 7;
            mTextStyle1.IsSizeFixed = false;
            mTextStyle1.Alignment   = TextAlignment.MiddleCenter;
            GeoText3D  geoText_1  = new GeoText3D(mText1, mTextStyle1);
            GeoStyle3D geostyle_1 = new GeoStyle3D();

            geostyle_1.AltitudeMode = AltitudeMode.RelativeToGround;
            geoText_1.Style3D       = geostyle_1;
            TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer;

            trackinglayer.IsEditable = true;
            trackinglayer.IsVisible  = true;
            trackinglayer.Add(geoText_1, "PullFlatLabel");
        }
        /// <summary>
        /// 创建缓冲区
        /// </summary>
        public void CreateBuffer()
        {
            try
            {
                Selection3D[] selection = mSceneControl.Scene.FindSelection(true);
                //判断选择集是否为空
                if (selection == null || selection.Length == 0)
                {
                    MessageBox.Show("请选择要扩建的道路线对象");
                    return;
                }

                Recordset mLineRecordset = selection[0].ToRecordset();
                object    RodeType       = mLineRecordset.GetFieldValue("Name");
                if (RodeType.ToString().Trim() == "大路")
                {
                    mRadius += 3.5;
                }
                else if (RodeType.ToString().Trim() == "小路")
                {
                    mRadius += 1.85;
                }
                else
                {
                    MessageBox.Show("请选择需要扩建的道路线对象");
                    Layer3Ds mlayer = mSceneControl.Scene.Layers;
                    foreach (Layer3D layer in mlayer)
                    {
                        if (layer.Selection != null)
                        {
                            layer.Selection.Clear();
                        }
                    }
                    return;
                }

                //按照模板创建模型数据集
                mDatasource = mUseData.DataSource;
                Datasource    datasource      = mDatasource;
                DatasetVector mRegionDatasets = datasource.Datasets["New_Model"] as DatasetVector;
                String        bufferName      = "bufferModel";
                if (datasource.Datasets.Contains(bufferName))
                {
                    datasource.Datasets.Delete(bufferName);
                }
                mBufferDataset             = (DatasetVector)datasource.Datasets.CreateFromTemplate(bufferName, mRegionDatasets);
                mBufferDataset.PrjCoordSys = mLineRecordset.Dataset.PrjCoordSys;
                mRecordset = mBufferDataset.GetRecordset(false, CursorType.Dynamic);
                while (!mLineRecordset.IsEOF)
                {
                    mGeo = mLineRecordset.GetGeometry() as Geometry3D;
                    BufferAnalyst3DParameter bufferAnalyst3DParameter = new BufferAnalyst3DParameter();
                    bufferAnalyst3DParameter.EndType        = SuperMap.Realspace.SpatialAnalyst.BufferEndType.Round;
                    bufferAnalyst3DParameter.BufferDistance = Convert.ToDouble(mRadius);
                    bufferAnalyst3DParameter.BufferQuality  = 20;
                    Geometry3D geo3D      = Geometrist3D.CreateBuffer(mGeo, bufferAnalyst3DParameter, mLineRecordset.Dataset.PrjCoordSys);
                    GeoStyle3D geoStyle3D = new GeoStyle3D();
                    mRecordset.AddNew(geo3D);
                    mLineRecordset.MoveNext();
                }
                mRecordset.Update();
                //设置数据集容量,避免空间查询出现过多对象
                mRecordset.Dataset.Tolerance.NodeSnap = 0.0002;

                Layer3DSettingVector layer3DSetting = new Layer3DSettingVector();
                GeoStyle3D           style          = new GeoStyle3D();
                style.FillForeColor  = Color.FromArgb(170, 242, 242, 15);
                style.FillBackColor  = Color.GreenYellow;
                style.AltitudeMode   = AltitudeMode.RelativeToGround;
                style.FillMode       = FillMode3D.Fill;
                layer3DSetting.Style = style;

                mLayerBuffer = mSceneControl.Scene.Layers.Add(mRecordset.Dataset, layer3DSetting, true);
                mLayerBuffer.UpdateData();

                if (mSceneControl.Scene.Layers.Contains("道路断线[email protected]_UnderPipeLine#1"))
                {
                    mSceneControl.Scene.Layers["道路断线[email protected]_UnderPipeLine#1"].Selection.Clear();
                }

                mSceneControl.Scene.Refresh();
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
            }
        }