private IEulerAngle SetAngle(double heading, double tilt, double roll) { IEulerAngle angle = new EulerAngle(); angle.Set(heading, tilt, roll); return(angle); }
/// <summary> /// 单击表格记录进行变色和定位 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { foreach (string key in rowMap.Keys) { RowObject r = rowMap[key]; int fid = int.Parse(r.FID); IFeatureClass fc = r.FeatureClass as IFeatureClass; this.axRenderControl1.FeatureManager.HighlightFeature(fc, fid, System.Drawing.Color.Red); } DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex]; if (row != null) { string fid = row.Cells["FID"].Value.ToString(); IFeatureClass fc = row.Cells["FID"].Tag as IFeatureClass; this.axRenderControl1.FeatureManager.HighlightFeature(fc, int.Parse(fid), System.Drawing.Color.Blue); IEnvelope evn = rowMap[fid].Envelop; IEulerAngle angle = new EulerAngle(); angle.Set(0, -90, 0); if (geoFactory == null) { geoFactory = new GeometryFactory(); } IPoint pos = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pos.SpatialCRS = datasetCRS; pos.Position = evn.Center; this.axRenderControl1.Camera.LookAt2(pos, 1000, angle); } }
private void CreateFeautureLayer() { bool hasfly = false; foreach (FeatureClass fc in featureClassMapping.Keys) { List <string> geoNames = featureClassMapping[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = _axRenderControl.ObjectManager.CreateFeatureLayer(fc, geoName, null, null); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } EulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); _axRenderControl.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } }
private void CreateRenderModelPoint(IPoint point) { // 创建模型 if (gfactory == null) { gfactory = new GeometryFactory(); } string tmpOSGPath = Environment.CurrentDirectory + @"\TrashCar\GLJCHE01.osg"; //string tmpOSGPath = Environment.CurrentDirectory + @"\Apartment\Apartment.osg"; fde_modelpoint = gfactory.CreateGeometry(i3dGeometryType.i3dGeometryModelPoint, i3dVertexAttribute.i3dVertexAttributeZ) as IModelPoint; fde_modelpoint.SpatialCRS = crs; fde_modelpoint.SetCoords(point.X, point.Y, point.Z, 0, 0); fde_modelpoint.ModelName = tmpOSGPath; rmodelpoint = _axRenderControl.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null); rmodelpoint.MaxVisibleDistance = double.MaxValue; rmodelpoint.MinVisiblePixels = 0; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); _axRenderControl.Camera.LookAt2(point, 100, angle); }
private void numSunDirection_ValueChanged(object sender, EventArgs e) { IEulerAngle angle = new EulerAngle(); angle.Set(double.Parse(numHeading.Value.ToString()), double.Parse(numTilt.Value.ToString()), 0); axRenderControl1.SunConfig.SetSunEuler(angle); }
private void listView1_MouseDoubleClick(object sender, MouseEventArgs e) { try { if (this.listView1.SelectedItems.Count == 0) { return; } myListNode item = (myListNode)this.listView1.SelectedItems[0]; item.Checked = true; //this.axRenderControl1.Camera.LookAtEnvelope(item.layer.Envelope); IEnvelope env = item.layer.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { return; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 500, angle); } catch (System.Exception ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } }
private void MainForm_Load(object sender, EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; this.axRenderControl1.Camera.FlyTime = 1; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } string tmpTdbPath = (strMediaPath + @"\sdk.tdb"); I3DTileLayer tilelayer = this.axRenderControl1.ObjectManager.Create3DTileLayer(tmpTdbPath, "", rootId); if (tilelayer != null) { IVector3 pos = new Vector3(); pos.Set(15404.97, 35575.28, 59); IEulerAngle ang = new EulerAngle(); ang.Set(0, -30, 0); this.axRenderControl1.Camera.LookAt(pos, 10, ang); } else { this.Text = "tilelayer create failed!"; } this.comboBox1.SelectedIndex = 2; this.axRenderControl1.RcCameraFlyFinished += new _IRenderControlEvents_RcCameraFlyFinishedEventHandler(axRenderControl1_RcCameraFlyFinished); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "WalkGround.html"; } }
private void btnFlyToFeatureLayer_Click(object sender, EventArgs e) { IVector3 position = new Vector3(); position.Set(envX, envY, envZ); IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(position, 800, angle); }
private void seTilt_EditValueChanging(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e) { if (app == null || app.Current3DMapControl == null) { return; } IEulerAngle ang = new EulerAngle(); ang.Set(Convert.ToDouble(this.seHeading.EditValue), Convert.ToDouble(this.seTilt.EditValue), 0); app.Current3DMapControl.SunConfig.SetSunEuler(ang); }
private void LoadData() { if (geoFactory == null) { geoFactory = new GeometryFactory(); } string modelName = (strMediaPath + @"\osg\Schemes\scheme-01.osg"); IModelPoint modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz + 15, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint1 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint1.VisibleMask = gviViewportMask.gviView0; IVector3 position = new Vector3(); position.Set(dx, dy, dz); IPoint point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); point.SpatialCRS = _datasetCRS; point.SetCoords(position.X, position.Y, position.Z, 0, 0); IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); axRenderControl1.Camera.LookAt2(point, 300, angle); modelName = (strMediaPath + @"\osg\Schemes\scheme-02.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 15, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint2 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint2.VisibleMask = gviViewportMask.gviView1; modelName = (strMediaPath + @"\osg\Schemes\scheme-03.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 10, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint3 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint3.VisibleMask = gviViewportMask.gviView2; modelName = (strMediaPath + @"\osg\Schemes\scheme-04.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 13, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint4 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint4.VisibleMask = gviViewportMask.gviView3; }
private void FrmSunSimulation_Load(object sender, EventArgs e) { if (app == null || app.Current3DMapControl == null) { return; } app.Current3DMapControl.SunConfig.SunCalculateMode = gviSunCalculateMode.gviSunModeUserDefined; System.Drawing.Color color = this.colorPickEdit1.Color; System.Drawing.Color color1 = System.Drawing.Color.FromArgb(this.trackBarControl1.Value, color.R, color.G, color.B); app.Current3DMapControl.SunConfig.ShadowColor = (uint)color1.ToArgb(); IEulerAngle ang = new EulerAngle(); ang.Set(Convert.ToDouble(this.seHeading.EditValue), Convert.ToDouble(this.seTilt.EditValue), 0); app.Current3DMapControl.SunConfig.SetSunEuler(ang); app.Current3DMapControl.SunConfig.EnableShadow(0, true); }
private void btnCreateFeature_Click(object sender, EventArgs e) { _geoEditor.FinishEdit(); //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时 IVector3 position = new Vector3(); position.Set(envX, envY, envZ); IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(position, 800, angle); MessageBox.Show("请选择一个Feature"); this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectFeatureLayer; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; this.axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect_CreateFeature); this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect_CreateFeature); }
private void CreateFeautureLayer() { bool hasfly = false; foreach (FeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } EulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); if (geoFactory == null) { geoFactory = new GeometryFactory(); } IPoint pos = geoFactory.CreatePoint(i3dVertexAttribute.i3dVertexAttributeZ); pos.SpatialCRS = datasetCRS; pos.Position = env.Center; this.axRenderControl1.Camera.LookAt2(pos, 1000, angle); } hasfly = true; } } }
private void menuLoadData_Click(object sender, EventArgs e) { if (layers.Count > 0) { MessageBox.Show("数据已加载"); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); layers.Add(featureLayer); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } }
/// <summary> /// 单击表格记录进行变色和定位 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { foreach (string key in rowMap.Keys) { RowObject r = rowMap[key]; int fid = int.Parse(r.FID); IFeatureClass fc = r.FeatureClass as IFeatureClass; axRenderControl1.FeatureManager.HighlightFeature(fc, fid, System.Drawing.Color.Red); } DataGridViewRow row = this.dataGridView1.Rows[e.RowIndex]; if (row != null) { string fid = row.Cells["FID"].Value.ToString(); IFeatureClass fc = row.Cells["FID"].Tag as IFeatureClass; axRenderControl1.FeatureManager.HighlightFeature(fc, int.Parse(fid), System.Drawing.Color.Blue); IEnvelope evn = rowMap[fid].Envelop; IEulerAngle angle = new EulerAngle(); angle.Set(0, -30, 0); axRenderControl1.Camera.LookAt(evn.Center, 40, angle); } }
/// <summary> /// 开始分析 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnStartAnalyse_Click(object sender, EventArgs e) { switch (this.comboBoxSunMode.SelectedIndex) { case 0: { axRenderControl1.SunConfig.SunCalculateMode = gviSunCalculateMode.gviSunModeFollowCamera; } break; case 1: { axRenderControl1.SunConfig.SunCalculateMode = gviSunCalculateMode.gviSunModeAccordingToGMT; DateTime time = new DateTime(int.Parse(this.numYear.Value.ToString()), int.Parse(this.numMonth.Value.ToString()), int.Parse(this.numDay.Value.ToString()), int.Parse(this.numHour.Value.ToString()), int.Parse(this.numMinute.Value.ToString()), 0); axRenderControl1.SunConfig.SetGMT(time); this.btnPlay.Enabled = true; this.btnStop.Enabled = true; this.btnNow.Enabled = true; } break; case 2: { axRenderControl1.SunConfig.SunCalculateMode = gviSunCalculateMode.gviSunModeUserDefined; IEulerAngle angle = new EulerAngle(); angle.Set(double.Parse(numHeading.Value.ToString()), double.Parse(numTilt.Value.ToString()), 0); axRenderControl1.SunConfig.SetSunEuler(angle); } break; } axRenderControl1.SunConfig.EnableShadow(0, true); }
/// <summary> /// 开启关闭雾效果菜单项 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripFog_Click(object sender, EventArgs e) { bool fogCheck = (sender as ToolStripMenuItem).Checked; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); if (!fogCheck) { skybox.FogStartDistance = 0; skybox.FogEndDistance = 500; skybox.FogMode = gviFogMode.gviFogLinear; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 500, angle); toolStripFog.Text = "关闭雾效"; } else { skybox.FogMode = gviFogMode.gviFogNone; toolStripFog.Text = "开启雾效"; } (sender as ToolStripMenuItem).Checked = !fogCheck; }
// 公共方法 void FeatureLayerVisualize(IConnectionInfo ci, bool needfly, string sourceName) { try { IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); _featureClass = fc; // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = !needfly; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } // 相机飞入 if (!hasfly) { IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } }
void init() { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 注册出图事件 this.axRenderControl1.RcPictureExportBegin += new _IRenderControlEvents_RcPictureExportBeginEventHandler(axRenderControl1_RcPictureExportBegin); this.axRenderControl1.RcPictureExporting += new _IRenderControlEvents_RcPictureExportingEventHandler(axRenderControl1_RcPictureExporting); this.axRenderControl1.RcPictureExportEnd += new _IRenderControlEvents_RcPictureExportEndEventHandler(axRenderControl1_RcPictureExportEnd); // 注册相机“返回”和“前进”事件 this.axRenderControl1.RcCameraUndoRedoStatusChanged += new _IRenderControlEvents_RcCameraUndoRedoStatusChangedEventHandler(axRenderControl1_RcCameraUndoRedoStatusChanged); _rcCameraUndoRedo = new _IRenderControlEvents_RcCameraUndoRedoStatusChangedEventHandler(axRenderControl1_RcCameraUndoRedoStatusChanged); // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } // 加载动画导航 BindingSource bindingSource1 = new BindingSource(); { string tmpXMLPath = (strMediaPath + @"\xml\CameraTour_1.xml"); tour = this.axRenderControl1.ObjectManager.CreateCameraTour(rootId); if (File.Exists(tmpXMLPath)) { StreamReader sr = new StreamReader(tmpXMLPath); string xmlstring = ""; string line = sr.ReadLine(); while (!string.IsNullOrEmpty(line)) { xmlstring += line; line = sr.ReadLine(); } sr.Close(); tour.FromXml(xmlstring); } bindingSource1.Add(new Knight("CameraTour_1", tour)); } { string tmpXMLPath = (strMediaPath + @"\xml\CameraTour_2.xml"); tour = this.axRenderControl1.ObjectManager.CreateCameraTour(rootId); if (File.Exists(tmpXMLPath)) { StreamReader sr = new StreamReader(tmpXMLPath); string xmlstring = ""; string line = sr.ReadLine(); while (!string.IsNullOrEmpty(line)) { xmlstring += line; line = sr.ReadLine(); } sr.Close(); tour.FromXml(xmlstring); } bindingSource1.Add(new Knight("CameraTour_2", tour)); } dataGridView1.DataSource = bindingSource1; dataGridView1.Columns[1].Visible = false; this.btnPause.Enabled = false; this.btnStop.Enabled = false; this.toolStripComboBoxWeather.SelectedIndex = 0; { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "HelloWorld.html"; } }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\PIPE.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } this.axRenderControl1.ObjectManager.CreateFeatureLayer(fc, geoName, null, null, rootId); } } IPoint position = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); position.SetCoords(506308.31579040177, 314272.281405516, 3.2581421811509275, 0, 0); position.SpatialCRS = dataset.SpatialReference; IEulerAngle angle = new EulerAngle(); angle.Set(66.16, -14.2, 0); this.axRenderControl1.Camera.SetCamera2(position, angle, gviSetCameraFlags.gviSetCameraNoFlags); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "DynamicPipe.html"; } }
public static void AddAndVisualizeBaseData(IConnectionInfo ci, string geoColumnName, TreeList parentTree, bool bNeedFly = false, bool bTempData = true) { try { if (ci == null || parentTree == null) { return; } if (bTempData) { WaitForm.Start("正在加载三维数据,请稍后...", "提示"); } DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } AxRenderControl d3 = app.Current3DMapControl; IDataSourceFactory dsFactory = new DataSourceFactory(); if (!dsFactory.HasDataSource(ci)) { return; } IDataSource ds = dsFactory.OpenDataSource(ci); if (ds == null) { return; } //TreeNodeDatabase tnDatabase = new TreeNodeDatabase() //{ // Name = ci.ConnectionType == gviConnectionType.gviConnectionFireBird2x ? System.IO.Path.GetFileNameWithoutExtension(ci.Database) : ci.Database, // CustomValue = ds, // Temp = bTempData //}; //tnDatabase.OwnNode = parentTree.AppendNode(new object[] { tnDatabase.Name }, (TreeListNode)null); //tnDatabase.Visible = true; string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } for (int j = 0; j < setnames.Length; j++) { IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[j]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { continue; } TreeNodeDataset tnDataset = new TreeNodeDataset() { Name = dataset.Alias, CustomValue = dataset, Temp = bTempData }; tnDataset.OwnNode = parentTree.AppendNode(new object[] { tnDataset.Name }, (TreeListNode)null); //tnDatabase.Add(tnDataset); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); if (fc == null) { continue; } TreeNodeFeatureClass tnFeatureClass = new TreeNodeFeatureClass(fc.GuidString) { Name = fc.AliasName, CustomValue = fc, Temp = bTempData }; tnDataset.Add(tnFeatureClass); IFieldInfoCollection fieldinfos = fc.GetFields(); if (fieldinfos == null) { continue; } int index = fieldinfos.IndexOf(geoColumnName); if (index == -1) { } else { IFieldInfo fieldinfo = fieldinfos.Get(index); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; IFeatureLayer fl = null; if (null != geometryDef) { fl = d3.ObjectManager.CreateFeatureLayer(fc, fieldinfo.Name, null, null, d3.ProjectTree.RootID); tnFeatureClass.SetVisualFeatureLayer(fl); switch (geometryDef.GeometryColumnType) { case gviGeometryColumnType.gviGeometryColumnModelPoint: tnFeatureClass.Visible = true; tnFeatureClass.ImageIndex = 3; break; case gviGeometryColumnType.gviGeometryColumnPOI: case gviGeometryColumnType.gviGeometryColumnPoint: tnFeatureClass.Visible = false; tnFeatureClass.ImageIndex = 4; break; case gviGeometryColumnType.gviGeometryColumnPolyline: tnFeatureClass.Visible = false; tnFeatureClass.ImageIndex = 5; break; case gviGeometryColumnType.gviGeometryColumnPolygon: tnFeatureClass.Visible = false; tnFeatureClass.ImageIndex = 6; break; } } // 加入管理类 if (!bTempData && fl != null) { DF3DFeatureClass dfFC = new DF3DFeatureClass(fc); dfFC.SetFeatureLayer(fl); dfFC.SetTreeLayer(tnFeatureClass); Render3D.Instance.SetRender(tnFeatureClass, dfFC); DF3DFeatureClassManager.Instance.Add(dfFC); } if (fl != null && bNeedFly) { IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); d3.Camera.SetCamera(fl.Envelope.Center, angle, gviSetCameraFlags.gviSetCameraNoFlags); bNeedFly = false; } } } tnDataset.CollapseAll(); } //tnDatabase.CollapseAll(); //ds.Close(); } catch (Exception ex) { XtraMessageBox.Show("加载三维数据失败,请检查数据是否被占用或链接是否有错误。", "提示"); LoggingService.Error("加载三维数据失败:" + ex.Message); } finally { if (bTempData) { WaitForm.Stop(); } } }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); ps.SetProperty("QuadBufferStereo", true); //设置四缓冲立体启用 this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } #endregion // 下拉框控件默认选中第一项 this.toolStripComboBoxViewportMode.SelectedIndex = 0; this.txtEyeSeparation.Text = this.axRenderControl1.GetRenderParam(gviRenderControlParameters.gviRenderParamStereoEyeSeparation).ToString(); this.txtFusionDistance.Text = this.axRenderControl1.GetRenderParam(gviRenderControlParameters.gviRenderParamStereoFusionDistance).ToString(); this.txtScreenDistance.Text = this.axRenderControl1.GetRenderParam(gviRenderControlParameters.gviRenderParamStereoScreenDistance).ToString(); this.txtFusionDistance.TextChanged += new System.EventHandler(this.txtFusionDistance_TextChanged); this.txtEyeSeparation.TextChanged += new System.EventHandler(this.txtEyeSeparation_TextChanged); this.txtScreenDistance.TextChanged += new System.EventHandler(this.txtScreenDistance_TextChanged); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "StereoDisplay.html"; } }
public override void Run(object sender, System.EventArgs e) { DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } string str = Config.GetConfigValue("InitView3D"); bool bHave = true; if (string.IsNullOrEmpty(str)) { bHave = false; } string[] arrstr = str.Split(';'); if (arrstr == null || arrstr.Length != 6) { bHave = false; } else { double x, y, z, heading, tilt, roll; bool bRes = double.TryParse(arrstr[0], out x); if (!bRes) { bHave = false; } bRes = double.TryParse(arrstr[1], out y); if (!bRes) { bHave &= false; } bRes = double.TryParse(arrstr[2], out z); if (!bRes) { bHave &= false; } bRes = double.TryParse(arrstr[3], out heading); if (!bRes) { bHave &= false; } bRes = double.TryParse(arrstr[4], out tilt); if (!bRes) { bHave &= false; } bRes = double.TryParse(arrstr[5], out roll); if (!bRes) { bHave &= false; } if (bHave) { IVector3 v3 = new Vector3Class(); IEulerAngle ang = new EulerAngle(); v3.Set(x, y, z); ang.Set(heading, tilt, roll); app.Current3DMapControl.Camera.SetCamera(v3, ang, Gvitech.CityMaker.RenderControl.gviSetCameraFlags.gviSetCameraNoFlags); } } if (!bHave && app.Current3DMapControl.Terrain.IsRegistered) { app.Current3DMapControl.Terrain.FlyTo(Gvitech.CityMaker.RenderControl.gviTerrainActionCode.gviFlyToTerrain); } }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } this.axRenderControl1.Camera.FlyTime = 1; #region 加载SDKDEMO场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); //遍历FeatureClass string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); flayerList.Add(featureLayer); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -90, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } #endregion //注册地形 string tmpTedPath = (strMediaPath + @"\terrain\SingaporePlanarTerrain.ted"); this.axRenderControl1.Terrain.RegisterTerrain(tmpTedPath, ""); if (player == null) { player = this.axRenderControl1.HeatMapPlayer; } // 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\HeatMap.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); if (fc.HasTemporal()) { ITemporalManager tm = fc.TemporalManager; DateTime[] times = tm.GetKeyDatetimes(); for (int i = 0; i < times.Length; i++) { if (keyDatetimesList.Contains(times[i])) { continue; } keyDatetimesList.Add(times[i]); } } } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // 设置时间轴 if (keyDatetimesList.Count == 0) { this.cbKeyTimes.Enabled = false; this.btnPlay.Enabled = false; this.btnPause.Enabled = false; this.btnStop.Enabled = false; } else { keyDatetimesList.Sort(); for (int t = 0; t < keyDatetimesList.Count; t++) { DateTime d = keyDatetimesList[t]; cbKeyTimes.Items.Add(d); } } // CreateFeautureLayer foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { heatmap = this.axRenderControl1.ObjectManager.CreateHeatMap( fc, geoName, "HotValue", rootId); if (heatmap == null) { continue; } this.txtMinValue.Text = heatmap.MinHeatValue.ToString(); this.txtMaxValue.Text = heatmap.MaxHeatValue.ToString(); } } //设置curLayer的时刻为最新时刻 if (keyDatetimesList.Count > 0) { DateTime dmax = (keyDatetimesList[keyDatetimesList.Count - 1]); player.SetTime(dmax); //设置时间轴为最小 cbKeyTimes.SelectedIndex = keyDatetimesList.Count - 1; } //测试自定义颜色 //System.Drawing.Color[] colors = new System.Drawing.Color[2]; //colors[0] = System.Drawing.Color.White; //colors[1] = System.Drawing.Color.Gray; //bool suc = player.SetColor(colors, 2); //if(suc) //{ // System.Drawing.Color[] colorvec; // byte c; // bool suc2 = player.GetColor(out colorvec, out c); // if (suc2) // this.Text = c.ToString(); //} this.cbShowHeatMap.Checked = true; this.cbShowFeatureLayer.Checked = true; { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "Temporal.html"; } }
public MainForm() { InitializeComponent(); // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; this.axRenderControl1.Camera.FlyTime = 1; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { //string tmpSkyboxPath = strMediaPath + @"\skybox"; //ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); //skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); //skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); //skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); //skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); //skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); //skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\polyline.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } ISimpleTextRender tr = new SimpleTextRender(); tr.Expression = "$(oid)"; tr.MinimizeOverlap = true; tr.DynamicPlacement = true; ITextSymbol ts = new TextSymbol(); tr.Symbol = ts; featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer(fc, geoName, tr, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 600, angle); } hasfly = true; } } #endregion 加载FDB场景 #region 查询所有值 foreach (IFeatureClass fc in fcMap.Keys) { DataTable dt = CreateDataTable(fc); pipeMap = new Hashtable(); GetResultSet(fc, null, dt); this.dataGridViewPolyline.DataSource = dt; } #endregion this.comboBoxPlayMode.SelectedIndex = 2; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractSelect; this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectRenderPipeLine; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectDrag; //this.axRenderControl1.RcMouseClickSelect += AxRenderControl1_RcMouseClickSelect; this.axRenderControl1.RcMouseDragSelect += AxRenderControl1_RcMouseDragSelect; { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "RenderPipeLine.html"; } }
private void MainForm_Load(object sender, EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(false, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; this.axRenderControl1.Camera.FlyTime = 1; objManager = this.axRenderControl1.ObjectManager; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); datasetCRS = dataset.SpatialReference; string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); geoFactory = new GeometryFactory(); IPoint p = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); p.SpatialCRS = datasetCRS; p.Position = env.Center; this.axRenderControl1.Camera.LookAt2(p, 1000, angle); } hasfly = true; } } #endregion this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 加载FDB try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\empty.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); TreeNode sourceNode = new TreeNode(ci.Database); this.treeViewCatalogTree.Nodes.Add(sourceNode); // 获取第1个dataset string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } dataset = ds.OpenFeatureDataset(setnames[0]); TreeNode setNode = new TreeNode(setnames[0]); sourceNode.Nodes.Add(setNode); // 获取第1个featureclass string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fc = dataset.OpenFeatureClass(fcnames[0]); TreeNode fcNode = new TreeNode(fcnames[0]); setNode.Nodes.Add(fcNode); // 找到空间列字段 geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer layerList = new List <IFeatureLayer>(); foreach (string geoName in geoNames) { //****特别注意**** ISimpleGeometryRender geoRender = new SimpleGeometryRender(); geoRender.RenderGroupField = "Groupid"; //**************** IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, geoRender, rootId); layerList.Add(featureLayer); // 设置featureLayer可见 SetGroupVisiable(dataset, featureLayer); IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } this.treeViewCatalogTree.ExpandAll(); // 加载FeatureDataSet对应的LogicGroupTree到界面控件 nodekeyMap = new Hashtable(); byte[] bb = GetLogicTreeContent(dataset); if (bb != null) { string strContent = System.Text.Encoding.UTF8.GetString(bb).Trim(); ShowCurDataSet(strContent); } // 删除回收站及其子节点 foreach (TreeNode node in this.treeViewLogicTree.Nodes[0].Nodes) { if (node.Text.Equals("回收站")) { this.treeViewLogicTree.Nodes.Remove(node); } } { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "ImportModel.html"; } CommonEntity.RenderEntity = this.axRenderControl1; CommonEntity.FormEntity = this; }
void axRenderControl1_RcMouseClickSelect(object sender, Gvitech.CityMaker.Controls._IRenderControlEvents_RcMouseClickSelectEvent e) { if (e.pickResult.Type == gviObjectType.gviObjectLabel) { ILabelPickResult tlpr = e.pickResult as ILabelPickResult; gviObjectType type = tlpr.Type; ILabel fl = tlpr.Label; MessageBox.Show("拾取到" + type + "类型,内容为" + fl.Text); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderModelPoint) { IRenderModelPointPickResult tlpr = e.pickResult as IRenderModelPointPickResult; gviObjectType type = tlpr.Type; IRenderModelPoint fl = tlpr.ModelPoint; MessageBox.Show("拾取到" + type + "类型,模型名称为" + fl.ModelName); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPoint) { IRenderPointPickResult tlpr = e.pickResult as IRenderPointPickResult; gviObjectType type = tlpr.Type; IRenderPoint fl = tlpr.Point; MessageBox.Show("拾取到" + type + "类型,大小为" + fl.Symbol.Size); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPolyline) { IRenderPolylinePickResult tlpr = e.pickResult as IRenderPolylinePickResult; gviObjectType type = tlpr.Type; IRenderPolyline fl = tlpr.Polyline; MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPolygon) { IRenderPolygonPickResult tlpr = e.pickResult as IRenderPolygonPickResult; gviObjectType type = tlpr.Type; IRenderPolygon fl = tlpr.Polygon; MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPOI) { IRenderPOIPickResult tlpr = e.pickResult as IRenderPOIPickResult; gviObjectType type = tlpr.Type; IRenderPOI fl = tlpr.POI; MessageBox.Show("拾取到" + type + "类型,名称为" + ((IPOI)fl.GetFdeGeometry()).Name); } else if (e.pickResult.Type == gviObjectType.gviObjectReferencePlane) { //ta = new TextAttribute(); ta.TextSize = Convert.ToInt32(this.toolstripFontSize.Text.ToString()); // ta.TextColor = olec; IImage image = null; IModel model = null; string imageName = ""; this.axRenderControl1.Utility.CreateFixedBillboard(label.Text, ta, 50, 100, true, out model, out image, out imageName); this.axRenderControl1.ObjectManager.AddModel("fixedModel", model); this.axRenderControl1.ObjectManager.AddImage(imageName, image); if (gfactory == null) { gfactory = new GeometryFactoryClass(); } fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; fde_modelpoint.SetCoords(e.intersectPoint.X, e.intersectPoint.Y, e.intersectPoint.Z, 0, 0); fde_modelpoint.ModelName = "fixedModel"; rmodelpoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, rootId); rmodelpoint.MaxVisibleDistance = double.MaxValue; rmodelpoint.MinVisiblePixels = 0; rmodelpoint.ShowOutline = checkShowOutline.Checked; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(e.intersectPoint.Position, 100, angle); } }
/// <summary> /// 初始化 /// </summary> private void init() { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); skybox = this.axRenderControl1.ObjectManager.GetSkyBox(1); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\2_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\2_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\2_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\2_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\2_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\2_UP.jpg"); skybox = this.axRenderControl1.ObjectManager.GetSkyBox(2); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\04_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\04_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\04_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\04_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\04_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\04_UP.jpg"); skybox = this.axRenderControl1.ObjectManager.GetSkyBox(3); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\9_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\9_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\9_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\9_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\9_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\9_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer( fc, geoName, null, null, rootId); if (!hasfly) { IFieldInfoCollection fieldinfos = fc.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; if (env == null || (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0)) { continue; } IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); } hasfly = true; } } #endregion 加载FDB场景 { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "HideSelectedArea.html"; } // 注册控件拾取事件 this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); this.axRenderControl1.RcMouseDragSelect += new _IRenderControlEvents_RcMouseDragSelectEventHandler(axRenderControl1_RcMouseDragSelect); this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectFeatureLayer; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractSelect; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick | gviMouseSelectMode.gviMouseSelectDrag; }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\MultiSpatialColumns.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } IFeatureDataSet dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } // 仅仅加载“建筑”要素类 _featureClass = dataset.OpenFeatureClass("建筑"); { // 用名为"Geometry"的空间列创建模型FeautureLayer IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer(_featureClass, "Geometry", null, null, rootId); // 添加节点到界面控件上 myListNode item = new myListNode(string.Format("{0}_{1}_{2}", "ModelPoint", _featureClass.Name, featureLayer.MaxVisibleDistance.ToString()), featureLayer); item.Checked = true; listView1.Items.Add(item); } { //用名为"Surface"的空间列创建模型FeautureLayer IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer(_featureClass, "Surface", null, null, rootId); // 添加节点到界面控件上 myListNode item = new myListNode(string.Format("{0}_{1}_{2}", "Surface", _featureClass.Name, featureLayer.MaxVisibleDistance.ToString()), featureLayer); item.Checked = true; listView1.Items.Add(item); } { //用名为"Polygon"的空间列创建模型FeautureLayer IFeatureLayer featureLayer = this.axRenderControl1.ObjectManager.CreateFeatureLayer(_featureClass, "Polygon", null, null, rootId); // 添加节点到界面控件上 myListNode item = new myListNode(string.Format("{0}_{1}_{2}", "Polygon", _featureClass.Name, featureLayer.MaxVisibleDistance.ToString()), featureLayer); item.Checked = true; listView1.Items.Add(item); } //{ // //用名为"Point"的空间列创建模型FeautureLayer // IFeatureLayer featureLayer = this.axRenderControl1.FeatureLayerManager.CreateFeatureLayer(_featureClass, "Point", null, null); // // 添加节点到界面控件上 // myListNode item = new myListNode(string.Format("{0}_{1}_{2}", "Point", _featureClass.Name, featureLayer.MaxVisibleDistance.ToString()), featureLayer); // item.Checked = true; // listView1.Items.Add(item); //} IFieldInfoCollection fieldinfos = _featureClass.GetFields(); IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf("Geometry")); IGeometryDef geometryDef = fieldinfo.GeometryDef; IEnvelope env = geometryDef.Envelope; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(env.Center, 400, angle); } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } #endregion { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "MultiSpatialColumns.html"; } }