Exemple #1
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;
                }
                }
            }
        }
Exemple #2
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();
        }
Exemple #3
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 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);
            }
        }