public SunPositionTool() { //get the different members m_globe = ArcGlobe.Globe; m_globeDisplay = m_globe.GlobeDisplay as IGlobeDisplay3; m_globeDisplayRendering = m_globeDisplay as IGlobeDisplayRendering; m_globeCamera = m_globeDisplay.ActiveViewer.Camera as IGlobeCamera; m_globeViewUtil = m_globeCamera as IGlobeViewUtil; m_sceneViewer = m_globeDisplay.ActiveViewer; }
public static IAnimationTrack CreateZoomOverLocationAnimation(IGlobeDisplay globeDisplay, IBookmark3D pBookmark3D) { // Set Mouse Cursor //IMouseCursor mouseCursor = new MouseCursorClass(); //mouseCursor.SetCursor(2); // QI to GlobeDisplayRendering Interface IGlobeDisplayRendering globeDisplayRendering = (IGlobeDisplayRendering)globeDisplay; // Get Elevation Multiplication Factor IUnitConverter unitConverter = new UnitConverterClass(); // Get GlobeDisplay and Camera IGlobe globe = globeDisplay.Globe; IAnimationTracks animationTracks = (IAnimationTracks)globe; IGlobeCamera globeCamera = (IGlobeCamera)globeDisplay.ActiveViewer.Camera; // Create New Animation Track IAnimationTrack animationTrack = new AnimationTrackClass(); try { IAnimationType animationType = new AnimationTypeGlobeCameraClass(); animationTrack.AnimationType = animationType; // Create First KeyFrame At Current Location IKeyframe keyframe1 = new GlobeCameraKeyframeClass(); keyframe1.CaptureProperties((IScene)globe, globeCamera); animationTrack.InsertKeyframe(keyframe1, animationTrack.KeyframeCount); //// Create Last KeyFrame Over Desired Location //pBookmark3D.Apply(globeDisplay.ActiveViewer as ISceneViewer, false, 0); //IKeyframe keyframe3 = new GlobeCameraKeyframeClass(); //keyframe3.CaptureProperties((IScene)globe, globeCamera); IKeyframe keyframe3 = CreateKeyframefromBook(globeDisplay.Globe, pBookmark3D) as IKeyframe; #region 获取第一帧和第三帧的参数 double dX1_Tar, dY1_Tar, dZ1_Tar, dX1_Obs, dY1_Obs, dZ1_Obs; GetParametersFromKeyFrame(keyframe1, out dX1_Tar, out dY1_Tar, out dZ1_Tar, out dX1_Obs, out dY1_Obs, out dZ1_Obs); double dX3_Tar, dY3_Tar, dZ3_Tar, dX3_Obs, dY3_Obs, dZ3_Obs; GetParametersFromKeyFrame(keyframe3, out dX3_Tar, out dY3_Tar, out dZ3_Tar, out dX3_Obs, out dY3_Obs, out dZ3_Obs); #endregion //=========================================== 创建中间帧 =========================================== //IKeyframe keyframe2 = CreateMiddleKeyframe(globeDisplay.Globe, dX1_Tar, dY1_Tar, dZ1_Tar, dX1_Obs, dY1_Obs, dZ1_Obs, // dX3_Tar, dY3_Tar, dZ3_Tar, dX3_Obs, dY3_Obs, dZ3_Obs); //头晕、高血压、糖尿病患者调用该函数请慎重! //=========================================== 创建中间帧 =========================================== //animationTrack.InsertKeyframe(keyframe2, animationTrack.KeyframeCount); animationTrack.InsertKeyframe(keyframe3, animationTrack.KeyframeCount); // Set The Animation Track Name animationTrack.Name = "Zoom Over Location From Bookmark"; // Set Track Attachments animationTrack.AttachObject(globeCamera); animationTrack.ApplyToAllViewers = true; // Add The New Track To The Scene animationTracks.AddTrack(animationTrack); // Return The Newly Create Aninmation Track } catch { } return(animationTrack); }
private void Form1_Load(object sender, System.EventArgs e) { //relative file path to the sample data from project location string sGlbData = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); sGlbData = Path.Combine(sGlbData, @"ArcGIS\data\Globe\World Imagery.3dd"); var filePath = new DirectoryInfo(sGlbData); System.Diagnostics.Debug.WriteLine(string.Format("File path for data root: {0} [{1}]", filePath.FullName, Directory.GetCurrentDirectory())); if (!File.Exists(sGlbData)) { throw new Exception(string.Format("Fix code to point to your sample data: {0} [{1}] was not found", filePath.FullName, Directory.GetCurrentDirectory())); } if (axGlobeControl1.Check3dFile(sGlbData)) { axGlobeControl1.Load3dFile(sGlbData); } //Enable north arrow, HUD and GlobeTips. bool bChkArrow = axGlobeControl1.GlobeViewer.NorthArrowEnabled; bool bHUD = axGlobeControl1.GlobeViewer.HUDEnabled; ChkHUD.Checked = bHUD; ChkArrow.Checked = bChkArrow; //get the state of globetips from the loaded doc..... m_penumTips = axGlobeControl1.GlobeViewer.GlobeDisplay.Globe.ShowGlobeTips; //if no tip value (not set) in the loaded doc set it to default.. if (m_penumTips <= 0) { m_penumTips = esriGlobeTipsType.esriGlobeTipsTypeLatLon; } cmbTipType.Items.Insert(0, "esriGlobeTipsTypeNone"); cmbTipType.Items.Insert(1, "esriGlobeTipsTypeLatLon"); cmbTipType.Items.Insert(2, "esriGlobeTipsTypeElevation"); cmbTipType.Items.Insert(3, "esriGlobeTipsTypeLatLonElevation"); ChkTip.Checked = true; //tip value of the doc... //set the list... cmbTipType.SelectedIndex = (int)m_penumTips; //populate tip type values.. axGlobeControl1.TipStyle = esriTipStyle.esriTipStyleSolid; axGlobeControl1.TipDelay = 500; //default.. axGlobeControl1.GlobeViewer.GlobeDisplay.Globe.ShowGlobeTips = m_penumTips; axGlobeControl1.GlobeDisplay.RefreshViewers(); //Get current sun property.. IGlobeDisplayRendering pglbDispRend = (IGlobeDisplayRendering)axGlobeControl1.GlobeDisplay; bool bsun = pglbDispRend.IsSunEnabled; if (bsun == true) { chkSun.Checked = true; //checked } //Get Ambient light... TxtAmbient.Text = pglbDispRend.AmbientLight.ToString(); //Listen to events.. m_globeDisplay = axGlobeControl1.GlobeDisplay; globeDisplayEvents = (IGlobeDisplayEvents_Event)m_globeDisplay; globeDisplayEvents.AfterDraw += new IGlobeDisplayEvents_AfterDrawEventHandler(OnAfterDraw); //globeDisplayEvents += new IGlobeDisplayEvents_AfterDrawEventHandler(OnAfterDraw); //afterDrawE = new IGlobeDisplayEvents_AfterDrawEventHandler(OnAfterDraw); //((IGlobeDisplayEvents_Event)axGlobeControl1.GlobeDisplay).AfterDraw+=afterDrawE; //globeDisplayEvents.AfterDraw += new (globeDisplayEvents_AfterDraw); }
public static IAnimationTrack CreateZoomOverLocationAnimation(IGlobeDisplay globeDisplay, double doubleX, double doubleY, double doubleAltitide) { // Set Mouse Cursor //IMouseCursor mouseCursor = new MouseCursorClass(); //mouseCursor.SetCursor(2); // QI to GlobeDisplayRendering Interface IGlobeDisplayRendering globeDisplayRendering = (IGlobeDisplayRendering) globeDisplay; // Get Elevation Multiplication Factor IUnitConverter unitConverter = new UnitConverterClass(); // Get GlobeDisplay and Camera IGlobe globe = globeDisplay.Globe; IAnimationTracks animationTracks = (IAnimationTracks)globe; IGlobeCamera globeCamera = (IGlobeCamera)globeDisplay.ActiveViewer.Camera; // Create New Animation Track IAnimationTrack animationTrack = new AnimationTrackClass(); try { IAnimationType animationType = new AnimationTypeGlobeCameraClass(); animationTrack.AnimationType = animationType; // Create First KeyFrame At Current Location IKeyframe keyframe1 = new GlobeCameraKeyframeClass(); keyframe1.CaptureProperties((IScene)globe, globeCamera); animationTrack.InsertKeyframe(keyframe1, animationTrack.KeyframeCount); // Create Last KeyFrame Over Desired Location IKeyframe keyframe3 = new GlobeCameraKeyframeClass(); keyframe3.set_PropertyValueInt(0, 0); keyframe3.set_PropertyValueDouble(1, doubleY); keyframe3.set_PropertyValueDouble(2, doubleX); keyframe3.set_PropertyValueDouble(3, -1d * unitConverter.ConvertUnits(globeDisplayRendering.GlobeRadius, esriUnits.esriMeters, globe.GlobeUnits)); // (globeDisplayRendering.GlobeRadius / -1000)); keyframe3.set_PropertyValueDouble(4, doubleY); keyframe3.set_PropertyValueDouble(5, doubleX); keyframe3.set_PropertyValueDouble(6, doubleAltitide); keyframe3.set_PropertyValueDouble(7, 30); keyframe3.set_PropertyValueDouble(8, 0); #region 获取第一帧和第三帧的参数 double dX1_Tar, dY1_Tar, dZ1_Tar, dX1_Obs, dY1_Obs, dZ1_Obs; GetParametersFromKeyFrame(keyframe1, out dX1_Tar, out dY1_Tar, out dZ1_Tar, out dX1_Obs, out dY1_Obs, out dZ1_Obs); double dX3_Tar, dY3_Tar, dZ3_Tar, dX3_Obs, dY3_Obs, dZ3_Obs; GetParametersFromKeyFrame(keyframe3, out dX3_Tar, out dY3_Tar, out dZ3_Tar, out dX3_Obs, out dY3_Obs, out dZ3_Obs); #endregion ////=========================================== 创建中间帧 == == == == == == == == == == == == == == == == == == == == == = IKeyframe keyframe2 = CreateMiddleKeyframe(globeDisplay.Globe, dX1_Tar, dY1_Tar, dZ1_Tar, dX1_Obs, dY1_Obs, dZ1_Obs, dX3_Tar, dY3_Tar, dZ3_Tar, dX3_Obs, dY3_Obs, dZ3_Obs); //头晕、高血压、糖尿病患者调用该函数请慎重! //=========================================== 创建中间帧 == == == == == == == == == == == == == == == == == == == == == = //animationTrack.InsertKeyframe(keyframe2, animationTrack.KeyframeCount); animationTrack.InsertKeyframe(keyframe3, animationTrack.KeyframeCount); // Set The Animation Track Name animationTrack.Name = "Zoom Over Location"; // Set Track Attachments animationTrack.AttachObject(globeCamera); animationTrack.ApplyToAllViewers = true; // Add The New Track To The Scene animationTracks.AddTrack(animationTrack); // Return The Newly Create Aninmation Track } catch { } return(animationTrack); }