From: <mas...@us...> - 2006-04-15 14:40:41
|
Revision: 148 Author: mashiharu Date: 2006-04-15 07:40:15 -0700 (Sat, 15 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=148&view=rev Log Message: ----------- Test commit (zoom on startup) Modified Paths: -------------- trunk/Punt/PluginSDK/Camera.cs trunk/Punt/PluginSDK/WorldCamera.cs Modified: trunk/Punt/PluginSDK/Camera.cs =================================================================== --- trunk/Punt/PluginSDK/Camera.cs 2006-04-15 12:13:45 UTC (rev 147) +++ trunk/Punt/PluginSDK/Camera.cs 2006-04-15 14:40:15 UTC (rev 148) @@ -61,9 +61,9 @@ public CameraBase( double radius ) { m_worldRadius = radius; - m_distance = 2*m_worldRadius; - m_altitude = m_distance; - maximumAltitude = 7 * m_worldRadius; + m_distance = 2 * m_worldRadius; + m_altitude = 2 * m_worldRadius; + maximumAltitude = 3 * m_worldRadius; m_orientation = MathEngine.EulerToQuaternion(0,0,0); } @@ -332,6 +332,10 @@ if(!double.IsNaN(v.Z)) m_heading.Radians = v.Z; + m_target = MathEngine.SphericalToCartesian( + m_latitude,m_longitude, + m_worldRadius); + m_orientation = MathEngine.EulerToQuaternion( m_longitude.Radians, m_latitude.Radians, m_heading.Radians); @@ -606,10 +610,6 @@ protected virtual void ComputeViewMatrix() { - m_target = MathEngine.SphericalToCartesian( - m_latitude,m_longitude, - m_worldRadius); - m_viewMatrix = Matrix.LookAtRH( m_target, Vector3.Empty, @@ -647,7 +647,7 @@ { float aspectRatio = (float)viewport.Width / viewport.Height; float zNear = (float)m_altitude*0.1f; - double distToCenterOfPlanet = (m_altitude + this.WorldRadius); + double distToCenterOfPlanet = (m_altitude + m_worldRadius); double tangentalDistance = Math.Sqrt( distToCenterOfPlanet*distToCenterOfPlanet - m_worldRadius*m_worldRadius); m_projectionMatrix = Matrix.PerspectiveFovRH( (float)m_fov.Radians, aspectRatio, zNear, (float)tangentalDistance ); } Modified: trunk/Punt/PluginSDK/WorldCamera.cs =================================================================== --- trunk/Punt/PluginSDK/WorldCamera.cs 2006-04-15 12:13:45 UTC (rev 147) +++ trunk/Punt/PluginSDK/WorldCamera.cs 2006-04-15 14:40:15 UTC (rev 148) @@ -28,8 +28,10 @@ public WorldCamera( double radius ) : base( radius ) { m_targetOrientation = m_orientation; - m_targetDistance = m_distance; - m_targetAltitude = m_altitude; + m_distance = 20 * m_worldRadius; + m_altitude = 20 * m_worldRadius; + m_targetDistance = radius; + m_targetAltitude = radius; m_targetTilt = m_tilt; m_targetFov = m_fov; } @@ -70,7 +72,7 @@ } m_tilt += (m_targetTilt-m_tilt)*percent; m_bank += (m_targetBank-m_bank)*percent; - m_distance += (m_targetDistance-m_distance)*percent; + m_distance += (m_targetDistance - m_distance)*percent; if(World.Settings.cameraIsFreeLook) // Lerp @@ -142,7 +144,6 @@ #endregion - #region ICamera interface public override void Update(Device device) @@ -327,10 +328,6 @@ /// <param name="radius"></param> public MomentumCamera( double radius ) : base( radius ) { - m_targetOrientation = m_orientation; - m_targetDistance = m_distance; - m_targetAltitude = m_altitude; - m_targetTilt = m_tilt; } public override void RotationYawPitchRoll(Angle yaw, Angle pitch, Angle roll) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-15 23:20:05
|
Revision: 152 Author: mashiharu Date: 2006-04-15 16:19:31 -0700 (Sat, 15 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=152&view=rev Log Message: ----------- PNT-14: Cleanup Modified Paths: -------------- trunk/Punt/PluginSDK/Configuration/Pages/FileSystemPage.cs trunk/Punt/PluginSDK/Configuration/PuntSettings.cs trunk/Punt/PluginSDK/Configuration/WorldSettings.cs trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs trunk/Punt/PluginSDK/Menu/ToolbarButton.cs trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs trunk/Punt/PluginSDK/PluginSDK.csproj trunk/Punt/WorldWindow/PositionInformation.cs trunk/Punt/WorldWindow/WorldWindow.cs Added Paths: ----------- trunk/Punt/PluginSDK/Configuration/Statistics.cs Modified: trunk/Punt/PluginSDK/Configuration/Pages/FileSystemPage.cs =================================================================== --- trunk/Punt/PluginSDK/Configuration/Pages/FileSystemPage.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/PluginSDK/Configuration/Pages/FileSystemPage.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -181,7 +181,7 @@ // // label3 // - this.label3.Location = new System.Drawing.Point(16, 72); + this.label3.Location = new System.Drawing.Point(24, 72); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(592, 16); this.label3.TabIndex = 1; Modified: trunk/Punt/PluginSDK/Configuration/PuntSettings.cs =================================================================== --- trunk/Punt/PluginSDK/Configuration/PuntSettings.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/PluginSDK/Configuration/PuntSettings.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -579,10 +579,8 @@ Utility.Log.Write(caught); return UriSchemeAssociation.Error; } - } - // comment out ToString() to have namespace+class name being used as filename public override string ToString() { Added: trunk/Punt/PluginSDK/Configuration/Statistics.cs =================================================================== --- trunk/Punt/PluginSDK/Configuration/Statistics.cs (rev 0) +++ trunk/Punt/PluginSDK/Configuration/Statistics.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -0,0 +1,178 @@ +using Punt.Net; +using System; +using System.Globalization; +using System.ComponentModel; +using System.Xml.Serialization; + +namespace Punt.Configuration +{ + /// <summary> + /// Application runtime statistics + /// </summary> + [XmlInclude(typeof(Statistics))] + public class Statistics : IDisposable + { + public static readonly DateTime ApplicationStartTime = DateTime.Now; + private TimeSpan totalRuntime = TimeSpan.Zero; + private int applicationStartCount; + private long bytesDownloaded; + private long filesDownloaded; + private long failedDownloads; + private long totalCachedBytesOnLastCheck; + + public Statistics() + { + WebDownload.DownloadEnded += new DownloadDelegate(OnDownloadComplete); + } + + [Browsable(true),Category("General")] + [Description("The number of times the program has been started since installation.")] + public int ApplicationStartCount + { + get + { + return applicationStartCount; + } + set + { + applicationStartCount = value; + } + } + + [Browsable(true),Category("Network")] + [Description("The number of bytes downloaded from the network since installation.")] + public long BytesDownloaded + { + get + { + return bytesDownloaded; + } + set + { + bytesDownloaded = value; + } + } + + [Browsable(true),Category("Network")] + [Description("The number of files downloaded from the network since installation.")] + public long FilesDownloaded + { + get + { + return filesDownloaded; + } + set + { + filesDownloaded = value; + } + } + + [Browsable(true),Category("Network")] + [Description("The number of failed downloads from the network since installation.")] + public long FailedDownloads + { + get + { + return failedDownloads; + } + set + { + failedDownloads = value; + } + } + + [Browsable(false)] + public long TotalCachedBytesOnLastCheck + { + get + { + return totalCachedBytesOnLastCheck; + } + set + { + totalCachedBytesOnLastCheck = value; + } + } + + [XmlIgnore] + [Browsable(true),Category("Cache")] + [Description("Amount of temporary storage that was used last time cache was scanned.")] + public string DiskCacheUsage + { + get + { + return string.Format( CultureInfo.CurrentCulture, + I18N._("{0:f1} MB"), totalCachedBytesOnLastCheck/1024.0/1024.0 ); + } + } + + [Browsable(true),Category("General")] + [Description("Total amount of time the application has been running since installation.")] + [XmlIgnore] + public TimeSpan TotalRuntime + { + get + { + return totalRuntime + DateTime.Now.Subtract(ApplicationStartTime); + } + set + { + totalRuntime = value; + } + } + + [Browsable(true),Category("General")] + [Description("Memory (RAM) currently used by Punt.")] + [XmlIgnore] + public string MemoryUsage + { + get + { + return string.Format(I18N._("{0:f1} MB"), Environment.WorkingSet/1024/1024 ); + } + } + + /// <summary> + /// Because Microsoft forgot to implement TimeSpan in their xml serializer. + /// </summary> + [Browsable(false)] + [XmlElement("TotalRunTime")] + public long TotalRunTimeXml + { + get + { + return TotalRuntime.Ticks; + } + set + { + totalRuntime = TimeSpan.FromTicks(value); + } + } + + /// <summary> + /// Called when a download is finished. + /// </summary> + protected void OnDownloadComplete(WebDownload wd) + { + lock(this) + { + if(wd.Exception!=null) + failedDownloads++; + else + filesDownloaded++; + + bytesDownloaded += wd.ContentLength; + } + } + + #region IDisposable Members + + public void Dispose() + { + WebDownload.DownloadEnded += new DownloadDelegate(OnDownloadComplete); + } + + #endregion + } + +} Modified: trunk/Punt/PluginSDK/Configuration/WorldSettings.cs =================================================================== --- trunk/Punt/PluginSDK/Configuration/WorldSettings.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/PluginSDK/Configuration/WorldSettings.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -49,175 +49,6 @@ } /// <summary> - /// Application runtime statistics - /// </summary> - [XmlInclude(typeof(Statistics))] - public class Statistics : IDisposable - { - public static readonly DateTime ApplicationStartTime = DateTime.Now; - private TimeSpan totalRuntime = TimeSpan.Zero; - private int applicationStartCount; - private long bytesDownloaded; - private long filesDownloaded; - private long failedDownloads; - private long totalCachedBytesOnLastCheck; - - public Statistics() - { - WebDownload.DownloadEnded += new DownloadDelegate(OnDownloadComplete); - } - - [Browsable(true),Category("General")] - [Description("The number of times the program has been started since installation.")] - public int ApplicationStartCount - { - get - { - return applicationStartCount; - } - set - { - applicationStartCount = value; - } - } - - [Browsable(true),Category("Network")] - [Description("The number of bytes downloaded from the network since installation.")] - public long BytesDownloaded - { - get - { - return bytesDownloaded; - } - set - { - bytesDownloaded = value; - } - } - - [Browsable(true),Category("Network")] - [Description("The number of files downloaded from the network since installation.")] - public long FilesDownloaded - { - get - { - return filesDownloaded; - } - set - { - filesDownloaded = value; - } - } - - [Browsable(true),Category("Network")] - [Description("The number of failed downloads from the network since installation.")] - public long FailedDownloads - { - get - { - return failedDownloads; - } - set - { - failedDownloads = value; - } - } - - [Browsable(false)] - public long TotalCachedBytesOnLastCheck - { - get - { - return totalCachedBytesOnLastCheck; - } - set - { - totalCachedBytesOnLastCheck = value; - } - } - - [XmlIgnore] - [Browsable(true),Category("Cache")] - [Description("Amount of temporary storage that was used last time cache was scanned.")] - public string DiskCacheUsage - { - get - { - return string.Format( CultureInfo.CurrentCulture, - I18N._("{0:f1} MB"), totalCachedBytesOnLastCheck/1024.0/1024.0 ); - } - } - - [Browsable(true),Category("General")] - [Description("Total amount of time the application has been running since installation.")] - [XmlIgnore] - public TimeSpan TotalRuntime - { - get - { - return totalRuntime + DateTime.Now.Subtract(ApplicationStartTime); - } - set - { - totalRuntime = value; - } - } - - [Browsable(true),Category("General")] - [Description("Memory (RAM) currently used by Punt.")] - [XmlIgnore] - public string MemoryUsage - { - get - { - return string.Format(I18N._("{0:f1} MB"), Environment.WorkingSet/1024/1024 ); - } - } - - /// <summary> - /// Because Microsoft forgot to implement TimeSpan in their xml serializer. - /// </summary> - [Browsable(false)] - [XmlElement("TotalRunTime")] - public long TotalRunTimeXml - { - get - { - return TotalRuntime.Ticks; - } - set - { - totalRuntime = TimeSpan.FromTicks(value); - } - } - - /// <summary> - /// Called when a download is finished. - /// </summary> - protected void OnDownloadComplete(WebDownload wd) - { - lock(this) - { - if(wd.Exception!=null) - failedDownloads++; - else - filesDownloaded++; - - bytesDownloaded += wd.ContentLength; - } - } - - #region IDisposable Members - - public void Dispose() - { - WebDownload.DownloadEnded += new DownloadDelegate(OnDownloadComplete); - } - - #endregion - } - - /// <summary> /// World user configurable settings /// TODO: Group settings /// </summary> Modified: trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -26,14 +26,6 @@ } } - public override bool OnMouseDown(MouseEventArgs e) - { - if(IsPushed) - return this.lmm.OnMouseDown(e); - else - return false; - } - public override bool OnMouseMove(MouseEventArgs e) { if(lmm!=null && IsPushed) Modified: trunk/Punt/PluginSDK/Menu/ToolbarButton.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -212,7 +212,7 @@ get { return curSize; } } - public void RenderEnabledIcon(Sprite sprite, DrawArgs drawArgs, float centerX, float topY, + public void RenderIcon(Sprite sprite, DrawArgs drawArgs, float centerX, float topY, bool selected ) { float width = selected ? ToolbarButton.SelectedSize : width = ToolbarButton.NormalSize; @@ -221,7 +221,8 @@ int color = selected ? white : transparent; float centerY = topY + curSize*0.5f; - this.RenderIcon(sprite, (int)centerX, (int)centerY, (int)curSize, (int)curSize, color, m_iconTexture); + RenderIcon(sprite, (int)centerX, (int)centerY, (int)curSize, (int)curSize, + color, m_iconTexture); if(curSize==0) curSize=width; @@ -258,10 +259,6 @@ color); } - public virtual void Update(DrawArgs drawArgs) - { - } - public virtual void Render(DrawArgs drawArgs) { } @@ -275,24 +272,12 @@ { return false; } - public virtual bool OnMouseDown(MouseEventArgs e) - { - return false; - } public virtual bool OnMouseWheel(MouseEventArgs e) { return false; } - public virtual void OnKeyUp(KeyEventArgs keyEvent) - { - } - - public virtual void OnKeyDown(KeyEventArgs keyEvent) - { - } - public virtual void Dispose() { if(m_iconTexture != null) Modified: trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -10,9 +10,10 @@ /// <summary> /// Toolbar /// </summary> - public class ToolBarMenu + public class ToolBarMenu { #region Private Members + protected ArrayList m_toolsMenuButtons = new ArrayList(); protected ArrayList m_layersMenuButtons = new ArrayList(); protected VisibleState m_visibleState = VisibleState.Visible; @@ -35,7 +36,7 @@ /// <summary> /// Indicates whether the menu is "open". (user activity) /// </summary> - public bool IsActive + public bool Focused { get { @@ -129,22 +130,25 @@ } } + /// <summary> + /// Finds the button at specified index. + /// </summary> + ToolbarButton GetAt(int index) + { + if(index < m_toolsMenuButtons.Count) + return (ToolbarButton)m_toolsMenuButtons[index]; + else + return (ToolbarButton)m_layersMenuButtons[index - m_toolsMenuButtons.Count]; + } + public bool OnMouseUp(MouseEventArgs e) { if(World.Settings.showToolBar) { if(m_curSelection != -1 && e.Button == MouseButtons.Left) { - if(m_curSelection < m_toolsMenuButtons.Count) - { - ToolbarButton button = (ToolbarButton)m_toolsMenuButtons[m_curSelection]; - button.IsPushed = !button.IsPushed; - } - else - { - ToolbarButton button = (ToolbarButton)m_layersMenuButtons[m_curSelection - m_toolsMenuButtons.Count]; - button.IsPushed = !button.IsPushed; - } + ToolbarButton button = GetAt(m_curSelection); + button.IsPushed = !button.IsPushed; return true; } @@ -159,17 +163,6 @@ return false; } - public bool OnMouseDown(MouseEventArgs e) - { - // Trigger "tool" update - foreach(ToolbarButton button in m_toolsMenuButtons) - if(button.IsPushed) - if(button.OnMouseDown(e)) - return true; - - return false; - } - int m_curSelection = -1; public bool OnMouseMove(MouseEventArgs e) @@ -230,12 +223,6 @@ // Does not render the button, but the functionality behind the button button.Render(drawArgs); - foreach(ToolbarButton button in m_toolsMenuButtons) - button.Update(drawArgs); - - foreach(ToolbarButton button in m_layersMenuButtons) - button.Update(drawArgs); - if(!World.Settings.showToolBar) return; @@ -320,11 +307,7 @@ float extra = 0; for(int i = 0; i < totalNumberButtons; i++) { - ToolbarButton button; - if(i < m_toolsMenuButtons.Count) - button = (ToolbarButton)m_toolsMenuButtons[i]; - else - button = (ToolbarButton)m_layersMenuButtons[i - m_toolsMenuButtons.Count]; + ToolbarButton button = GetAt(i); total += button.CurrentSize; extra += button.CurrentSize-ToolbarButton.NormalSize; } @@ -377,7 +360,7 @@ DrawArgs.Device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1); } - button.RenderEnabledIcon( + button.RenderIcon( m_sprite, drawArgs, centerX, Modified: trunk/Punt/PluginSDK/PluginSDK.csproj =================================================================== --- trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-15 23:19:31 UTC (rev 152) @@ -277,6 +277,11 @@ BuildAction = "Compile" /> <File + RelPath = "Configuration\Statistics.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "Configuration\WorldSettings.cs" SubType = "Code" BuildAction = "Compile" Modified: trunk/Punt/WorldWindow/PositionInformation.cs =================================================================== --- trunk/Punt/WorldWindow/PositionInformation.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/WorldWindow/PositionInformation.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -99,7 +99,7 @@ Rectangle textRect = Rectangle.FromLTRB(x, y, drawArgs.screenWidth - 8, drawArgs.screenHeight - 8); // Hide position info when toolbar is open - if (m_toolBar.IsActive) + if (m_toolBar.Focused) { positionAlpha -= positionAlphaStep; if (positionAlpha < positionAlphaMin) Modified: trunk/Punt/WorldWindow/WorldWindow.cs =================================================================== --- trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-15 22:06:30 UTC (rev 151) +++ trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-15 23:19:31 UTC (rev 152) @@ -1086,16 +1086,8 @@ mouseDownStartPosition.X = e.X; mouseDownStartPosition.Y = e.Y; - try - { - if(m_toolBar.OnMouseDown(e)) - return; - } - finally - { - // Call the base class method so that registered delegates receive the event. - base.OnMouseDown(e); - } + // Call the base class method so that registered delegates receive the event. + base.OnMouseDown(e); } protected override void OnMouseUp(MouseEventArgs e) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-16 19:37:06
|
Revision: 156 Author: mashiharu Date: 2006-04-16 12:36:43 -0700 (Sun, 16 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=156&view=rev Log Message: ----------- PNT-14: Make layer manager a first class citizen rather than a member of toolbar buton. Modified Paths: -------------- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs trunk/Punt/PluginSDK/Menu/ToolbarButton.cs trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs trunk/Punt/PluginSDK/PluginSDK.csproj trunk/Punt/WorldWindow/WorldWindow.cs Removed Paths: ------------- trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs Deleted: trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs 2006-04-16 19:09:27 UTC (rev 155) +++ trunk/Punt/PluginSDK/Menu/LayerManagerButton.cs 2006-04-16 19:36:43 UTC (rev 156) @@ -1,64 +0,0 @@ -using System; -using System.Windows.Forms; - -namespace Punt.Menu -{ - public class LayerManagerButton : ToolbarButton - { - World m_parentWorld; - LayerManagerMenu lmm; - - public LayerManagerButton(string iconTexturePath, object target, - string onOffPropertyName) : base(iconTexturePath, target, onOffPropertyName) - { - this.Description = I18N._("Layer Manager"); - } - - public World World - { - get - { - return m_parentWorld; - } - set - { - m_parentWorld = value; - } - } - - public override bool OnMouseMove(MouseEventArgs e) - { - if(lmm!=null && IsPushed) - return this.lmm.OnMouseMove(e); - else - return false; - } - - public override bool OnMouseUp(MouseEventArgs e) - { - if(IsPushed) - return this.lmm.OnMouseUp(e); - else - return false; - } - - public override bool OnMouseWheel(MouseEventArgs e) - { - if(IsPushed) - return this.lmm.OnMouseWheel(e); - else - return false; - } - - public override void Render(DrawArgs drawArgs) - { - if(IsPushed) - { - if(lmm == null) - lmm = new LayerManagerMenu(m_parentWorld, this); - - lmm.Render(drawArgs); - } - } - } -} Modified: trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-16 19:09:27 UTC (rev 155) +++ trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-16 19:36:43 UTC (rev 156) @@ -12,7 +12,7 @@ /// <summary> /// Layer manager window /// </summary> - internal class LayerManagerMenu + public class LayerManagerMenu : IPuntControl { public int DialogColor = System.Drawing.Color.Gray.ToArgb(); public int TextColor = System.Drawing.Color.White.ToArgb(); @@ -20,7 +20,6 @@ public int ScrollBarSize = 20; public int ItemHeight = 20; World m_parentWorld; - ToolbarButton m_parentButton; bool showScrollBar; int scrollBarPosition; float scrollSmoothPosition; // Current position of scroll when smooth scrolling (scrollBarPosition=target) @@ -164,11 +163,9 @@ /// Initializes a new instance of the <see cref= "T:Punt.Menu.LayerManagerMenu"/> class. /// </summary> /// <param name="parentWorld"></param> - /// <param name="parentButton"></param> - public LayerManagerMenu(World parentWorld, ToolbarButton parentButton) + public LayerManagerMenu(World parentWorld) { m_parentWorld = parentWorld; - m_parentButton = parentButton; } public virtual void OnKeyDown(KeyEventArgs keyEvent) @@ -301,7 +298,8 @@ if(e.X > this.Right - 20 && e.X < this.Right && e.Y > this.Top && e.Y < this.Top + topBorder) { - m_parentButton.IsPushed = false; + // Close button (X) + World.Settings.ShowLayerManager = false; return true; } else if(e.X > 0 && e.X < this.Right && e.Y > 0 && e.Y < this.Bottom) Modified: trunk/Punt/PluginSDK/Menu/ToolbarButton.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-16 19:09:27 UTC (rev 155) +++ trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-16 19:36:43 UTC (rev 156) @@ -270,25 +270,6 @@ color); } - public virtual void Render(DrawArgs drawArgs) - { - } - - public virtual bool OnMouseUp(MouseEventArgs e) - { - return false; - } - - public virtual bool OnMouseMove(MouseEventArgs e) - { - return false; - } - - public virtual bool OnMouseWheel(MouseEventArgs e) - { - return false; - } - public virtual void Dispose() { if(m_iconTexture != null) Modified: trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-16 19:09:27 UTC (rev 155) +++ trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-16 19:36:43 UTC (rev 156) @@ -79,10 +79,9 @@ string dataPathParent = PuntSettings.DataPathParent(); // Toolbar Buttons that apply to all worlds. - LayerManagerButton layerManagerButton = new LayerManagerButton( + ToolbarButton layerManagerButton = new ToolbarButton( @"interface\layer-manager2.png", World.Settings, "ShowLayerManager"); - layerManagerButton.World = world; AddToolButton(layerManagerButton); ToolbarButton positionButton = new ToolbarButton( @@ -215,23 +214,14 @@ public bool OnMouseUp(MouseEventArgs e) { - if(World.Settings.showToolBar) + if(m_curSelection != -1 && e.Button == MouseButtons.Left) { - if(m_curSelection != -1 && e.Button == MouseButtons.Left) - { - ToolbarButton button = GetAt(m_curSelection); - button.IsPushed = !button.IsPushed; + ToolbarButton button = GetAt(m_curSelection); + button.IsPushed = !button.IsPushed; - return true; - } + return true; } - // Pass message on to the "tools" - foreach(ToolbarButton button in m_toolsMenuButtons) - if(button.IsPushed) - if(button.OnMouseUp(e)) - return true; - return false; } @@ -242,15 +232,6 @@ // Default to arrow cursor every time mouse moves mouseCursor = CursorType.Arrow; - // Trigger "tools" update - foreach(ToolbarButton button in m_toolsMenuButtons) - if(button.IsPushed) - if(button.OnMouseMove(e)) - return true; - - if(!World.Settings.showToolBar) - return false; - if(m_visibleState == VisibleState.Visible) { int buttonCount = m_toolsMenuButtons.Count + m_layersMenuButtons.Count; @@ -273,12 +254,6 @@ public bool OnMouseWheel(MouseEventArgs e) { - // Trigger "tool" update - foreach(ToolbarButton button in m_toolsMenuButtons) - if(button.IsPushed) - if(button.OnMouseWheel(e)) - return true; - return false; } @@ -290,11 +265,6 @@ if(mouseCursor!=CursorType.Arrow) DrawArgs.MouseCursor = mouseCursor; - foreach(ToolbarButton button in m_toolsMenuButtons) - if(button.IsPushed) - // Does not render the button, but the functionality behind the button - button.Render(drawArgs); - if(m_isHideable) { if(m_visibleState == VisibleState.NotVisible) Modified: trunk/Punt/PluginSDK/PluginSDK.csproj =================================================================== --- trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-16 19:09:27 UTC (rev 155) +++ trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-16 19:36:43 UTC (rev 156) @@ -417,11 +417,6 @@ BuildAction = "EmbeddedResource" /> <File - RelPath = "Menu\LayerManagerButton.cs" - SubType = "Code" - BuildAction = "Compile" - /> - <File RelPath = "Menu\LayerManagerMenu.cs" SubType = "Code" BuildAction = "Compile" Modified: trunk/Punt/WorldWindow/WorldWindow.cs =================================================================== --- trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-16 19:09:27 UTC (rev 155) +++ trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-16 19:36:43 UTC (rev 156) @@ -1269,11 +1269,7 @@ { // reset controls mouseover state. MouseEventArgs me = new MouseEventArgs(MouseButtons.None, 0, -1, -1, 0); - lock (controls) - { - foreach (IPuntControl control in controls) - OnMouseMove(me); - } + OnMouseMove(me); base.OnMouseLeave(e); } @@ -1545,15 +1541,19 @@ { IPuntControl toolbar = null; IPuntControl posInfo = null; + IPuntControl layerManager = null; foreach (IPuntControl control in controls) { if (control is ToolBarMenu) toolbar = control; else if (control is PositionInformation) posInfo = control; + else if (control is LayerManagerMenu) + layerManager = control; } // HACK: Write this in an elegant way + // Toolbar if (World.Settings.ShowToolbar) { if (toolbar==null) @@ -1562,6 +1562,7 @@ else RemoveControl(toolbar); + // Position info if (World.Settings.ShowPosition) { if (posInfo == null) @@ -1569,6 +1570,15 @@ } else RemoveControl(posInfo); + + // Layer manager + if (World.Settings.ShowLayerManager) + { + if (layerManager == null) + controls.Add(new LayerManagerMenu(world)); + } + else + RemoveControl(layerManager); } void RemoveControl(IPuntControl control) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-17 13:25:20
|
Revision: 165 Author: mashiharu Date: 2006-04-17 06:24:21 -0700 (Mon, 17 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=165&view=rev Log Message: ----------- PNT-25: Added layer info panel. Modified Paths: -------------- trunk/Punt/PluginSDK/DrawArgs.cs trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs trunk/Punt/PluginSDK/Menu/ToolbarButton.cs trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs trunk/Punt/PluginSDK/PluginSDK.csproj trunk/Punt/PluginSDK/Renderable/DownloadableImageFromIconSet.cs trunk/Punt/PluginSDK/Renderable/Icon.cs trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs trunk/Punt/PluginSDK/RenderableObject.cs trunk/Punt/PluginSDK/VisualControl/UIPaint.cs trunk/Punt/PluginSDK/World.cs trunk/Punt/WorldWindow/PositionInformation.cs trunk/Punt/WorldWindow/WorldWindow.cs Added Paths: ----------- trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs Modified: trunk/Punt/PluginSDK/DrawArgs.cs =================================================================== --- trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -11,6 +11,7 @@ using Punt.Configuration; using Punt.Net; using Punt.Renderable; +using Punt.VisualControl; namespace Punt { @@ -21,8 +22,8 @@ public System.Windows.Forms.Control parentControl; public Font defaultDrawingFont; public Font toolBarFont; - public int screenWidth; - public int screenHeight; + public static int screenWidth; + public static int screenHeight; /// <summary> /// The mouse button that was released last. @@ -82,10 +83,10 @@ // Remove focus to render as unfocused RenderableObject previousFocus = m_focusedObject; - m_focusedObject = null; + if(previousFocus!=null) + previousFocus.Render(this); + } - previousFocus.Render(this); - } m_focusedObject = value; } } @@ -148,6 +149,24 @@ public void EndRender() { + // Render focused object (top of stack) + if (m_focusedObject != null) + { + RenderableObject ro = m_focusedObject as RenderableObject; + if(ro!=null) + ro.RenderFocused(this); + } + + RenderInformationPanel(); + try + { + Device.EndScene(); + } + catch(InvalidCallException) + { + // Ignore the exception we get here if + // BeginScene hasn't been called. + } } /// <summary> @@ -318,6 +337,39 @@ } #endregion + + + object FocusLastObject; + InfoPanel InfoPanel; + + void RenderInformationPanel() + { + UpdateInformationPanel(); + if(InfoPanel != null) + InfoPanel.Render(); + } + + /// <summary> + /// Swaps out the infopanel when required. + /// </summary> + void UpdateInformationPanel() + { + if(FocusLastObject == m_focusedObject) + return; + FocusLastObject = m_focusedObject; + + if(InfoPanel != null) + { + InfoPanel.Dispose(); + InfoPanel = null; + } + + IHasInfoPanel ihi = m_focusedObject as IHasInfoPanel; + if(ihi==null) + return; + + InfoPanel = ihi.CreateInfoPanel(); + } } /// <summary> Modified: trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -60,7 +60,7 @@ public override void Render(DrawArgs drawArgs) { - Bottom = drawArgs.screenHeight-1; + Bottom = DrawArgs.screenHeight-1; // Background DrawArgs.Device.RenderState.AlphaBlendEnable = true; @@ -87,6 +87,9 @@ outlineVerts[4].Y = Top; UIPaint.DrawLine(outlineVerts, PuntSettings.Instance.menuOutlineColor, DrawArgs.Device); + + if(MouseOverItem != null) + drawArgs.FocusedObject = MouseOverItem.RenderableObject; } /// <summary> Modified: trunk/Punt/PluginSDK/Menu/ToolbarButton.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -20,7 +20,7 @@ static int black = System.Drawing.Color.Black.ToArgb(); static int transparent = Color.FromArgb(140,255,255,255).ToArgb(); int alpha; - const int alphaStep = 30; + const int alphaStep = 20; const float zoomSpeed = 1.2f; public static float NormalSize; @@ -80,7 +80,7 @@ #region Properties - public virtual bool IsPushed + public virtual bool Pushed { get { @@ -92,6 +92,17 @@ } } + /// <summary> + /// The object this button is controlling. + /// </summary> + public virtual object Target + { + get + { + return m_targetObject; + } + } + public string Description { get @@ -139,97 +150,12 @@ } } - public void RenderLabel( DrawArgs drawArgs, int x, int y, int buttonHeight, bool selected ) - { - if (selected) - { - if(selected) - { - alpha += alphaStep; - if(alpha>255) - alpha = 255; - } - } - else - { - alpha -= alphaStep; - if (alpha<0) - { - alpha=0; - return; - } - } - - DrawTextFormat format = DrawTextFormat.NoClip | DrawTextFormat.Center | DrawTextFormat.WordBreak; - int halfWidth = (int)(SelectedSize*0.75); - Rectangle rect = new System.Drawing.Rectangle( - x-halfWidth+1, - (int)(y+NormalSize)+1, - (int)halfWidth*2, - 200); - - if(rect.Right>drawArgs.screenWidth) - { - rect = Rectangle.FromLTRB(rect.Left, rect.Top, drawArgs.screenWidth, rect.Bottom); - } - - drawArgs.toolBarFont.DrawText( - null, - Description, - rect, - format, - black & 0xffffff + (alpha<<24)); - - rect.Offset(2,0); - - drawArgs.toolBarFont.DrawText( - null, - Description, - rect, - format, - black & 0xffffff + (alpha<<24)); - - rect.Offset(0,2); - - drawArgs.toolBarFont.DrawText( - null, - Description, - rect, - format, - black & 0xffffff + (alpha<<24)); - - rect.Offset(-2,0); - - drawArgs.toolBarFont.DrawText( - null, - Description, - rect, - format, - black & 0xffffff + (alpha<<24)); - - rect.Offset(1,-1); - - drawArgs.toolBarFont.DrawText( - null, - Description, - rect, - format, - white & 0xffffff + (alpha<<24)); - } - - public float CurrentSize - { - get { return NormalSize; } - } - public void RenderIcon(Sprite sprite, DrawArgs drawArgs, float centerX, float topY, bool selected ) { float width = selected ? ToolbarButton.SelectedSize : width = ToolbarButton.NormalSize; - RenderLabel( drawArgs, (int)centerX, (int)topY, (int)width, selected ); + int color = white; - int color = selected ? white : transparent; - float centerY = topY + NormalSize*0.5f; if(selected) Modified: trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -209,7 +209,7 @@ if(m_curSelection != -1 && e.Button == MouseButtons.Left) { ToolbarButton button = GetAt(m_curSelection); - button.IsPushed = !button.IsPushed; + button.Pushed = !button.Pushed; return true; } @@ -293,7 +293,7 @@ ToolbarButton.NormalSize = ToolbarButton.SelectedSize/2; m_outerPadding = ToolbarButton.NormalSize * padRatio; - x = (int)(drawArgs.screenWidth / 2 - totalNumberButtons * ToolbarButton.NormalSize / 2 - m_outerPadding); + x = (int)(DrawArgs.screenWidth / 2 - totalNumberButtons * ToolbarButton.NormalSize / 2 - m_outerPadding); y = 0; if(m_visibleState == VisibleState.Ascending) @@ -323,9 +323,9 @@ { m_outerPadding = ToolbarButton.NormalSize*padRatio; float menuWidth = (ToolbarButton.NormalSize+m_outerPadding)*totalNumberButtons+m_outerPadding; - if(menuWidth>drawArgs.screenWidth) + if(menuWidth>DrawArgs.screenWidth) { - ToolbarButton.NormalSize = (drawArgs.screenWidth)/((padRatio+1)*totalNumberButtons+padRatio); + ToolbarButton.NormalSize = (DrawArgs.screenWidth)/((padRatio+1)*totalNumberButtons+padRatio); m_outerPadding = ToolbarButton.NormalSize*padRatio; } @@ -333,7 +333,7 @@ if(m_visibleState != VisibleState.NotVisible) { const int shadowHeight = 0; - UIPaint.DrawBox(0, 0, drawArgs.screenWidth, + UIPaint.DrawBox(0, 0, DrawArgs.screenWidth, (int)(ToolbarButton.NormalSize + 2 * m_outerPadding + shadowHeight), background); } @@ -344,8 +344,7 @@ for(int i = 0; i < totalNumberButtons; i++) { ToolbarButton button = GetAt(i); - total += button.CurrentSize; - extra += button.CurrentSize-ToolbarButton.NormalSize; + total += ToolbarButton.NormalSize; } float pad = ((float)m_outerPadding*(totalNumberButtons+1) - extra)/(totalNumberButtons+1); @@ -365,14 +364,14 @@ if(m_visibleState != VisibleState.NotVisible) { - int centerX = (int)(buttonX+button.CurrentSize*0.5f); - buttonX += button.CurrentSize + pad; + int centerX = (int)(buttonX + ToolbarButton.NormalSize*0.5f); + buttonX += ToolbarButton.NormalSize + pad; float buttonTopY = y + m_outerPadding; - if(button.IsPushed) + if(button.Pushed) { // Draw the chevron - float chevronSize = button.CurrentSize*padRatio; + float chevronSize = ToolbarButton.NormalSize*padRatio; enabledChevron[0].Color = chevronColor; enabledChevron[1].Color = chevronColor; @@ -400,6 +399,15 @@ } } m_sprite.End(); + + if(m_curSelection>=0) + { + // Tell the system which "layer" we are mouseovered. + ToolbarButton tb = GetAt(m_curSelection); + RenderableObject ro = tb.Target as RenderableObject; + if(ro != null) + drawArgs.FocusedObject = ro; + } } } Modified: trunk/Punt/PluginSDK/PluginSDK.csproj =================================================================== --- trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-17 13:24:21 UTC (rev 165) @@ -532,6 +532,11 @@ BuildAction = "None" /> <File + RelPath = "VisualControl\InfoPanel.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "VisualControl\PropertyBrowser.cs" SubType = "Form" BuildAction = "Compile" Modified: trunk/Punt/PluginSDK/Renderable/DownloadableImageFromIconSet.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/DownloadableImageFromIconSet.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/Renderable/DownloadableImageFromIconSet.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -427,7 +427,7 @@ int left = 10; if(PuntSettings.Instance.showLayerManager) left += PuntSettings.Instance.layerManagerWidth; - Rectangle r1 = Rectangle.FromLTRB(left, 10, drawArgs.screenWidth - 10, drawArgs.screenHeight - 10 ); + Rectangle r1 = Rectangle.FromLTRB(left, 10, DrawArgs.screenWidth - 10, DrawArgs.screenHeight - 10 ); // Draw outline drawArgs.defaultDrawingFont.DrawText( @@ -514,8 +514,8 @@ drawArgs.defaultDrawingFont.DrawText(null, caption, new Rectangle( (int)(projectedPoint.X + 0.5f*curSize + 5), - (int)(projectedPoint.Y - 0.5f*drawArgs.screenHeight), - drawArgs.screenWidth, drawArgs.screenHeight), + (int)(projectedPoint.Y - 0.5f*DrawArgs.screenHeight), + DrawArgs.screenWidth, DrawArgs.screenHeight), DrawTextFormat.WordBreak | DrawTextFormat.NoClip | DrawTextFormat.VerticalCenter, Color.White.ToArgb()); } Modified: trunk/Punt/PluginSDK/Renderable/Icon.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/Icon.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/Renderable/Icon.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -675,7 +675,7 @@ (int)projectedPoint.X - (labelWidth>>1), (int)(projectedPoint.Y - (drawArgs.defaultDrawingFont.Description.Height >> 1)), labelWidth, - drawArgs.screenHeight ); + DrawArgs.screenHeight ); drawArgs.defaultDrawingFont.DrawText(sprite, Name, rect, DrawTextFormat.Center, color); } @@ -719,7 +719,7 @@ int left = 10; if(PuntSettings.Instance.showLayerManager) left += PuntSettings.Instance.layerManagerWidth; - Rectangle r1 = Rectangle.FromLTRB(left, 10, drawArgs.screenWidth - 10, drawArgs.screenHeight - 10 ); + Rectangle r1 = Rectangle.FromLTRB(left, 10, DrawArgs.screenWidth - 10, DrawArgs.screenHeight - 10 ); // Draw outline drawArgs.defaultDrawingFont.DrawText( @@ -761,7 +761,7 @@ (int)projectedPoint.X + offsetForIcon, (int)(projectedPoint.Y - (drawArgs.defaultDrawingFont.Description.Height >> 1)), labelWidth, - drawArgs.screenHeight ); + DrawArgs.screenHeight ); drawArgs.defaultDrawingFont.DrawText(null, Name, r2, DrawTextFormat.WordBreak, hotColor); } Modified: trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -675,7 +675,7 @@ int halfIconHeight = 24; int halfIconWidth = 24; - Vector3 projectedPoint = new Vector3(drawArgs.screenWidth - halfIconWidth - 10, drawArgs.screenHeight - 34, 0.5f); + Vector3 projectedPoint = new Vector3(DrawArgs.screenWidth - halfIconWidth - 10, DrawArgs.screenHeight - 34, 0.5f); // Render progress bar if (progressBar == null) Modified: trunk/Punt/PluginSDK/RenderableObject.cs =================================================================== --- trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -2,11 +2,13 @@ using Microsoft.DirectX.Direct3D; using System; using System.Drawing; +using System.Drawing.Drawing2D; using System.Collections; using System.ComponentModel; using System.IO; using System.Windows.Forms; using System.Xml; +using Punt.Configuration; using Punt.VisualControl; namespace Punt.Renderable @@ -14,7 +16,7 @@ /// <summary> /// The base class for objects to be rendered as part of the scene. /// </summary> - public abstract class RenderableObject : IComparable, IDisposable + public abstract class RenderableObject : IComparable, IDisposable, IHasInfoPanel { /// <summary> /// True when object is ready to be rendered. @@ -435,6 +437,47 @@ #endregion + #region IHasInfoPanel Members + + /// <summary> + /// Creates the actual information panel. The caller is responsible for disposing the panel. + /// </summary> + /// <returns></returns> + public virtual InfoPanel CreateInfoPanel() + { + string backgroundPath = Path.Combine(PuntSettings.Instance.IconPath, @"interface\infopanel.png"); + Bitmap bmp = (Bitmap)Image.FromFile(backgroundPath); + using(Graphics g = Graphics.FromImage(bmp)) + { + int left = 10; + Image thumb = ThumbnailImage; + if(thumb!= null) + { + g.DrawImage(thumb, 10, 5); + left = thumb.Width; + } + + using(System.Drawing.Font font = new System.Drawing.Font("Tahoma", 16, FontStyle.Bold)) + g.DrawString(Name, font, Brushes.Black, left, 19); + + int top = 39; + Rectangle trect = new Rectangle(left, top, + bmp.Width-left-20, bmp.Height-top-20); + + const string lorum = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed\n\nEpsum factorial non deposit quid pro quo hic escorol. Olypian quarrels et gorilla congolium sic ad nauseum. Souvlaki ignitus carborundum e pluribus\n\nEpsum factorial non deposit quid"; + string description = Abstract; + if(description == null || description.Length <=0) + description = lorum; + + using(System.Drawing.Font font = new System.Drawing.Font("Tahoma", 12)) + g.DrawString(description, font, Brushes.Black, trect); + } + + InfoPanel panel = new InfoPanel(bmp); + return panel; + } + + #endregion } /// <summary> Added: trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs (rev 0) +++ trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -0,0 +1,58 @@ +using System; +using System.Drawing; +using Microsoft.DirectX.Direct3D; +using Microsoft.DirectX; +using Punt; + +namespace Punt.VisualControl +{ + /// <summary> + /// This interface is implemented by layers that can display an on-screen + /// information panel. + /// </summary> + public interface IHasInfoPanel : IDisposable + { + /// <summary> + /// Creates the actual information panel. The caller is responsible for disposing the panel. + /// </summary> + /// <returns></returns> + InfoPanel CreateInfoPanel(); + } + + /// <summary> + /// Information panel + /// </summary> + public class InfoPanel + { + Bitmap bitmap; + Texture texture; + + public InfoPanel(Bitmap bmp) + { + this.bitmap = bmp; + texture = new Texture(DrawArgs.Device, bmp, Usage.None, Pool.Managed); + } + + public void Render() + { + UIPaint.DrawBox(DrawArgs.screenWidth - bitmap.Width, + DrawArgs.screenHeight - bitmap.Height - 50, + bitmap.Width, bitmap.Height,texture); + } + + public void Dispose() + { + if(texture != null) + { + texture.Dispose(); + texture = null; + } + + if(bitmap != null) + { + bitmap.Dispose(); + bitmap = null; + } + } + } +} Modified: trunk/Punt/PluginSDK/VisualControl/UIPaint.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/UIPaint.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/VisualControl/UIPaint.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -42,20 +42,23 @@ /// <param name="color">Fill color.</param> public static void DrawBox(int ulx, int uly, int width, int height, int color) { - verts[0].X = (float)ulx; - verts[0].Y = (float)uly; + height--; + width--; + + verts[0].X = ulx; + verts[0].Y = uly; verts[0].Color = color; - verts[1].X = (float)ulx; - verts[1].Y = (float)uly + height; + verts[1].X = ulx; + verts[1].Y = uly + height; verts[1].Color = color; - verts[2].X = (float)ulx + width; - verts[2].Y = (float)uly; + verts[2].X = ulx + width; + verts[2].Y = uly; verts[2].Color = color; - verts[3].X = (float)ulx + width; - verts[3].Y = (float)uly + height; + verts[3].X = ulx + width; + verts[3].Y = uly + height; verts[3].Color = color; Device device = DrawArgs.Device; @@ -74,23 +77,26 @@ /// <param name="texture">The texture to fill the box with.</param> public static void DrawBox(int ulx, int uly, int width, int height, Texture texture) { - vertsTextured[0].X = (float)ulx; - vertsTextured[0].Y = (float)uly; + height--; + width--; + + vertsTextured[0].X = ulx; + vertsTextured[0].Y = uly; vertsTextured[0].Tu = 0; vertsTextured[0].Tv = 0; - vertsTextured[1].X = (float)ulx; - vertsTextured[1].Y = (float)uly + height; + vertsTextured[1].X = ulx; + vertsTextured[1].Y = uly + height; vertsTextured[1].Tu = 0; vertsTextured[1].Tv = 1; - vertsTextured[2].X = (float)ulx + width; - vertsTextured[2].Y = (float)uly; + vertsTextured[2].X = ulx + width; + vertsTextured[2].Y = uly; vertsTextured[2].Tu = 1; vertsTextured[2].Tv = 0; - vertsTextured[3].X = (float)ulx + width; - vertsTextured[3].Y = (float)uly + height; + vertsTextured[3].X = ulx + width; + vertsTextured[3].Y = uly + height; vertsTextured[3].Tu = 1; vertsTextured[3].Tv = 1; Modified: trunk/Punt/PluginSDK/World.cs =================================================================== --- trunk/Punt/PluginSDK/World.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/PluginSDK/World.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -238,9 +238,6 @@ if (PuntSettings.Instance.showPlanetAxis) DrawAxis(drawArgs); - - if (drawArgs.FocusedObject != null) - drawArgs.FocusedObject.RenderFocused(drawArgs); } public virtual void Dispose() Modified: trunk/Punt/WorldWindow/PositionInformation.cs =================================================================== --- trunk/Punt/WorldWindow/PositionInformation.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/WorldWindow/PositionInformation.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -88,7 +88,7 @@ DrawTextFormat dtf = DrawTextFormat.NoClip | DrawTextFormat.WordBreak | DrawTextFormat.Right; int x = 7; int y = 65; - Rectangle textRect = Rectangle.FromLTRB(x, y, drawArgs.screenWidth - 8, drawArgs.screenHeight - 8); + Rectangle textRect = Rectangle.FromLTRB(x, y, DrawArgs.screenWidth - 8, DrawArgs.screenHeight - 8); int positionBackColor = positionAlpha << 24; int positionForeColor = (int)((uint)(positionAlpha << 24) + 0xffffffu); Modified: trunk/Punt/WorldWindow/WorldWindow.cs =================================================================== --- trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-17 11:06:30 UTC (rev 164) +++ trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-17 13:24:21 UTC (rev 165) @@ -764,16 +764,6 @@ } finally { - try - { - device.EndScene(); - } - catch(InvalidCallException) - { - // Ignore the exception we get here if - // BeginScene hasn't been called. - } - drawArgs.EndRender(); } drawArgs.UpdateMouseCursor(this); @@ -1182,8 +1172,8 @@ { int deltaX = e.X - DrawArgs.LastMousePosition.X; int deltaY = e.Y - DrawArgs.LastMousePosition.Y; - float deltaXNormalized = (float)deltaX/drawArgs.screenWidth; - float deltaYNormalized = (float)deltaY/drawArgs.screenHeight; + float deltaXNormalized = (float)deltaX/DrawArgs.screenWidth; + float deltaYNormalized = (float)deltaY/DrawArgs.screenHeight; if(!this.isMouseDragging) { @@ -1364,8 +1354,8 @@ return; } - this.drawArgs.screenHeight = this.Height; - this.drawArgs.screenWidth = this.Width; + DrawArgs.screenHeight = this.Height; + DrawArgs.screenWidth = this.Width; } private void InitializeGraphics() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-17 14:29:12
|
Revision: 166 Author: mashiharu Date: 2006-04-17 07:28:54 -0700 (Mon, 17 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=166&view=rev Log Message: ----------- PNT-14: FxCop run Modified Paths: -------------- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs trunk/Punt/PluginSDK/Menu/ToolbarButton.cs trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs trunk/Punt/PluginSDK/World.cs Modified: trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-17 13:24:21 UTC (rev 165) +++ trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-17 14:28:54 UTC (rev 166) @@ -174,8 +174,9 @@ m_parentWorld = parentWorld; } - public override void Dispose() + public sealed override void Dispose() { + base.Dispose(); } public override bool OnMouseWheel(MouseEventArgs e) Modified: trunk/Punt/PluginSDK/Menu/ToolbarButton.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-17 13:24:21 UTC (rev 165) +++ trunk/Punt/PluginSDK/Menu/ToolbarButton.cs 2006-04-17 14:28:54 UTC (rev 166) @@ -17,9 +17,6 @@ private Size m_iconTextureSize; string m_description = ""; static int white = System.Drawing.Color.White.ToArgb(); - static int black = System.Drawing.Color.Black.ToArgb(); - static int transparent = Color.FromArgb(140,255,255,255).ToArgb(); - int alpha; const int alphaStep = 20; const float zoomSpeed = 1.2f; @@ -150,10 +147,8 @@ } } - public void RenderIcon(Sprite sprite, DrawArgs drawArgs, - float centerX, float topY, bool selected ) + public void RenderIcon(Sprite sprite, float centerX, float topY, bool selected ) { - float width = selected ? ToolbarButton.SelectedSize : width = ToolbarButton.NormalSize; int color = white; float centerY = topY + NormalSize*0.5f; Modified: trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-17 13:24:21 UTC (rev 165) +++ trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-17 14:28:54 UTC (rev 166) @@ -65,8 +65,6 @@ /// </summary> private void AddToolbarButtons(World world) { - string dataPathParent = PuntSettings.DataPathParent(); - PuntSettings settings = PuntSettings.Instance; // Toolbar Buttons that apply to all worlds. @@ -340,14 +338,10 @@ DrawArgs.Device.RenderState.AlphaBlendEnable = false; float total = 0; - float extra = 0; for(int i = 0; i < totalNumberButtons; i++) - { - ToolbarButton button = GetAt(i); total += ToolbarButton.NormalSize; - } - float pad = ((float)m_outerPadding*(totalNumberButtons+1) - extra)/(totalNumberButtons+1); + float pad = ((float)m_outerPadding*(totalNumberButtons+1))/(totalNumberButtons+1); float buttonX = pad; m_sprite.Begin(SpriteFlags.AlphaBlend); @@ -395,7 +389,7 @@ DrawArgs.Device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1); } - button.RenderIcon(m_sprite, drawArgs, centerX, buttonTopY, i==m_curSelection); + button.RenderIcon(m_sprite, centerX, buttonTopY, i==m_curSelection); } } m_sprite.End(); @@ -427,6 +421,8 @@ background.Dispose(); background = null; } + + base.Dispose(); } /// <summary> Modified: trunk/Punt/PluginSDK/World.cs =================================================================== --- trunk/Punt/PluginSDK/World.cs 2006-04-17 13:24:21 UTC (rev 165) +++ trunk/Punt/PluginSDK/World.cs 2006-04-17 14:28:54 UTC (rev 166) @@ -286,8 +286,8 @@ /// abs(lon1-lon2)=pi) because then the route is undefined. /// </summary> /// <param name="f">Fraction of the distance for intermediate point (0..1)</param> - public static void IntermediateGCPoint(float f, Angle lat1, Angle lon1, Angle lat2, Angle lon2, Angle d, - out Angle lat, out Angle lon) + public static Position IntermediateGCPoint(float f, Angle lat1, Angle lon1, + Angle lat2, Angle lon2, Angle d) { double sind = Math.Sin(d.Radians); double cosLat1 = Math.Cos(lat1.Radians); @@ -297,37 +297,12 @@ double x = A * cosLat1 * Math.Cos(lon1.Radians) + B * cosLat2 * Math.Cos(lon2.Radians); double y = A * cosLat1 * Math.Sin(lon1.Radians) + B * cosLat2 * Math.Sin(lon2.Radians); double z = A * Math.Sin(lat1.Radians) + B * Math.Sin(lat2.Radians); - lat = Angle.FromRadians(Math.Atan2(z, Math.Sqrt(x * x + y * y))); - lon = Angle.FromRadians(Math.Atan2(y, x)); + Position res = new Position( + Angle.FromRadians(Math.Atan2(z, Math.Sqrt(x * x + y * y))), + Angle.FromRadians(Math.Atan2(y, x))); + return res; } - /// <summary> - /// Intermediate points on a great circle - /// In previous sections we have found intermediate points on a great circle given either - /// the crossing latitude or longitude. Here we find points (lat,lon) a given fraction of the - /// distance (d) between them. Suppose the starting point is (lat1,lon1) and the final point - /// (lat2,lon2) and we want the point a fraction f along the great circle route. f=0 is - /// point 1. f=1 is point 2. The two points cannot be antipodal ( i.e. lat1+lat2=0 and - /// abs(lon1-lon2)=pi) because then the route is undefined. - /// </summary> - /// <param name="f">Fraction of the distance for intermediate point (0..1)</param> - public Vector3 IntermediateGCPoint(float f, Angle lat1, Angle lon1, Angle lat2, Angle lon2, Angle d) - { - double sind = Math.Sin(d.Radians); - double cosLat1 = Math.Cos(lat1.Radians); - double cosLat2 = Math.Cos(lat2.Radians); - double A = Math.Sin((1 - f) * d.Radians) / sind; - double B = Math.Sin(f * d.Radians) / sind; - double x = A * cosLat1 * Math.Cos(lon1.Radians) + B * cosLat2 * Math.Cos(lon2.Radians); - double y = A * cosLat1 * Math.Sin(lon1.Radians) + B * cosLat2 * Math.Sin(lon2.Radians); - double z = A * Math.Sin(lat1.Radians) + B * Math.Sin(lat2.Radians); - Angle lat = Angle.FromRadians(Math.Atan2(z, Math.Sqrt(x * x + y * y))); - Angle lon = Angle.FromRadians(Math.Atan2(y, x)); - - Vector3 v = MathEngine.SphericalToCartesian(lat, lon, m_equatorialRadius); - return v; - } - public static void AddActiveLayer(RenderableObject newLayer) { // Turn on This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-17 14:54:23
|
Revision: 167 Author: mashiharu Date: 2006-04-17 07:53:52 -0700 (Mon, 17 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=167&view=rev Log Message: ----------- PNT-25: Added missing bitmap. Modified Paths: -------------- trunk/Punt/PluginSDK/Camera.cs Added Paths: ----------- trunk/Punt/bin/Debug/Data/Icons/Interface/infopanel.png Modified: trunk/Punt/PluginSDK/Camera.cs =================================================================== --- trunk/Punt/PluginSDK/Camera.cs 2006-04-17 14:28:54 UTC (rev 166) +++ trunk/Punt/PluginSDK/Camera.cs 2006-04-17 14:53:52 UTC (rev 167) @@ -615,6 +615,8 @@ Vector3.Empty, cameraUpVector ); + m_viewMatrix *= Matrix.Translation(0,-100,0); + if(World.Settings.cameraIsFreeLook) { m_viewMatrix *= Matrix.Translation(0,0,(float)(-m_altitude)); Added: trunk/Punt/bin/Debug/Data/Icons/Interface/infopanel.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Icons/Interface/infopanel.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-17 16:01:01
|
Revision: 169 Author: mashiharu Date: 2006-04-17 09:00:33 -0700 (Mon, 17 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=169&view=rev Log Message: ----------- PNT-30: Don't crash on image load fail. Modified Paths: -------------- trunk/Punt/PluginSDK/ImageHelper.cs trunk/Punt/PluginSDK/Renderable/LatLongGrid.cs trunk/Punt/PluginSDK/Renderable/QuadTile.cs trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs trunk/Punt/PluginSDK/RenderableObject.cs trunk/Punt/PluginSDK/VisualControl/ColorBar.cs Modified: trunk/Punt/PluginSDK/ImageHelper.cs =================================================================== --- trunk/Punt/PluginSDK/ImageHelper.cs 2006-04-17 15:48:15 UTC (rev 168) +++ trunk/Punt/PluginSDK/ImageHelper.cs 2006-04-17 16:00:33 UTC (rev 169) @@ -153,15 +153,7 @@ { try { - string fullPath = null; - if (Path.IsPathRooted(relativePath)) - fullPath = relativePath; - else - { - fullPath = Path.Combine(PuntSettings.Instance.IconPath, relativePath); - if(!File.Exists(fullPath)) - fullPath = Path.Combine(PuntSettings.Instance.DataPath, relativePath); - } + string fullPath = FindResource(relativePath); if (File.Exists(fullPath)) return TextureLoader.FromFile(device, fullPath, 0, 0, 1, Usage.None, Format.Dxt5, Pool.Managed, Filter.Box, Filter.Box, 0); @@ -177,6 +169,23 @@ } /// <summary> + /// Tries it's best to locate an image file specified using relative path. + /// </summary> + /// <param name="relativePath"></param> + public static string FindResource(string relativePath) + { + if(File.Exists(relativePath)) + return relativePath; + + string fullPath = Path.Combine(PuntSettings.Instance.DataPath, relativePath); + if(File.Exists(fullPath)) + return fullPath; + + fullPath = Path.Combine(PuntSettings.Instance.IconPath, relativePath); + return fullPath; + } + + /// <summary> /// Converts an image in any format readable by GDI+ to a DXT1 DDS file. /// </summary> /// <param name="originalImagePath">Input file (any supported format).</param> Modified: trunk/Punt/PluginSDK/Renderable/LatLongGrid.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/LatLongGrid.cs 2006-04-17 15:48:15 UTC (rev 168) +++ trunk/Punt/PluginSDK/Renderable/LatLongGrid.cs 2006-04-17 16:00:33 UTC (rev 169) @@ -93,6 +93,7 @@ m_renderPriority = RenderPriority.LinePaths; Thumbnail = @"interface\lat-long.png"; + IconImagePath = Thumbnail; } #region RenderableObject Modified: trunk/Punt/PluginSDK/Renderable/QuadTile.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/QuadTile.cs 2006-04-17 15:48:15 UTC (rev 168) +++ trunk/Punt/PluginSDK/Renderable/QuadTile.cs 2006-04-17 16:00:33 UTC (rev 169) @@ -179,11 +179,11 @@ { try { - this.isInitialized = false; - if (this.texture != null) + isInitialized = false; + if (texture != null) { - if (this.texture != null) - this.texture.Dispose(); + if (texture != null) + texture.Dispose(); } if (northWestChild != null) { @@ -205,6 +205,12 @@ southEastChild.Dispose(); southEastChild = null; } + if(DownloadRequest != null) + { + QuadTileSet.RemoveFromDownloadQueue(DownloadRequest); + DownloadRequest.Dispose(); + DownloadRequest = null; + } } catch { Modified: trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs 2006-04-17 15:48:15 UTC (rev 168) +++ trunk/Punt/PluginSDK/Renderable/QuadTileSet.cs 2006-04-17 16:00:33 UTC (rev 169) @@ -62,7 +62,6 @@ bool m_isConnectionWaiting; int m_colorKey; // 100% transparent black = transparent bool m_enableColorKeying; - ArrayList deletionList = new ArrayList(); #endregion @@ -163,7 +162,7 @@ try { if (File.Exists(m_ServerLogoFilePath)) - m_ServerLogoImage = Image.FromFile(m_ServerLogoFilePath); + m_ServerLogoImage = ImageHelper.LoadImage(m_ServerLogoFilePath); } catch { } } @@ -487,6 +486,7 @@ return; } + RemoveInvisibleTiles(drawArgs.WorldCamera); try { int middleRow = MathEngine.GetRowFromLatitude(drawArgs.WorldCamera.Latitude, ImageStore.LevelZeroTileSizeDegrees); @@ -545,36 +545,39 @@ } } } + } + catch (System.Threading.ThreadAbortException) + { + } + catch (Exception caught) + { + Utility.Log.Write(caught); + } + } - ArrayList deletionList = new ArrayList(); + void RemoveInvisibleTiles(CameraBase camera) + { + ArrayList deletionList = new ArrayList(); + lock (m_topmostTiles.SyncRoot) + { foreach (long key in m_topmostTiles.Keys) { QuadTile qt = (QuadTile)m_topmostTiles[key]; - if (!drawArgs.WorldCamera.ViewFrustum.Intersects(qt.BoundingBox)) + if (!camera.ViewFrustum.Intersects(qt.BoundingBox)) deletionList.Add(key); } - lock (m_topmostTiles.SyncRoot) + foreach (long deleteThis in deletionList) { - foreach (long deleteThis in deletionList) + QuadTile qt = (QuadTile)m_topmostTiles[deleteThis]; + if (qt != null) { - QuadTile qt = (QuadTile)m_topmostTiles[deleteThis]; - if (qt != null) - { - m_topmostTiles.Remove(deleteThis); - qt.Dispose(); - } + m_topmostTiles.Remove(deleteThis); + qt.Dispose(); } } } - catch (System.Threading.ThreadAbortException) - { - } - catch (Exception caught) - { - Utility.Log.Write(caught); - } } public override void Render(DrawArgs drawArgs) @@ -750,6 +753,7 @@ if (!ImageStore.IsDownloadableLayer) return; + ArrayList deletionList = new ArrayList(); //reset "root" tiles that intersect current view lock (m_topmostTiles.SyncRoot) { @@ -905,12 +909,6 @@ continue; QuadTile qt = curRequest.QuadTile; - if (!m_camera.ViewFrustum.Intersects(qt.BoundingBox)) - { - deletionList.Add(curRequest); - continue; - } - float screenArea = qt.BoundingBox.CalcRelativeScreenArea(m_camera); if (screenArea > largestArea) { @@ -920,14 +918,6 @@ } } - // Remove requests that point to invisible tiles - foreach (GeoSpatialDownloadRequest req in deletionList) - { - m_downloadRequests.Remove(req.QuadTile); - req.QuadTile.DownloadRequest = null; - } - deletionList.Clear(); - return closestRequest; } Modified: trunk/Punt/PluginSDK/RenderableObject.cs =================================================================== --- trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-17 15:48:15 UTC (rev 168) +++ trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-17 16:00:33 UTC (rev 169) @@ -37,12 +37,12 @@ protected bool m_isActive; protected byte m_opacity = 255; protected RenderPriority m_renderPriority = RenderPriority.SurfaceImages; - protected string m_thumbnail; protected Image m_thumbnailImage; protected string m_iconImagePath; protected Image m_iconImage; protected string m_abstract; protected World m_world; + string m_thumbnail; /// <summary> /// Initializes a new instance of the <see cref= "T:Punt.Renderable.RenderableObject"/> class. @@ -154,7 +154,7 @@ } set { - m_thumbnail = value; + m_thumbnail = ImageHelper.FindResource(value); } } @@ -172,7 +172,7 @@ try { if(File.Exists(m_thumbnail)) - m_thumbnailImage = Image.FromFile(m_thumbnail); + m_thumbnailImage = ImageHelper.LoadImage(m_thumbnail); } catch {} } @@ -210,7 +210,7 @@ try { if(File.Exists(m_iconImagePath)) - m_iconImage = Image.FromFile(m_iconImagePath); + m_iconImage = ImageHelper.LoadImage(m_iconImagePath); } catch {} } @@ -446,7 +446,7 @@ public virtual InfoPanel CreateInfoPanel() { string backgroundPath = Path.Combine(PuntSettings.Instance.IconPath, @"interface\infopanel.png"); - Bitmap bmp = (Bitmap)Image.FromFile(backgroundPath); + Bitmap bmp = (Bitmap)ImageHelper.LoadImage(backgroundPath); using(Graphics g = Graphics.FromImage(bmp)) { int left = 10; Modified: trunk/Punt/PluginSDK/VisualControl/ColorBar.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/ColorBar.cs 2006-04-17 15:48:15 UTC (rev 168) +++ trunk/Punt/PluginSDK/VisualControl/ColorBar.cs 2006-04-17 16:00:33 UTC (rev 169) @@ -67,7 +67,7 @@ if(url != null && !url.ToLower().StartsWith("http://")) { // Local file - Image = Image.FromFile(url); + Image = ImageHelper.LoadImage(url); return; } @@ -88,7 +88,7 @@ if(url != null && !url.ToLower().StartsWith("http://")) { // Local file - Image = Image.FromFile(url); + Image = ImageHelper.LoadImage(url); return; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-17 17:33:48
|
Revision: 171 Author: mashiharu Date: 2006-04-17 10:33:19 -0700 (Mon, 17 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=171&view=rev Log Message: ----------- PNT-25: Added slide in animation for layer info panel. Modified Paths: -------------- trunk/Punt/PluginSDK/DrawArgs.cs trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs trunk/Punt/PluginSDK/Renderable/Icon.cs trunk/Punt/PluginSDK/RenderableObject.cs trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs Modified: trunk/Punt/PluginSDK/DrawArgs.cs =================================================================== --- trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-17 16:27:59 UTC (rev 170) +++ trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-17 17:33:19 UTC (rev 171) @@ -46,18 +46,12 @@ public System.Drawing.Point CurrentMousePosition; public string UpperLeftCornerText = ""; public CameraBase WorldCamera; - public static DownloadQueue DownloadQueue = new DownloadQueue(); /// <summary> /// Constantly updated while rendering to point to the topmost control under mouse. /// </summary> RenderableObject m_currentFocusedObject; - - /// <summary> - /// The control that was focused during last render (under mouse pointer). - /// </summary> - RenderableObject m_focusedObject; // Statistics public int numBoundaryPointsTotal; @@ -65,6 +59,18 @@ public int numBoundariesDrawn; public int numberTilesDrawn; + public static InfoPanel InfoPanel; + + /// <summary> + /// The control that created the current info panel. + /// </summary> + public static RenderableObject InfoPanelOwner; + + /// <summary> + /// The control that had focus in the last render. + /// </summary> + public static RenderableObject FocusedObject; + [Browsable(true)] [TypeConverter(typeof(ExpandableObjectConverter))] public static Cache Cache @@ -79,32 +85,29 @@ } } - /// <summary> /// The closest object below the mouse pointer /// Always restore render state prior to setting this property /// as it might trigger a render of a different object. /// </summary> - public RenderableObject FocusedObject + public void SetFocus(RenderableObject value) { - get + if(m_currentFocusedObject != null) { - return m_currentFocusedObject; + // Render the object that was previously on top + + // Remove focus to render as unfocused + RenderableObject previousFocus = m_currentFocusedObject; + if(previousFocus!=null) + previousFocus.Render(this); } - set - { - if(m_currentFocusedObject != null) - { - // Render the object that was previously on top - // Remove focus to render as unfocused - RenderableObject previousFocus = m_currentFocusedObject; - if(previousFocus!=null) - previousFocus.Render(this); - } + m_currentFocusedObject = value; + } - m_currentFocusedObject = value; - } + public bool IsCurrentlyFocused(RenderableObject value) + { + return value == m_currentFocusedObject; } /// <summary> @@ -172,7 +175,7 @@ if(ro!=null) ro.RenderFocused(this); } - m_focusedObject = m_currentFocusedObject; + FocusedObject = m_currentFocusedObject; RenderInformationPanel(); try @@ -355,10 +358,6 @@ #endregion - - object FocusLastObject; - InfoPanel InfoPanel; - void RenderInformationPanel() { if(InfoPanel != null) @@ -378,22 +377,21 @@ /// </summary> void UpdateInformationPanel() { - if(FocusLastObject == m_focusedObject) + if(FocusedObject == null) return; - FocusLastObject = m_focusedObject; + if(FocusedObject == InfoPanelOwner) + return; - if(InfoPanel != null) - { - InfoPanel.Dispose(); - InfoPanel = null; - } + InfoPanelOwner = FocusedObject; - IHasInfoPanel ihi = m_focusedObject as IHasInfoPanel; + IHasInfoPanel ihi = FocusedObject as IHasInfoPanel; if(ihi==null) return; - InfoPanel = ihi.CreateInfoPanel(); + InfoPanel newPanel = ihi.CreateInfoPanel(); + newPanel.PreviousPanel = InfoPanel; + InfoPanel = newPanel; } } Modified: trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-17 16:27:59 UTC (rev 170) +++ trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-17 17:33:19 UTC (rev 171) @@ -89,7 +89,7 @@ UIPaint.DrawLine(outlineVerts, PuntSettings.Instance.menuOutlineColor, DrawArgs.Device); if(MouseOverItem != null) - drawArgs.FocusedObject = MouseOverItem.RenderableObject; + drawArgs.SetFocus( MouseOverItem.RenderableObject ); } /// <summary> Modified: trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-17 16:27:59 UTC (rev 170) +++ trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-17 17:33:19 UTC (rev 171) @@ -400,7 +400,7 @@ ToolbarButton tb = GetAt(m_curSelection); RenderableObject ro = tb.Target as RenderableObject; if(ro != null) - drawArgs.FocusedObject = ro; + drawArgs.SetFocus( ro ); } } } Modified: trunk/Punt/PluginSDK/Renderable/Icon.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/Icon.cs 2006-04-17 16:27:59 UTC (rev 170) +++ trunk/Punt/PluginSDK/Renderable/Icon.cs 2006-04-17 17:33:19 UTC (rev 171) @@ -292,7 +292,7 @@ // In case the focused object also uses sprites m_sprite.End(); - drawArgs.FocusedObject = icon; + drawArgs.SetFocus( icon ); drawArgs.FocusedObjectDistanceSquared = distance; m_sprite.Begin(SpriteFlags.AlphaBlend); @@ -661,7 +661,7 @@ if(distanceToIcon < MinimumDisplayDistance) return; - int color = drawArgs.FocusedObject == this ? hotColor : normalColor; + int color = drawArgs.IsCurrentlyFocused(this) ? hotColor : normalColor; if(IconTexture==null) { Modified: trunk/Punt/PluginSDK/RenderableObject.cs =================================================================== --- trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-17 16:27:59 UTC (rev 170) +++ trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-17 17:33:19 UTC (rev 171) @@ -446,7 +446,7 @@ public virtual InfoPanel CreateInfoPanel() { string backgroundPath = Path.Combine(PuntSettings.Instance.IconPath, @"interface\infopanel.png"); - Bitmap bmp = (Bitmap)ImageHelper.LoadImage(backgroundPath); + using(Bitmap bmp = (Bitmap)ImageHelper.LoadImage(backgroundPath)) using(Graphics g = Graphics.FromImage(bmp)) { int left = 10; @@ -471,10 +471,10 @@ using(System.Drawing.Font font = new System.Drawing.Font("Tahoma", 12)) g.DrawString(description, font, Brushes.Black, trect); + + InfoPanel panel = new InfoPanel(this, bmp); + return panel; } - - InfoPanel panel = new InfoPanel(bmp); - return panel; } #endregion Modified: trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-17 16:27:59 UTC (rev 170) +++ trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-17 17:33:19 UTC (rev 171) @@ -3,6 +3,7 @@ using Microsoft.DirectX.Direct3D; using Microsoft.DirectX; using Punt; +using Punt.Renderable; namespace Punt.VisualControl { @@ -24,20 +25,68 @@ /// </summary> public class InfoPanel { - Bitmap bitmap; Texture texture; + int position = 0; + int width; + int height; + RenderableObject owner; + public InfoPanel PreviousPanel; - public InfoPanel(Bitmap bmp) + public InfoPanel(RenderableObject owner, Bitmap bmp) { - this.bitmap = bmp; + this.owner = owner; + this.width = bmp.Width; + this.height = bmp.Height; texture = new Texture(DrawArgs.Device, bmp, Usage.None, Pool.Managed); } + public bool Disposed + { + get + { + return (texture==null); + } + } + + public bool Active + { + get + { + return DrawArgs.FocusedObject == owner; + } + } + public void Render() { - UIPaint.DrawBox(DrawArgs.Width - bitmap.Width, - DrawArgs.Height - bitmap.Height - 50, - bitmap.Width, bitmap.Height,texture); + if(PreviousPanel != null) + { + if(PreviousPanel.Disposed) + PreviousPanel = null; + else + PreviousPanel.Render(); + } + + int speed = 1+2*(int)(Math.Sqrt(width - position)); + + if(Active) + position = Math.Min(position+speed, width); + else + position = Math.Max(position-speed, 0); + + UIPaint.DrawBox(DrawArgs.Width - position, + DrawArgs.Height - height - 50, + width, height,texture); + + if(position==0) + { + // Off screen + if(DrawArgs.InfoPanel == this) + { + DrawArgs.InfoPanel = null; + DrawArgs.InfoPanelOwner = null; + } + Dispose(); + } } public void Dispose() @@ -47,12 +96,6 @@ texture.Dispose(); texture = null; } - - if(bitmap != null) - { - bitmap.Dispose(); - bitmap = null; - } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-17 20:21:09
|
Revision: 175 Author: mashiharu Date: 2006-04-17 13:20:50 -0700 (Mon, 17 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=175&view=rev Log Message: ----------- PNT-25: Fixes one info panel weirdness, but adds another.. Modified Paths: -------------- trunk/Punt/PluginSDK/DrawArgs.cs trunk/Punt/PluginSDK/PerformanceTimer.cs trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs Modified: trunk/Punt/PluginSDK/DrawArgs.cs =================================================================== --- trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-17 19:33:18 UTC (rev 174) +++ trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-17 20:20:50 UTC (rev 175) @@ -59,7 +59,7 @@ public int numBoundariesDrawn; public int numberTilesDrawn; - public static InfoPanel InfoPanel; + public static InfoPanel s_infoPanel; /// <summary> /// The control that created the current info panel. @@ -286,6 +286,23 @@ } } + /// <summary> + /// Currently displayed info panel + /// </summary> + public static InfoPanel InfoPanel + { + get + { + return s_infoPanel; + } + set + { + if(value!=null) + value.PreviousPanel = s_infoPanel; + s_infoPanel = value; + } + } + public void UpdateMouseCursor(System.Windows.Forms.Control parent) { if(lastCursor == mouseCursor) @@ -377,21 +394,35 @@ /// </summary> void UpdateInformationPanel() { + if(InfoPanel != null && InfoPanel.Disposed) + { + InfoPanel = null; + InfoPanelOwner = null; + } + if(FocusedObject == null) return; if(FocusedObject == InfoPanelOwner) return; - InfoPanelOwner = FocusedObject; - IHasInfoPanel ihi = FocusedObject as IHasInfoPanel; if(ihi==null) return; - InfoPanel newPanel = ihi.CreateInfoPanel(); - newPanel.PreviousPanel = InfoPanel; - InfoPanel = newPanel; +// InfoPanel oldPanel = InfoPanel; +// while(oldPanel != null) +// { +// if(oldPanel.Disposed) +// break; +// if(oldPanel.Owner == ihi) +// return; +// +// oldPanel = oldPanel.PreviousPanel; +// } + + InfoPanelOwner = FocusedObject; + InfoPanel = ihi.CreateInfoPanel(); } } Modified: trunk/Punt/PluginSDK/PerformanceTimer.cs =================================================================== --- trunk/Punt/PluginSDK/PerformanceTimer.cs 2006-04-17 19:33:18 UTC (rev 174) +++ trunk/Punt/PluginSDK/PerformanceTimer.cs 2006-04-17 20:20:50 UTC (rev 175) @@ -29,8 +29,6 @@ if (!QueryPerformanceFrequency(ref tickFrequency)) throw new NotSupportedException(I18N._("The machine doesn't appear to support high resolution timer.")); TicksPerSecond = tickFrequency; - - System.Diagnostics.Debug.WriteLine("tickFrequency = " + tickFrequency); } #endregion Modified: trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-17 19:33:18 UTC (rev 174) +++ trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-17 20:20:50 UTC (rev 175) @@ -26,11 +26,12 @@ public class InfoPanel { Texture texture; - int position = 0; + int position; int width; int height; RenderableObject owner; public InfoPanel PreviousPanel; + long loadTime; // ticks public InfoPanel(RenderableObject owner, Bitmap bmp) { @@ -38,6 +39,7 @@ this.width = bmp.Width; this.height = bmp.Height; texture = new Texture(DrawArgs.Device, bmp, Usage.None, Pool.Managed); + loadTime = DrawArgs.CurrentFrameStartTicks; } public bool Disposed @@ -48,23 +50,40 @@ } } + /// <summary> + /// The layer this panel belongs to. + /// </summary> + public RenderableObject Owner + { + get + { + return owner; + } + } + public bool Active { get { - return DrawArgs.FocusedObject == owner; + if(DrawArgs.FocusedObject != null && DrawArgs.FocusedObject != owner) + // A new object is active. + return false; + + const float holdTime = 1.3f; // hold for 1 second. + float elapsed = (DrawArgs.CurrentFrameStartTicks - loadTime) / + PerformanceTimer.TicksPerSecond; + + return elapsed < holdTime; } } public void Render() { + if(Disposed) + return; + if(PreviousPanel != null) - { - if(PreviousPanel.Disposed) - PreviousPanel = null; - else - PreviousPanel.Render(); - } + PreviousPanel.Render(); int speed = 1+2*(int)(Math.Sqrt(width - position)); @@ -75,18 +94,10 @@ UIPaint.DrawBox(DrawArgs.Width - position, DrawArgs.Height - height - 50, - width, height,texture); + width, height, texture); if(position==0) - { - // Off screen - if(DrawArgs.InfoPanel == this) - { - DrawArgs.InfoPanel = null; - DrawArgs.InfoPanelOwner = null; - } Dispose(); - } } public void Dispose() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-22 09:27:21
|
Revision: 190 Author: mashiharu Date: 2006-04-22 02:26:55 -0700 (Sat, 22 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=190&view=rev Log Message: ----------- PNT-31: On/off setting for info panel Modified Paths: -------------- trunk/Punt/PluginSDK/Configuration/PuntSettings.cs trunk/Punt/PluginSDK/DrawArgs.cs Modified: trunk/Punt/PluginSDK/Configuration/PuntSettings.cs =================================================================== --- trunk/Punt/PluginSDK/Configuration/PuntSettings.cs 2006-04-21 08:02:48 UTC (rev 189) +++ trunk/Punt/PluginSDK/Configuration/PuntSettings.cs 2006-04-22 09:26:55 UTC (rev 190) @@ -30,6 +30,7 @@ private bool showRapidFireModis; private bool showWmsBrowser; private bool showSvs; + private bool showInfoPanel; [XmlIgnore] public static EventHandler ShowGotoDialogChanged; @@ -103,6 +104,15 @@ } /// <summary> + /// Displays an information panel when mouse is over toolbar button or layer in layer manager. + /// </summary> + public bool ShowInfoPanel + { + get { return showInfoPanel; } + set { showInfoPanel = value; } + } + + /// <summary> /// Show the top tool button bar /// </summary> internal bool showToolBar = true; Modified: trunk/Punt/PluginSDK/DrawArgs.cs =================================================================== --- trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-21 08:02:48 UTC (rev 189) +++ trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-22 09:26:55 UTC (rev 190) @@ -386,7 +386,8 @@ /// </summary> public void Update() { - UpdateInformationPanel(); + if(PuntSettings.Instance.ShowInfoPanel) + UpdateInformationPanel(); } /// <summary> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-23 07:57:09
|
Revision: 191 Author: mashiharu Date: 2006-04-23 00:56:43 -0700 (Sun, 23 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=191&view=rev Log Message: ----------- PNT-31: Info panel alpha channel support Modified Paths: -------------- trunk/Punt/PluginSDK/RenderableObject.cs trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs trunk/Punt/WorldWindow/WorldWindow.cs trunk/Punt/bin/Debug/Data/Icons/Interface/infopanel.png Modified: trunk/Punt/PluginSDK/RenderableObject.cs =================================================================== --- trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-22 09:26:55 UTC (rev 190) +++ trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-23 07:56:43 UTC (rev 191) @@ -10,6 +10,7 @@ using System.Xml; using Punt.Configuration; using Punt.VisualControl; +using System.Drawing.Imaging; namespace Punt.Renderable { @@ -446,30 +447,31 @@ public virtual InfoPanel CreateInfoPanel() { string backgroundPath = Path.Combine(PuntSettings.Instance.IconPath, @"interface\infopanel.png"); - using(Bitmap bmp = (Bitmap)ImageHelper.LoadImage(backgroundPath)) - using(Graphics g = Graphics.FromImage(bmp)) + + using (Bitmap bmp = (Bitmap)ImageHelper.LoadImage(backgroundPath)) + using (Graphics g = Graphics.FromImage(bmp)) { int left = 10; Image thumb = ThumbnailImage; - if(thumb!= null) + if (thumb != null) { g.DrawImage(thumb, 10, 5); left = thumb.Width; } - using(System.Drawing.Font font = new System.Drawing.Font("Tahoma", 16, FontStyle.Bold)) + using (System.Drawing.Font font = new System.Drawing.Font("Tahoma", 16, FontStyle.Bold)) g.DrawString(Name, font, Brushes.Black, left, 19); int top = 39; - Rectangle trect = new Rectangle(left, top, - bmp.Width-left-20, bmp.Height-top-20); + Rectangle trect = new Rectangle(left, top, + bmp.Width - left - 20, bmp.Height - top - 20); const string lorum = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed\n\nEpsum factorial non deposit quid pro quo hic escorol. Olypian quarrels et gorilla congolium sic ad nauseum. Souvlaki ignitus carborundum e pluribus\n\nEpsum factorial non deposit quid"; string description = Abstract; - if(description == null || description.Length <=0) + if (description == null || description.Length <= 0) description = lorum; - using(System.Drawing.Font font = new System.Drawing.Font("Tahoma", 12)) + using (System.Drawing.Font font = new System.Drawing.Font("Tahoma", 12)) g.DrawString(description, font, Brushes.Black, trect); InfoPanel panel = new InfoPanel(this, bmp); Modified: trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-22 09:26:55 UTC (rev 190) +++ trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-23 07:56:43 UTC (rev 191) @@ -4,6 +4,8 @@ using Microsoft.DirectX; using Punt; using Punt.Renderable; +using System.IO; +using System.Drawing.Imaging; namespace Punt.VisualControl { @@ -38,8 +40,8 @@ this.owner = owner; this.width = bmp.Width; this.height = bmp.Height; - texture = new Texture(DrawArgs.Device, bmp, Usage.None, Pool.Managed); - loadTime = DrawArgs.CurrentFrameStartTicks; + this.texture = new Texture(DrawArgs.Device, bmp, Usage.None, Pool.Managed); + this.loadTime = DrawArgs.CurrentFrameStartTicks; } public bool Disposed @@ -82,6 +84,7 @@ if(Disposed) return; + DrawArgs.Device.RenderState.AlphaBlendEnable = true; if(PreviousPanel != null) PreviousPanel.Render(); @@ -98,6 +101,8 @@ if(position==0) Dispose(); + + DrawArgs.Device.RenderState.AlphaBlendEnable = false; } public void Dispose() Modified: trunk/Punt/WorldWindow/WorldWindow.cs =================================================================== --- trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-22 09:26:55 UTC (rev 190) +++ trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-23 07:56:43 UTC (rev 191) @@ -685,7 +685,7 @@ { try { - this.drawArgs.BeginRender(); + drawArgs.BeginRender(); // Render the sky according to view - example, close to earth, render sky blue, render space as black System.Drawing.Color backgroundColor = System.Drawing.Color.Black; @@ -704,20 +704,20 @@ (int)(World.Settings.SkyColor.B*percent)); } - this.device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, backgroundColor, 1.0f, 0); + device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, backgroundColor, 1.0f, 0); - if(this.world == null) + if(world == null) { - this.device.BeginScene(); - this.device.EndScene(); - this.device.Present(); + //device.BeginScene(); + //device.EndScene(); + //device.Present(); Thread.Sleep(25); return; } - this.drawArgs.WorldCamera.Update(this.device); + drawArgs.WorldCamera.Update(device); - this.device.BeginScene(); + device.BeginScene(); // Set fill mode if(renderWireFrame) @@ -732,7 +732,7 @@ world.Render(this.drawArgs); if(PuntSettings.Instance.ShowCrosshairs) - this.DrawCrosshairs(); + DrawCrosshairs(); if(saveScreenShotFilePath!=null) SaveTheScreenshot(); @@ -765,8 +765,8 @@ finally { drawArgs.EndRender(); + drawArgs.UpdateMouseCursor(this); } - drawArgs.UpdateMouseCursor(this); } /// <summary> Modified: trunk/Punt/bin/Debug/Data/Icons/Interface/infopanel.png =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-23 07:58:26
|
Revision: 192 Author: mashiharu Date: 2006-04-23 00:58:15 -0700 (Sun, 23 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=192&view=rev Log Message: ----------- PNT-14: Improve code quality Modified Paths: -------------- trunk/Punt/PluginSDK/Cache.cs trunk/Punt/PluginSDK/Camera.cs trunk/Punt/PluginSDK/Renderable/ImageLayer.cs Modified: trunk/Punt/PluginSDK/Cache.cs =================================================================== --- trunk/Punt/PluginSDK/Cache.cs 2006-04-23 07:56:43 UTC (rev 191) +++ trunk/Punt/PluginSDK/Cache.cs 2006-04-23 07:58:15 UTC (rev 192) @@ -63,6 +63,10 @@ FileInfo fi = new FileInfo(localpath); if(fi.Exists) { + if (cacheExpiresAge == TimeSpan.MaxValue) + // Doesn't expire + return localpath; + DateTime expiry = fi.LastWriteTimeUtc.Add(cacheExpiresAge); if(expiry > DateTime.UtcNow) // Still valid Modified: trunk/Punt/PluginSDK/Camera.cs =================================================================== --- trunk/Punt/PluginSDK/Camera.cs 2006-04-23 07:56:43 UTC (rev 191) +++ trunk/Punt/PluginSDK/Camera.cs 2006-04-23 07:58:15 UTC (rev 192) @@ -380,12 +380,12 @@ m_heading.Radians = 0; if (Angle.IsNaN(m_bank)) m_bank.Radians = 0; - this.SetPosition(double.NaN,double.NaN,0,2*m_worldRadius,0,0); + SetPosition(double.NaN,double.NaN,0,2*m_worldRadius,0,0); } else { // Reset direction, tilt & bank - this.SetPosition(double.NaN,double.NaN,0,double.NaN,0,0); + SetPosition(double.NaN,double.NaN,0,double.NaN,0,0); } lastResetTime = curTime; } @@ -458,7 +458,7 @@ if(double.IsNaN(lat)) lat = m_latitude.Degrees; if(double.IsNaN(lon)) lon = m_longitude.Degrees; if(double.IsNaN(heading)) heading = m_heading.Degrees; - if(double.IsNaN(bank)) bank = m_bank.Degrees; + if(double.IsNaN(bank)) bank = m_bank.Degrees; m_orientation = MathEngine.EulerToQuaternion( MathEngine.DegreesToRadians(lon), Modified: trunk/Punt/PluginSDK/Renderable/ImageLayer.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/ImageLayer.cs 2006-04-23 07:56:43 UTC (rev 191) +++ trunk/Punt/PluginSDK/Renderable/ImageLayer.cs 2006-04-23 07:58:15 UTC (rev 192) @@ -37,7 +37,6 @@ protected short[] indexes; protected Texture texture; - protected Device device; protected string m_imageUrl; protected string m_imagePath; @@ -273,8 +272,6 @@ { try { - this.device = DrawArgs.Device; - if(downloadThread != null && downloadThread.IsAlive) return; @@ -510,7 +507,7 @@ protected virtual void RenderProgress(DrawArgs drawArgs) { - device.RenderState.ZBufferEnable = false; + DrawArgs.Device.RenderState.ZBufferEnable = false; double centerLat = 0.5 * (m_maxLat + m_minLat); double centerLon = 0.5 * (m_maxLon + m_minLon); @@ -548,7 +545,7 @@ DrawProgressBar(drawArgs, v.X + 100, v.Y + 30, 180, 10, PuntSettings.Instance.downloadProgressColor); } - device.RenderState.ZBufferEnable = true; + DrawArgs.Device.RenderState.ZBufferEnable = true; } /// <summary> @@ -612,7 +609,6 @@ DrawArgs.Device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, progressBar); } - /// <summary> /// Switch to a different image /// </summary> @@ -620,23 +616,20 @@ { try { - if(this.device != null) - { - Texture oldTexture = this.texture; + Texture oldTexture = this.texture; - Texture newTexture = null; - if(m_enableColorKeying) - // Color key - newTexture = ImageHelper.LoadTexture(fileName, m_colorKey); - else - // No alpha - newTexture = ImageHelper.LoadTexture(fileName); + Texture newTexture = null; + if(m_enableColorKeying) + // Color key + newTexture = ImageHelper.LoadTexture(fileName, m_colorKey); + else + // No alpha + newTexture = ImageHelper.LoadTexture(fileName); - this.texture = newTexture; + this.texture = newTexture; - if(oldTexture != null) - oldTexture.Dispose(); - } + if(oldTexture != null) + oldTexture.Dispose(); } catch { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-23 14:09:41
|
Revision: 194 Author: mashiharu Date: 2006-04-23 07:09:34 -0700 (Sun, 23 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=194&view=rev Log Message: ----------- PNT-39: Fixes hires imagery looks like waves Modified Paths: -------------- trunk/Punt/PluginSDK/BoundingBox.cs trunk/Punt/PluginSDK/Renderable/QuadTile.cs Modified: trunk/Punt/PluginSDK/BoundingBox.cs =================================================================== --- trunk/Punt/PluginSDK/BoundingBox.cs 2006-04-23 14:06:48 UTC (rev 193) +++ trunk/Punt/PluginSDK/BoundingBox.cs 2006-04-23 14:09:34 UTC (rev 194) @@ -61,6 +61,19 @@ } /// <summary> + /// Calculates the center point (average of corner XYZ values) + /// </summary> + /// <returns></returns> + public Vector3 CalculateCenter() + { + Vector3 res = new Vector3(); + foreach (Vector3 corner in corners) + res += corner; + res.Scale(1.0f / corners.Length); + return res; + } + + /// <summary> /// Calculate the screen area (pixels) covered by the bottom of the bounding box. /// </summary> public float CalcRelativeScreenArea(CameraBase camera) Modified: trunk/Punt/PluginSDK/Renderable/QuadTile.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/QuadTile.cs 2006-04-23 14:06:48 UTC (rev 193) +++ trunk/Punt/PluginSDK/Renderable/QuadTile.cs 2006-04-23 14:09:34 UTC (rev 194) @@ -59,6 +59,7 @@ protected CustomVertex.PositionTextured[] northEastVertices; protected CustomVertex.PositionTextured[] southEastVertices; protected short[] vertexIndexes; + Vector3 localOrigin; // Add this offset to get world coordinates bool m_isResetingCache; @@ -94,7 +95,14 @@ BoundingBox = new BoundingBox((float)south, (float)north, (float)west, (float)east, (float)quadTileSet.LayerRadius, (float)quadTileSet.LayerRadius + 300000f); + localOrigin = BoundingBox.CalculateCenter(); + // To avoid gaps between neighbouring tiles truncate the origin to + // a number that doesn't get rounded. (nearest 10km) + localOrigin.X = (float)(Math.Round(localOrigin.X / 10000) * 10000); + localOrigin.Y = (float)(Math.Round(localOrigin.Y / 10000) * 10000); + localOrigin.Z = (float)(Math.Round(localOrigin.Z / 10000) * 10000); + Row = MathEngine.GetRowFromLatitude(South, North - South); Col = MathEngine.GetColFromLongitude(West, North - South); } @@ -404,9 +412,9 @@ for (int j = 0; j < thisVertexCountPlus1; j++) { - northWestVertices[baseIndex].X = (float)(radCosLat * cosLon[j]); - northWestVertices[baseIndex].Y = (float)(radCosLat * sinLon[j]); - northWestVertices[baseIndex].Z = (float)(layerRadius * sinLat); + northWestVertices[baseIndex].X = (float)(radCosLat * cosLon[j] - localOrigin.X); + northWestVertices[baseIndex].Y = (float)(radCosLat * sinLon[j] - localOrigin.Y); + northWestVertices[baseIndex].Z = (float)(layerRadius * sinLat - localOrigin.Z); northWestVertices[baseIndex].Tu = (float)(j * scaleFactor); northWestVertices[baseIndex].Tv = (float)(i * scaleFactor); @@ -424,9 +432,9 @@ for (int j = 0; j < thisVertexCountPlus1; j++) { - southWestVertices[baseIndex].X = (float)(radCosLat * cosLon[j]); - southWestVertices[baseIndex].Y = (float)(radCosLat * sinLon[j]); - southWestVertices[baseIndex].Z = (float)(layerRadius * sinLat); + southWestVertices[baseIndex].X = (float)(radCosLat * cosLon[j] - localOrigin.X); + southWestVertices[baseIndex].Y = (float)(radCosLat * sinLon[j] - localOrigin.Y); + southWestVertices[baseIndex].Z = (float)(layerRadius * sinLat - localOrigin.Z); southWestVertices[baseIndex].Tu = (float)(j * scaleFactor); southWestVertices[baseIndex].Tv = (float)((i + thisVertexCount) * scaleFactor); @@ -455,9 +463,9 @@ for (int j = 0; j < thisVertexCountPlus1; j++) { - northEastVertices[baseIndex].X = (float)(radCosLat * cosLon[j]); - northEastVertices[baseIndex].Y = (float)(radCosLat * sinLon[j]); - northEastVertices[baseIndex].Z = (float)(layerRadius * sinLat); + northEastVertices[baseIndex].X = (float)(radCosLat * cosLon[j] - localOrigin.X); + northEastVertices[baseIndex].Y = (float)(radCosLat * sinLon[j] - localOrigin.Y); + northEastVertices[baseIndex].Z = (float)(layerRadius * sinLat - localOrigin.Z); northEastVertices[baseIndex].Tu = (float)((j + thisVertexCount) * scaleFactor); northEastVertices[baseIndex].Tv = (float)(i * scaleFactor); @@ -475,9 +483,9 @@ for (int j = 0; j < thisVertexCountPlus1; j++) { - southEastVertices[baseIndex].X = (float)(radCosLat * cosLon[j]); - southEastVertices[baseIndex].Y = (float)(radCosLat * sinLon[j]); - southEastVertices[baseIndex].Z = (float)(layerRadius * sinLat); + southEastVertices[baseIndex].X = (float)(radCosLat * cosLon[j] - localOrigin.X); + southEastVertices[baseIndex].Y = (float)(radCosLat * sinLon[j] - localOrigin.Y); + southEastVertices[baseIndex].Z = (float)(layerRadius * sinLat - localOrigin.Z); southEastVertices[baseIndex].Tu = (float)((j + thisVertexCount) * scaleFactor); southEastVertices[baseIndex].Tv = (float)((i + thisVertexCount) * scaleFactor); @@ -722,6 +730,9 @@ device.SetTexture(0, texture); drawArgs.numberTilesDrawn++; + + DrawArgs.Device.Transform.World = Matrix.Translation(localOrigin); + if ((renderedMask & 0x01) == 0) Render(device, northWestVertices, northWestChild); if ((renderedMask & 0x02) == 0) @@ -730,6 +741,8 @@ Render(device, northEastVertices, northEastChild); if ((renderedMask & 0x08) == 0) Render(device, southEastVertices, southEastChild); + + DrawArgs.Device.Transform.World = drawArgs.WorldCamera.WorldMatrix; return true; } catch (DirectXException) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-23 14:21:42
|
Revision: 196 Author: mashiharu Date: 2006-04-23 07:21:28 -0700 (Sun, 23 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=196&view=rev Log Message: ----------- PNT-14: Removing dead code. Modified Paths: -------------- trunk/Punt/PluginSDK/PluginSDK.csproj Removed Paths: ------------- trunk/Punt/PluginSDK/Renderable/QuadTileArgs.cs Modified: trunk/Punt/PluginSDK/PluginSDK.csproj =================================================================== --- trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-23 14:18:37 UTC (rev 195) +++ trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-23 14:21:28 UTC (rev 196) @@ -477,11 +477,6 @@ BuildAction = "Compile" /> <File - RelPath = "Renderable\QuadTileArgs.cs" - SubType = "Code" - BuildAction = "Compile" - /> - <File RelPath = "Renderable\QuadTileSet.cs" SubType = "Code" BuildAction = "Compile" Deleted: trunk/Punt/PluginSDK/Renderable/QuadTileArgs.cs =================================================================== This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-23 17:52:20
|
Revision: 200 Author: mashiharu Date: 2006-04-23 10:51:58 -0700 (Sun, 23 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=200&view=rev Log Message: ----------- PNT-31: Added <Description> tag for all layer types. Shown on info panel. Modified Paths: -------------- trunk/Punt/PluginSDK/Configuration/Layers.cs trunk/Punt/PluginSDK/DrawArgs.cs trunk/Punt/PluginSDK/Renderable/Icon.cs trunk/Punt/PluginSDK/RenderableObject.cs trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs Modified: trunk/Punt/PluginSDK/Configuration/Layers.cs =================================================================== --- trunk/Punt/PluginSDK/Configuration/Layers.cs 2006-04-23 17:11:27 UTC (rev 199) +++ trunk/Punt/PluginSDK/Configuration/Layers.cs 2006-04-23 17:51:58 UTC (rev 200) @@ -9,6 +9,9 @@ { public class Layer { + public string Name; + public string Description; + [XmlAttributeAttribute()] public bool ShowOnlyOneLayer; @@ -44,8 +47,15 @@ public class LayerSet : Layer { - [XmlAttributeAttribute()] - public string Name; + /// <summary> + /// This is a hack to provide World Wind xml compatibility. + /// </summary> + [XmlAttributeAttribute("Name")] + public string LayerSetName + { + get { return Name; } + set { Name = value; } + } [XmlElementAttribute("Icon")] public Icon[] Icons; @@ -68,8 +78,6 @@ public class Icon : Layer { - public string Name; - public string Description; public FloatValue Latitude; public FloatValue Longitude; public float DistanceAboveSurface; @@ -88,7 +96,6 @@ private Color m_transparentColor; public bool EnableColorKeying; - public string Name; public float DistanceAboveSurface; public BoundingBox BoundingBox; public string m_texturePath; @@ -205,7 +212,6 @@ public class TiledPlacenameSet : Layer { - public string Name; public float DistanceAboveSurface; public float MinimumDisplayAltitude; public float MaximumDisplayAltitude; @@ -236,7 +242,6 @@ public class PathList : Layer { - public string Name; public float DistanceAboveSurface; public float MinDisplayAltitude; public float MaxDisplayAltitude; @@ -262,7 +267,6 @@ private Color m_transparentColor; public bool EnableColorKeying; - public string Name; public float DistanceAboveSurface; public BoundingBox BoundingBox; public bool TerrainMapped; Modified: trunk/Punt/PluginSDK/DrawArgs.cs =================================================================== --- trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-23 17:11:27 UTC (rev 199) +++ trunk/Punt/PluginSDK/DrawArgs.cs 2006-04-23 17:51:58 UTC (rev 200) @@ -407,9 +407,12 @@ if(FocusedObject == InfoPanelOwner) return; - IHasInfoPanel ihi = FocusedObject as IHasInfoPanel; - if(ihi==null) + InfoPanelOwner = FocusedObject; + IInfoPanel ip = FocusedObject as IInfoPanel; + if(ip==null) return; + if(!ip.HasInfoPanel) + return; // InfoPanel oldPanel = InfoPanel; // while(oldPanel != null) @@ -422,8 +425,7 @@ // oldPanel = oldPanel.PreviousPanel; // } - InfoPanelOwner = FocusedObject; - InfoPanel = ihi.CreateInfoPanel(); + InfoPanel = ip.CreateInfoPanel(); } } Modified: trunk/Punt/PluginSDK/Renderable/Icon.cs =================================================================== --- trunk/Punt/PluginSDK/Renderable/Icon.cs 2006-04-23 17:11:27 UTC (rev 199) +++ trunk/Punt/PluginSDK/Renderable/Icon.cs 2006-04-23 17:51:58 UTC (rev 200) @@ -353,11 +353,6 @@ #region Public properties /// <summary> - /// Longer description of icon (addition to name) - /// </summary> - public string Description; - - /// <summary> /// The icon altitude above sea level /// </summary> public float Altitude; @@ -392,6 +387,18 @@ static int hotColor = Color.White.ToArgb(); static int normalColor = Color.FromArgb(150,255,255,255).ToArgb(); + public override string Description + { + get + { + string res = base.Description; + if(res==null) + return ClickableActionURL; + + return res + "\n\n" + ClickableActionURL; + } + } + /// <summary> /// On-Click browse to location /// </summary> @@ -709,46 +716,6 @@ if(isSelectable) DrawArgs.MouseCursor = CursorType.Hand; - // Render description - string label = Description; - if(label==null) - label = ClickableActionURL; - if(label!=null) - { - // Render description field - DrawTextFormat format = DrawTextFormat.NoClip | DrawTextFormat.WordBreak | DrawTextFormat.Bottom; - int left = 10; - if(PuntSettings.Instance.showLayerManager) - left += PuntSettings.Instance.layerManagerWidth; - Rectangle r1 = Rectangle.FromLTRB(left, 10, DrawArgs.Width - 10, DrawArgs.Height - 10 ); - - // Draw outline - drawArgs.defaultDrawingFont.DrawText( - null, label,r1, - format, 0xb0 << 24 ); - - r1.Offset(2,0); - drawArgs.defaultDrawingFont.DrawText( - null, label,r1, - format, 0xb0 << 24 ); - - r1.Offset(0,2); - drawArgs.defaultDrawingFont.DrawText( - null, label,r1, - format, 0xb0 << 24 ); - - r1.Offset(-2,0); - drawArgs.defaultDrawingFont.DrawText( - null, label,r1, - format, 0xb0 << 24 ); - - // Draw description - r1.Offset(1,-1); - drawArgs.defaultDrawingFont.DrawText( - null, label,r1, - format, descriptionColor ); - } - // Render name // Adjust text to make room for icon int spacing = (int)(Width * 0.3f); Modified: trunk/Punt/PluginSDK/RenderableObject.cs =================================================================== --- trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-23 17:11:27 UTC (rev 199) +++ trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-23 17:51:58 UTC (rev 200) @@ -17,7 +17,7 @@ /// <summary> /// The base class for objects to be rendered as part of the scene. /// </summary> - public abstract class RenderableObject : IComparable, IDisposable, IHasInfoPanel + public abstract class RenderableObject : IComparable, IDisposable, IInfoPanel { /// <summary> /// True when object is ready to be rendered. @@ -32,6 +32,7 @@ public RenderableObjectList ParentList; protected string m_name; + protected string m_description; protected Vector3 m_position; protected Quaternion orientation; protected bool m_isOn = true; @@ -41,11 +42,19 @@ protected Image m_thumbnailImage; protected string m_iconImagePath; protected Image m_iconImage; - protected string m_abstract; protected World m_world; string m_thumbnail; /// <summary> + /// Longer description of layer (in addition to name) + /// </summary> + public virtual string Description + { + get { return m_description; } + set { m_description = value; } + } + + /// <summary> /// Initializes a new instance of the <see cref= "T:Punt.Renderable.RenderableObject"/> class. /// </summary> /// <param name="name">Object description</param> @@ -221,21 +230,6 @@ } /// <summary> - /// Layer description - /// </summary> - public virtual string Abstract - { - get - { - return m_abstract; - } - set - { - m_abstract = value; - } - } - - /// <summary> /// The object's render priority determining in what order it will be rendered /// compared to the other objects. /// </summary> @@ -448,8 +442,16 @@ #endregion - #region IHasInfoPanel Members + #region IInfoPanel Members + public bool HasInfoPanel + { + get + { + return Description != null && Description.Length > 0; + } + } + /// <summary> /// Creates the actual information panel. The caller is responsible for disposing the panel. /// </summary> @@ -476,13 +478,8 @@ Rectangle trect = new Rectangle(left, top, bmp.Width - left - 20, bmp.Height - top - 20); - const string lorum = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed\n\nEpsum factorial non deposit quid pro quo hic escorol. Olypian quarrels et gorilla congolium sic ad nauseum. Souvlaki ignitus carborundum e pluribus\n\nEpsum factorial non deposit quid"; - string description = Abstract; - if (description == null || description.Length <= 0) - description = lorum; - using (System.Drawing.Font font = new System.Drawing.Font("Tahoma", 12)) - g.DrawString(description, font, Brushes.Black, trect); + g.DrawString(Description, font, Brushes.Black, trect); InfoPanel panel = new InfoPanel(this, bmp); return panel; Modified: trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-23 17:11:27 UTC (rev 199) +++ trunk/Punt/PluginSDK/VisualControl/InfoPanel.cs 2006-04-23 17:51:58 UTC (rev 200) @@ -13,8 +13,9 @@ /// This interface is implemented by layers that can display an on-screen /// information panel. /// </summary> - public interface IHasInfoPanel : IDisposable + public interface IInfoPanel : IDisposable { + bool HasInfoPanel { get; } /// <summary> /// Creates the actual information panel. The caller is responsible for disposing the panel. /// </summary> @@ -33,7 +34,7 @@ int height; RenderableObject owner; public InfoPanel PreviousPanel; - long loadTime; // ticks + long lastActiveTime; // ticks public InfoPanel(RenderableObject owner, Bitmap bmp) { @@ -41,7 +42,6 @@ this.width = bmp.Width; this.height = bmp.Height; this.texture = new Texture(DrawArgs.Device, bmp, Usage.None, Pool.Managed); - this.loadTime = DrawArgs.CurrentFrameStartTicks; } public bool Disposed @@ -67,12 +67,15 @@ { get { - if(DrawArgs.FocusedObject != owner) - // A new object is active. - return false; + if(DrawArgs.FocusedObject == owner) + { + lastActiveTime = DrawArgs.CurrentFrameStartTicks; + return true; + } - const float holdTime = 1.3f; // hold for 1 second. - float elapsed = (DrawArgs.CurrentFrameStartTicks - loadTime) / + // A new object is active. + const float holdTime = 1f; // hold for 1 second. + float elapsed = (DrawArgs.CurrentFrameStartTicks - lastActiveTime) / PerformanceTimer.TicksPerSecond; return elapsed < holdTime; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-23 22:07:00
|
Revision: 207 Author: mashiharu Date: 2006-04-23 15:06:07 -0700 (Sun, 23 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=207&view=rev Log Message: ----------- PNT-35: Embedding "Sky and Fog" Modified Paths: -------------- trunk/Punt/PluginSDK/RenderableObject.cs trunk/Punt/PluginSDK/World.cs trunk/Punt/WorldWindow/WorldWindow.cs trunk/Punt/WorldWindow/WorldWindow.csproj Added Paths: ----------- trunk/Punt/WorldWindow/Fog.cs trunk/Punt/WorldWindow/Sky.cs trunk/Punt/bin/Debug/Data/Sky/ trunk/Punt/bin/Debug/Data/Sky/Sky_Day1.jpg trunk/Punt/bin/Debug/Data/Sky/Sky_Day2.jpg trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien1.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien2.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien3.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day1.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day2.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day3.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night1.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night2.png trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night3.png trunk/Punt/bin/Debug/Data/Sky/sky.ini Modified: trunk/Punt/PluginSDK/RenderableObject.cs =================================================================== --- trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-23 21:36:04 UTC (rev 206) +++ trunk/Punt/PluginSDK/RenderableObject.cs 2006-04-23 22:06:07 UTC (rev 207) @@ -495,6 +495,7 @@ /// </summary> public enum RenderPriority { + Effect = -50, SurfaceImages = 0, TerrainMappedImages = 100, AtmosphericImages = 200, Modified: trunk/Punt/PluginSDK/World.cs =================================================================== --- trunk/Punt/PluginSDK/World.cs 2006-04-23 21:36:04 UTC (rev 206) +++ trunk/Punt/PluginSDK/World.cs 2006-04-23 22:06:07 UTC (rev 207) @@ -79,8 +79,6 @@ m_layers = new RenderableObjectList(this.Name, this); m_layers.IsActive = true; - - m_layers.Add(new LatLongGrid(this)); } public void SetLayerOpacity(string category, string name, float opacity) Added: trunk/Punt/WorldWindow/Fog.cs =================================================================== --- trunk/Punt/WorldWindow/Fog.cs (rev 0) +++ trunk/Punt/WorldWindow/Fog.cs 2006-04-23 22:06:07 UTC (rev 207) @@ -0,0 +1,308 @@ +//---------------------------------------------------------------------------- +// NAME: Fog +// VERSION: 1.0 +// DESCRIPTION: Add range fog. Adds itself as a layer in Layer Manager (key: L). Right click on layer for settings. +// DEVELOPER: Patrick Murris +// WEBSITE: http://www.alpix.com/worldwin +//---------------------------------------------------------------------------- +// Based on Bjorn Reppen 'Atmosphere' and 'RangeFog' plugin +// 1.1 June 19, 2005 Settings dialog, intensity select, read/save settings +// 1.0 June 15, 2005 First version +//---------------------------------------------------------------------------- + +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using System.Windows.Forms; +using System.Drawing; + +using Punt.Renderable; +using Punt.Camera; +using Punt; +using Punt.Configuration; +using System.IO; +using System; + +namespace Punt +{ + /// <summary> + /// Fog layer + /// </summary> + public class FogLayer : RenderableObject + { + static string version = "1.1"; + string settingsFileName = "fog.ini"; + string pluginPath; + Form pDialog; + + // Fog defaults + float nearFactor = 2.0f; + float farFactor = 15.0f; + int fogColor = Color.FromArgb(208, 208, 208).ToArgb(); + + /// <summary> + /// Constructor + /// </summary> + public FogLayer() : base(I18N._("Fog")) + { + this.pluginPath = PuntSettings.Instance.ConfigPath; + this.RenderPriority = RenderPriority.Effect; // rendered before all others + ReadSettings(); + } + + /// <summary> + /// Read saved settings from ini file + /// </summary> + public void ReadSettings() + { + string line = ""; + try + { + using(TextReader tr = File.OpenText(Path.Combine(pluginPath, settingsFileName))) + line = tr.ReadLine(); + } + catch(Exception) {} + if(line != "") + { + string[] settingsList = line.Split(';'); + string saveVersion = settingsList[1]; // version when settings where saved + if(settingsList[1] != null) nearFactor = float.Parse(settingsList[1]); + if(settingsList[2] != null) farFactor = float.Parse(settingsList[2]); + } + } + + /// <summary> + /// Save settings in ini file + /// </summary> + public void SaveSettings() + { + string line = version + ";" + nearFactor.ToString() + ";" + farFactor.ToString(); + try + { + StreamWriter sw = new StreamWriter(Path.Combine(pluginPath, settingsFileName)); + sw.Write(line); + sw.Close(); + } + catch(Exception) {} + } + + #region RenderableObject + + /// <summary> + /// This is where we do our rendering + /// Called from UI thread = UI code safe in this function + /// </summary> + public override void Render(DrawArgs drawArgs) + { + if(!isInitialized) + return; + + // Camera & Device shortcuts ;) + CameraBase camera = DrawArgs.Camera; + Device device = DrawArgs.Device; + + // Set fog params + float a = camera.Altitude.Metres; + device.RenderState.FogEnable = true; + device.RenderState.FogColorValue = fogColor; + device.RenderState.FogTableMode = FogMode.Linear; + device.RenderState.FogStart = a * nearFactor; + device.RenderState.FogEnd = a * farFactor; + } + + /// <summary> + /// RenderableObject abstract member (needed) + /// OBS: Worker thread (don't update UI directly from this thread) + /// </summary> + public void Initialize(DrawArgs drawArgs) + { + isInitialized = true; + } + + /// <summary> + /// RenderableObject abstract member (needed) + /// OBS: Worker thread (don't update UI directly from this thread) + /// </summary> + public override void Update(DrawArgs drawArgs) + { + if(!isInitialized) + Initialize(drawArgs); + } + + /// <summary> + /// RenderableObject abstract member (needed) + /// OBS: Worker thread (don't update UI directly from this thread) + /// </summary> + public override void Dispose() + { + isInitialized = false; + } + + /// <summary> + /// Gets called when user left clicks. + /// RenderableObject abstract member (needed) + /// Called from UI thread = UI code safe in this function + /// </summary> + public override bool PerformSelectionAction(DrawArgs drawArgs) + { + return false; + } + + /// <summary> + /// Fills the context menu with menu items specific to the layer. + /// </summary> + public override void BuildContextMenu( ContextMenu menu ) + { + menu.MenuItems.Add("Properties", new System.EventHandler(OnPropertiesClick)); + } + + /// <summary> + /// Properties context menu clicked. + /// </summary> + protected override void OnPropertiesClick(object sender, EventArgs e) + { + if(pDialog != null && ! pDialog.IsDisposed) + // Already open + return; + + // Display the dialog + pDialog = new propertiesDialog(this); + pDialog.Show(); + + } + + /// <summary> + /// Properties Dialog + /// </summary> + public class propertiesDialog : System.Windows.Forms.Form + { + private System.Windows.Forms.Label lblFactors; + private System.Windows.Forms.ComboBox cboFactors; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + private FogLayer layer; + + public propertiesDialog( FogLayer layer ) + { + InitializeComponent(); + //this.Icon = Punt.PluginEngine.Plugin.Icon; + this.layer = layer; + // Init factors list presets + // TODO: use fogPreset objects + string[] presets = {"Very light", "Light", "Medium", "Thick", "London"}; + cboFactors.Items.AddRange(presets); + if(layer.nearFactor >= 1.0f) cboFactors.SelectedIndex = 4-(int)layer.nearFactor; + if(layer.nearFactor < 1.0f) cboFactors.SelectedIndex = 4; + // select current factors + //int i = cboFactors.FindString(layer.textureFileName); + //if(i != -1) cboFactors.SelectedIndex = i; + } + + #region Windows Form Designer generated code + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.btnCancel = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.lblFactors = new System.Windows.Forms.Label(); + this.cboFactors = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(311, 59); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.TabIndex = 0; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(224, 59); + this.btnOK.Name = "btnOK"; + this.btnOK.TabIndex = 1; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // lblFactors + // + this.lblFactors.AutoSize = true; + this.lblFactors.Location = new System.Drawing.Point(16, 28); + this.lblFactors.Name = "lblFactors"; + this.lblFactors.Size = new System.Drawing.Size(82, 16); + this.lblFactors.TabIndex = 2; + this.lblFactors.Text = "Fog intensity:"; + // + // cboFactors + // + this.cboFactors.Location = new System.Drawing.Point(96, 25); + this.cboFactors.Name = "cboFactors"; + this.cboFactors.Size = new System.Drawing.Size(296, 21); + this.cboFactors.TabIndex = 3; + //this.cboFactors.Text = "Select fog"; + this.cboFactors.DropDownStyle = ComboBoxStyle.DropDownList; + this.cboFactors.MaxDropDownItems = 10; + // + // frmFavorites + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(406, 94); + this.ControlBox = false; + this.Controls.Add(this.cboFactors); + this.Controls.Add(this.lblFactors); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "pDialog"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + //this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + //this.Location = new System.Drawing.Point(layer.drawArgs.CurrentMousePosition.X + 10, layer.drawArgs.CurrentMousePosition.Y - 10); + this.Text = "Fog properties"; + this.TopMost = true; + this.ResumeLayout(false); + + } + #endregion + + private void btnOK_Click(object sender, System.EventArgs e) + { + if(cboFactors.SelectedItem != null) + { + // Set factors + // TODO: use fogPreset objects + switch (cboFactors.SelectedItem.ToString()) + { + case "Very light": layer.nearFactor = 4.0f; layer.farFactor = 40.0f; break; + case "Light": layer.nearFactor = 3.0f; layer.farFactor = 25.0f; break; + case "Medium": layer.nearFactor = 2.0f; layer.farFactor = 15.0f; break; + case "Thick": layer.nearFactor = 1.0f; layer.farFactor = 10.0f; break; + case "London": layer.nearFactor = 0.5f; layer.farFactor = 7.0f; break; + } + layer.SaveSettings(); + } + // Close this form + this.Close(); + } + + private void btnCancel_Click(object sender, System.EventArgs e) + { + + // Close this form + this.Close(); + } + + + + } + + #endregion + } +} Added: trunk/Punt/WorldWindow/Sky.cs =================================================================== --- trunk/Punt/WorldWindow/Sky.cs (rev 0) +++ trunk/Punt/WorldWindow/Sky.cs 2006-04-23 22:06:07 UTC (rev 207) @@ -0,0 +1,432 @@ +//---------------------------------------------------------------------------- +// NAME: Sky +// VERSION: 1.1 +// DESCRIPTION: Renders a textured sky dome above the camera. Adds itself as a layer in Layer Manager (key: L). Right click on layer for settings. +// DEVELOPER: Patrick Murris +// WEBSITE: http://www.alpix.com/worldwin +//---------------------------------------------------------------------------- +// Based on Bjorn Reppen 'Atmosphere' plugin +// 1.1 June 18, 2005 Settings dialog, bitmap select, read/save settings +// 1.0 June 15, 2005 First version, one bitmap +//---------------------------------------------------------------------------- + +using Microsoft.DirectX; +using Microsoft.DirectX.Direct3D; +using System.Windows.Forms; +using Punt.Renderable; +using Punt.Camera; +using Punt; +using Punt.Configuration; +using System.IO; +using System; +using System.Reflection; + +namespace Punt +{ + /// <summary> + /// Sky dome + /// </summary> + public class SkyLayer : RenderableObject + { + static string version = "1.1"; + string settingsFileName = "sky.ini"; + string pluginPath; + Texture texture; + Form pDialog; + + // default sky bitmap + public string textureFileName = "Sky_Day1.jpg"; + + /// <summary> + /// Constructor + /// </summary> + public SkyLayer(World world) : base(I18N._("Sky")) + { + this.pluginPath = Path.Combine(PuntSettings.Instance.DataPath, "Sky"); + this.RenderPriority = RenderPriority.Effect; + + ReadSettings(); + } + + /// <summary> + /// Read saved settings from ini file + /// </summary> + public void ReadSettings() + { + string line = ""; + try + { + using(TextReader tr = File.OpenText(Path.Combine(pluginPath, settingsFileName))) + line = tr.ReadLine(); + } + catch(Exception) {} + if(line != "") + { + string[] settingsList = line.Split(';'); + string saveVersion = settingsList[1]; // version when settings where saved + if(settingsList[1] != null) textureFileName = settingsList[1]; + } + } + + /// <summary> + /// Save settings in ini file + /// </summary> + public void SaveSettings() + { + string line = version + ";" + textureFileName; + try + { + using(StreamWriter sw = new StreamWriter(Path.Combine(pluginPath, settingsFileName))) + sw.Write(line); + } + catch(Exception) {} + } + + #region RenderableObject + + /// <summary> + /// This is where we do our rendering + /// Called from UI thread = UI code safe in this function + /// </summary> + public override void Render(DrawArgs drawArgs) + { + if(!isInitialized) + return; + + // Camera & Device shortcuts ;) + CameraBase camera = DrawArgs.Camera; + Device device = DrawArgs.Device; + + if(camera.Altitude.Metres > 100e3) return; + + double distToCenterOfPlanet = (camera.Altitude.Metres + camera.WorldRadius); + double tangentalDistance = Math.Sqrt( distToCenterOfPlanet*distToCenterOfPlanet - camera.WorldRadius*camera.WorldRadius); + double domeRadius = tangentalDistance*0.5; + double domeToCenterOfPlanet = Math.Sqrt(camera.WorldRadius*camera.WorldRadius - domeRadius*domeRadius) - 2e3; + + // Create sky dome + Mesh skyMesh = TexturedDome(device, (float)domeRadius, 24, 12); + // set texture + device.SetTexture(0,texture); + device.TextureState[0].ColorOperation = TextureOperation.BlendCurrentAlpha; + device.VertexFormat = CustomVertex.PositionTextured.Format; + + // save world and projection transform + Matrix origWorld = device.Transform.World; + Matrix origProjection = device.Transform.Projection; + + // move sky dome + Matrix skyTrans; + Angle camLat = camera.Latitude; + Angle camLon = camera.Longitude; + //Vector3 groundPos = MathEngine.SphericalToCartesian(camLat, camLon, this.world.EquatorialRadius); + skyTrans = Matrix.Translation(0,0,(float)domeToCenterOfPlanet); + skyTrans = Matrix.Multiply(skyTrans, Matrix.RotationY(-(float)camLat.Radians+(float)Math.PI/2)); + skyTrans = Matrix.Multiply(skyTrans, Matrix.RotationZ((float)camLon.Radians)); + + device.Transform.World = skyTrans; + + // Save fog status + bool origFog = device.RenderState.FogEnable; + device.RenderState.FogEnable = false; + + // Set new one (to avoid being clipped) - probably better ways of doing this? + //float aspectRatio = (float)device.Viewport.Width / device.Viewport.Height; + //device.Transform.Projection = Matrix.PerspectiveFovRH((float)camera.Fov.Radians, aspectRatio, 1, float.MaxValue ); + + // draw + skyMesh.DrawSubset(0); + + // Restore device states + device.Transform.World = origWorld; + device.Transform.Projection = origProjection; + device.RenderState.FogEnable = origFog; + // dispose of sky - for now + skyMesh.Dispose(); + } + + /// <summary> + /// RenderableObject abstract member (needed) + /// OBS: Worker thread (don't update UI directly from this thread) + /// </summary> + public void Initialize(DrawArgs drawArgs) + { + try + { + OpenResource(textureFileName); + texture = TextureLoader.FromFile(DrawArgs.Device, Path.Combine(pluginPath, textureFileName)); + isInitialized = true; + } + catch + { + IsOn = false; + MessageBox.Show("Error loading texture " + Path.Combine(pluginPath, textureFileName) + ".","Layer initialization failed.", MessageBoxButtons.OK, + MessageBoxIcon.Error ); + } + } + + void OpenResource(string resourceName) + { + Assembly asm = Assembly.GetExecutingAssembly(); + using(Stream resStream = asm.GetManifestResourceStream("Plugins.SkyAndFog." + resourceName)) + {} + } + + /// <summary> + /// RenderableObject abstract member (needed) + /// OBS: Worker thread (don't update UI directly from this thread) + /// </summary> + public override void Update(DrawArgs drawArgs) + { + if(!isInitialized) + Initialize(drawArgs); + } + + /// <summary> + /// RenderableObject abstract member (needed) + /// OBS: Worker thread (don't update UI directly from this thread) + /// </summary> + public override void Dispose() + { + isInitialized = false; + if(texture!=null) + { + texture.Dispose(); + texture = null; + } + } + + /// <summary> + /// Gets called when user left clicks. + /// RenderableObject abstract member (needed) + /// Called from UI thread = UI code safe in this function + /// </summary> + public override bool PerformSelectionAction(DrawArgs drawArgs) + { + return false; + } + + /// <summary> + /// Fills the context menu with menu items specific to the layer. + /// </summary> + public override void BuildContextMenu( ContextMenu menu ) + { + menu.MenuItems.Add("Properties", new System.EventHandler(OnPropertiesClick)); + } + + /// <summary> + /// Properties context menu clicked. + /// </summary> + protected override void OnPropertiesClick(object sender, EventArgs e) + { + if(pDialog != null && ! pDialog.IsDisposed) + // Already open + return; + + // Display the dialog + pDialog = new propertiesDialog(this); + pDialog.Show(); + + } + + /// <summary> + /// Properties Dialog + /// </summary> + public class propertiesDialog : System.Windows.Forms.Form + { + private System.Windows.Forms.Label lblTexture; + private System.Windows.Forms.ComboBox cboTexture; + private System.Windows.Forms.Button btnOK; + private System.Windows.Forms.Button btnCancel; + private SkyLayer layer; + + public propertiesDialog( SkyLayer layer ) + { + InitializeComponent(); + //this.Icon = WorldWind.PluginEngine.Plugin.Icon; + this.layer = layer; + // Init texture list with *.jpg and *.png + DirectoryInfo di = new DirectoryInfo(layer.pluginPath); + FileInfo[] imgFiles = di.GetFiles("*.jpg"); + cboTexture.Items.AddRange(imgFiles); + imgFiles = di.GetFiles("*.png"); + cboTexture.Items.AddRange(imgFiles); + // select current bitmap + int i = cboTexture.FindString(layer.textureFileName); + if(i != -1) cboTexture.SelectedIndex = i; + } + + #region Windows Form Designer generated code + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.btnCancel = new System.Windows.Forms.Button(); + this.btnOK = new System.Windows.Forms.Button(); + this.lblTexture = new System.Windows.Forms.Label(); + this.cboTexture = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // btnCancel + // + this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.btnCancel.Location = new System.Drawing.Point(311, 59); + this.btnCancel.Name = "btnCancel"; + this.btnCancel.TabIndex = 0; + this.btnCancel.Text = "Cancel"; + this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); + // + // btnOK + // + this.btnOK.Location = new System.Drawing.Point(224, 59); + this.btnOK.Name = "btnOK"; + this.btnOK.TabIndex = 1; + this.btnOK.Text = "OK"; + this.btnOK.Click += new System.EventHandler(this.btnOK_Click); + // + // lblTexture + // + this.lblTexture.AutoSize = true; + this.lblTexture.Location = new System.Drawing.Point(16, 28); + this.lblTexture.Name = "lblTexture"; + this.lblTexture.Size = new System.Drawing.Size(82, 16); + this.lblTexture.TabIndex = 2; + this.lblTexture.Text = "Sky texture:"; + // + // cboTexture + // + this.cboTexture.Location = new System.Drawing.Point(96, 25); + this.cboTexture.Name = "cboTexture"; + this.cboTexture.Size = new System.Drawing.Size(296, 21); + this.cboTexture.TabIndex = 3; + this.cboTexture.Text = "Select texture file"; + this.cboTexture.DropDownStyle = ComboBoxStyle.DropDownList; + this.cboTexture.MaxDropDownItems = 10; + // + // frmFavorites + // + this.AcceptButton = this.btnOK; + this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); + this.CancelButton = this.btnCancel; + this.ClientSize = new System.Drawing.Size(406, 94); + this.ControlBox = false; + this.Controls.Add(this.cboTexture); + this.Controls.Add(this.lblTexture); + this.Controls.Add(this.btnOK); + this.Controls.Add(this.btnCancel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "pDialog"; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + //this.StartPosition = System.Windows.Forms.FormStartPosition.Manual; + //this.Location = new System.Drawing.Point(layer.drawArgs.CurrentMousePosition.X + 10, layer.drawArgs.CurrentMousePosition.Y - 10); + this.Text = "Sky properties"; + this.TopMost = true; + this.ResumeLayout(false); + + } + #endregion + + private void btnOK_Click(object sender, System.EventArgs e) + { + if(cboTexture.SelectedItem != null) + { + //System.Windows.Forms.MessageBox.Show("Texture : " + cboTexture.SelectedItem.ToString()); + layer.Dispose(); + layer.textureFileName = cboTexture.SelectedItem.ToString(); + layer.Initialize(null); + layer.SaveSettings(); + } + // Close this form + this.Close(); + } + + private void btnCancel_Click(object sender, System.EventArgs e) + { + + // Close this form + this.Close(); + } + } + + /// <summary> + /// Creates a PositionNormalTextured dome above X-Y plane + /// </summary> + /// <param name="device">The current direct3D drawing device.</param> + /// <param name="radius">The dome's radius</param> + /// <param name="slices">Number of slices (Horizontal resolution).</param> + /// <param name="stacks">Number of stacs. (Vertical resolution)</param> + /// <returns></returns> + /// <remarks> + /// Number of vertices in the dome will be (slices+1)*(stacks+1)<br/> + /// Number of faces :slices*stacks*2 + /// Number of Indexes : Number of faces * 3; + /// </remarks> + private Mesh TexturedDome(Device device, float radius, int slices, int stacks) + { + int numVertices = (slices+1)*(stacks+1); + int numFaces = slices*stacks*2; + int indexCount = numFaces * 3; + + Mesh mesh = new Mesh(numFaces,numVertices,MeshFlags.Managed,CustomVertex.PositionNormalTextured.Format,device); + + // Get the original sphere's vertex buffer. + int [] ranks = new int[1]; + ranks[0] = mesh.NumberVertices; + System.Array arr = mesh.VertexBuffer.Lock(0,typeof(CustomVertex.PositionNormalTextured),LockFlags.None,ranks); + + // Set the vertex buffer + int vertIndex=0; + for(int stack=0;stack<=stacks;stack++) + { + double latitude = (float)stack/stacks*(float)90.0; + for(int slice=0;slice<=slices;slice++) + { + CustomVertex.PositionNormalTextured pnt = new CustomVertex.PositionNormalTextured(); + double longitude = 180 - ((float)slice/slices*(float)360); + Vector3 v = MathEngine.SphericalToCartesian( latitude, longitude, radius); + pnt.X = v.X; + pnt.Y = v.Y; + pnt.Z = v.Z; + pnt.Tu = (float)slice/slices; + pnt.Tv = 1.0f-(float)stack/stacks; + arr.SetValue(pnt,vertIndex++); + } + } + + mesh.VertexBuffer.Unlock(); + ranks[0]=indexCount; + arr = mesh.LockIndexBuffer(typeof(short),LockFlags.None,ranks); + int i=0; + short bottomVertex = 0; + short topVertex = 0; + for(short x=0;x<stacks;x++) + { + bottomVertex = (short)((slices+1)*x); + topVertex = (short)(bottomVertex + slices + 1); + for(int y=0;y<slices;y++) + { + arr.SetValue(bottomVertex,i++); + arr.SetValue((short)(topVertex+1),i++); + arr.SetValue(topVertex,i++); + arr.SetValue(bottomVertex,i++); + arr.SetValue((short)(bottomVertex+1),i++); + arr.SetValue((short)(topVertex+1),i++); + bottomVertex++; + topVertex++; + } + } + mesh.IndexBuffer.SetData(arr,0,LockFlags.None); + mesh.ComputeNormals(); + + return mesh; + } + + + #endregion + } +} Modified: trunk/Punt/WorldWindow/WorldWindow.cs =================================================================== --- trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-23 21:36:04 UTC (rev 206) +++ trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-23 22:06:07 UTC (rev 207) @@ -299,6 +299,7 @@ using Punt.Configuration; using Punt.Menu; using Punt; +using Punt.Renderable; using Punt.Net; using Punt.Net.Wms; using Punt.Interop; @@ -378,6 +379,9 @@ DrawArgs.Camera = new MomentumCamera( value.EquatorialRadius ); world = value; + world.Layers.Add(new LatLongGrid(world)); + world.Layers.Add(new SkyLayer(world)); + world.Layers.Add(new FogLayer()); // Recreate all controls with new content (toolbar etc) DisposeControls(); Modified: trunk/Punt/WorldWindow/WorldWindow.csproj =================================================================== --- trunk/Punt/WorldWindow/WorldWindow.csproj 2006-04-23 21:36:04 UTC (rev 206) +++ trunk/Punt/WorldWindow/WorldWindow.csproj 2006-04-23 22:06:07 UTC (rev 207) @@ -122,6 +122,11 @@ BuildAction = "Compile" /> <File + RelPath = "Fog.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "NativeMethods.cs" SubType = "Code" BuildAction = "Compile" @@ -132,6 +137,11 @@ BuildAction = "Compile" /> <File + RelPath = "Sky.cs" + SubType = "Code" + BuildAction = "Compile" + /> + <File RelPath = "WorldWindow.cs" SubType = "Component" BuildAction = "Compile" Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Day1.jpg =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Day1.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Day2.jpg =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Day2.jpg ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien1.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien2.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien3.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Alien3.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day1.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day2.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day3.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Day3.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night1.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night1.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night2.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night2.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night3.png =================================================================== (Binary files differ) Property changes on: trunk/Punt/bin/Debug/Data/Sky/Sky_Gradian_Night3.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/Punt/bin/Debug/Data/Sky/sky.ini =================================================================== --- trunk/Punt/bin/Debug/Data/Sky/sky.ini (rev 0) +++ trunk/Punt/bin/Debug/Data/Sky/sky.ini 2006-04-23 22:06:07 UTC (rev 207) @@ -0,0 +1 @@ +1.1;Sky_Day1.jpg \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mas...@us...> - 2006-04-30 14:34:57
|
Revision: 216 Author: mashiharu Date: 2006-04-30 07:34:31 -0700 (Sun, 30 Apr 2006) ViewCVS: http://svn.sourceforge.net/punt/?rev=216&view=rev Log Message: ----------- PNT-25: Added a window class Modified Paths: -------------- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs trunk/Punt/PluginSDK/Menu/LayerMenuItem.cs trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs trunk/Punt/PluginSDK/PluginSDK.csproj trunk/Punt/WorldWindow/PositionInformation.cs trunk/Punt/WorldWindow/WorldWindow.cs Added Paths: ----------- trunk/Punt/PluginSDK/VisualControl/Window.cs Removed Paths: ------------- trunk/Punt/PluginSDK/PuntControl.cs Modified: trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-30 14:04:27 UTC (rev 215) +++ trunk/Punt/PluginSDK/Menu/LayerManagerMenu.cs 2006-04-30 14:34:31 UTC (rev 216) @@ -13,10 +13,9 @@ /// <summary> /// Layer manager window /// </summary> - public class LayerManagerMenu : PuntControl + public class LayerManagerMenu : Window { public int ScrollBarSize = 20; - public int DialogColor = System.Drawing.Color.Gray.ToArgb(); public int TextColor = System.Drawing.Color.White.ToArgb(); public LayerMenuItem MouseOverItem; World m_parentWorld; @@ -35,39 +34,15 @@ Microsoft.DirectX.Vector2[] scrollBarLine = new Vector2[2]; public ContextMenu ContextMenu; - public readonly int Left; - public readonly int Top = 120; - public int Right = PuntSettings.Instance.layerManagerWidth; - public int Bottom; public readonly float HeightPercent = 0.9f; private Vector2[] outlineVerts = new Vector2[5]; - public int Width - { - get { return Right - Left; } - set { Right = Left + value; } - } - - public int Height - { - get { return Bottom - Top; } - set { Bottom = Top + value; } - } - - Texture backTexture; - public override void Render(DrawArgs drawArgs) { - Bottom = DrawArgs.Height-1; + Height = DrawArgs.Height - Top; - // Background - if (backTexture == null) - backTexture = ImageHelper.LoadIconTexture("interface\\layermgr.png"); - DrawArgs.Device.RenderState.AlphaBlendEnable = true; - UIPaint.DrawBox(Left, Top, Right-Left, Bottom-Top, - backTexture); - + base.Render(drawArgs); RenderContents(drawArgs); DrawArgs.Device.RenderState.AlphaBlendEnable = false; @@ -143,7 +118,7 @@ { get { - int res = Bottom - bottomBorder - Top - topBorder - 1; + int res = Height - bottomBorder - topBorder - 1; return res; } } @@ -155,11 +130,12 @@ public LayerManagerMenu(World parentWorld) { m_parentWorld = parentWorld; - } - public sealed override void Dispose() - { - base.Dispose(); + Top = 120; + Width = PuntSettings.Instance.layerManagerWidth; + + // Background + BackgroundImage = ImageHelper.LoadIconTexture("interface\\layermgr.png"); } public override bool OnMouseWheel(MouseEventArgs e) @@ -433,8 +409,6 @@ scrollBarLine[0].Y = ClientTop; scrollBarLine[1].X = Right - ScrollBarSize; scrollBarLine[1].Y = Bottom; - - UIPaint.DrawLine(scrollBarLine, DialogColor); } } } \ No newline at end of file Modified: trunk/Punt/PluginSDK/Menu/LayerMenuItem.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/LayerMenuItem.cs 2006-04-30 14:04:27 UTC (rev 215) +++ trunk/Punt/PluginSDK/Menu/LayerMenuItem.cs 2006-04-30 14:34:31 UTC (rev 216) @@ -217,6 +217,7 @@ PuntSettings.Instance.menuOutlineColor); } + bool enabled = m_renderableObject.IsOn; const int iconSize = 16; if (m_renderableObject is RenderableObjectList) @@ -231,7 +232,7 @@ collapsedTextureOff = ImageHelper.LoadIconTexture("interface\\expand_r_off.png"); Texture dropdown = null; - if (m_renderableObject.IsOn) + if (enabled) dropdown = isExpanded ? expandedTexture : collapsedTexture; else dropdown = isExpanded ? expandedTextureOff : collapsedTextureOff; @@ -248,7 +249,7 @@ if (checkedTexture == null) checkedTexture = ImageHelper.LoadIconTexture("interface\\checked.png"); - Texture check = m_renderableObject.IsOn ? checkedTexture : uncheckedTexture; + Texture check = enabled ? checkedTexture : uncheckedTexture; // TODO: // Radio check Modified: trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs =================================================================== --- trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-30 14:04:27 UTC (rev 215) +++ trunk/Punt/PluginSDK/Menu/ToolbarMenu.cs 2006-04-30 14:34:31 UTC (rev 216) @@ -13,7 +13,7 @@ /// <summary> /// Toolbar /// </summary> - public class ToolBarMenu : PuntControl + public class ToolBarMenu : Window { #region Private Members Modified: trunk/Punt/PluginSDK/PluginSDK.csproj =================================================================== --- trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-30 14:04:27 UTC (rev 215) +++ trunk/Punt/PluginSDK/PluginSDK.csproj 2006-04-30 14:34:31 UTC (rev 216) @@ -222,11 +222,6 @@ BuildAction = "Compile" /> <File - RelPath = "PuntControl.cs" - SubType = "Code" - BuildAction = "Compile" - /> - <File RelPath = "PuntUri.cs" SubType = "Code" BuildAction = "Compile" @@ -546,6 +541,11 @@ SubType = "Code" BuildAction = "Compile" /> + <File + RelPath = "VisualControl\Window.cs" + SubType = "Code" + BuildAction = "Compile" + /> </Include> </Files> </CSHARP> Deleted: trunk/Punt/PluginSDK/PuntControl.cs =================================================================== --- trunk/Punt/PluginSDK/PuntControl.cs 2006-04-30 14:04:27 UTC (rev 215) +++ trunk/Punt/PluginSDK/PuntControl.cs 2006-04-30 14:34:31 UTC (rev 216) @@ -1,15 +0,0 @@ -using System; -using System.Windows.Forms; - -namespace Punt -{ - public abstract class PuntControl : IDisposable - { - public abstract void Render(DrawArgs drawArgs); - public virtual void Dispose() {} - public virtual bool OnMouseMove(MouseEventArgs e) { return false; } - public virtual bool OnMouseDown(MouseEventArgs e) { return false; } - public virtual bool OnMouseUp(MouseEventArgs e) { return false; } - public virtual bool OnMouseWheel(MouseEventArgs e) { return false; } - } -} Added: trunk/Punt/PluginSDK/VisualControl/Window.cs =================================================================== --- trunk/Punt/PluginSDK/VisualControl/Window.cs (rev 0) +++ trunk/Punt/PluginSDK/VisualControl/Window.cs 2006-04-30 14:34:31 UTC (rev 216) @@ -0,0 +1,262 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using Microsoft.DirectX.Direct3D; + +namespace Punt.VisualControl +{ + /// <summary> + /// Base DirectX Window ("form") class. + /// </summary> + public class Window : IDisposable + { + CustomVertex.TransformedTextured[] m_verts; + Texture m_texture; + bool m_modified = true; + int m_x, m_y, m_width, m_height; + + /// <summary> + /// Raises the mouse move event. + /// </summary> + /// <param name="e">The <see cref="System.Windows.Forms.MouseEventArgs"/> instance containing the event data.</param> + /// <returns></returns> + public virtual bool OnMouseMove(MouseEventArgs e) { return false; } + + /// <summary> + /// Raises the mouse down event. + /// </summary> + /// <param name="e">The <see cref="System.Windows.Forms.MouseEventArgs"/> instance containing the event data.</param> + /// <returns></returns> + public virtual bool OnMouseDown(MouseEventArgs e) { return false; } + + /// <summary> + /// Raises the mouse up event. + /// </summary> + /// <param name="e">The <see cref="System.Windows.Forms.MouseEventArgs"/> instance containing the event data.</param> + /// <returns></returns> + public virtual bool OnMouseUp(MouseEventArgs e) { return false; } + + /// <summary> + /// Raises the mouse wheel event. + /// </summary> + /// <param name="e">The <see cref="System.Windows.Forms.MouseEventArgs"/> instance containing the event data.</param> + /// <returns></returns> + public virtual bool OnMouseWheel(MouseEventArgs e) { return false; } + + /// <summary> + /// Gets or sets the background image. + /// </summary> + /// <value>The background image.</value> + public Texture BackgroundImage + { + get + { + return m_texture; + } + set + { + m_texture = value; + } + } + + /// <summary> + ///Gets or sets the distance, in pixels, between the left edge of the control + ///and the left edge of its container's client area. + /// </summary> + /// <value>An <see cref="Int32"/> representing the distance, in pixels, between the bottom + /// edge of the control and the left edge of its container's client area.</value> + public int Left + { + get + { + return m_x; + } + set + { + m_x = value; + m_modified = true; + } + } + + /// <summary> + ///Gets or sets the distance, in pixels, between the right edge of the control + ///and the right edge of its container's client area. + /// </summary> + /// <value>An <see cref="Int32"/> representing the distance, in pixels, between the bottom + /// edge of the control and the right edge of its container's client area.</value> + public int Right + { + get + { + return (m_x + m_width); + } + } + + /// <summary> + ///Gets or sets the distance, in pixels, between the top edge of the control + ///and the top edge of its container's client area. + /// </summary> + /// <value>An <see cref="Int32"/> representing the distance, in pixels, between the bottom + /// edge of the control and the top edge of its container's client area.</value> + public int Top + { + get + { + return m_y; + } + set + { + m_y = value; + m_modified = true; + } + } + + /// <summary> + ///Gets or sets the distance, in pixels, between the bottom edge of the control + ///and the bottom edge of its container's client area. + /// </summary> + /// <value>An <see cref="Int32"/> representing the distance, in pixels, between the bottom + /// edge of the control and the bottom edge of its container's client area.</value> + public int Bottom + { + get + { + return (m_y + m_height); + } + } + + /// <summary> + /// Gets or sets the width of the window. + /// </summary> + /// <value>The width of the window in pixels.</value> + public int Width + { + get + { + return m_width; + } + set + { + m_width = value; + m_modified = true; + } + } + + /// <summary> + /// Gets or sets the height of the window. + /// </summary> + /// <value>The height of the window in pixels.</value> + public int Height + { + get + { + return m_height; + } + set + { + m_height = value; + m_modified = true; + } + } + + /// <summary> + /// Gets or sets the size and location of the control including its + /// nonclient elements, in pixels, relative to the parent control. + /// </summary> + /// <value>A <see cref="Rectangle"/> in pixels relative to the parent control that + /// represents the size and location of the control including its nonclient elements. </value> + public Rectangle Bounds + { + get + { + return new Rectangle(m_x, m_y, m_width, m_height); + } + set + { + m_x = value.Left; + m_y = value.Top; + m_width = value.Width; + m_height = value.Height; + m_modified = true; + } + } + + /// <summary> + /// Initializes a new instance of the <see cref="Window"/> class. + /// </summary> + /// <param name="texture">The background image to paint behind the window.</param> + public Window(Texture texture) : this() + { + m_texture = texture; + } + + /// <summary> + /// Initializes a new instance of the <see cref="Window"/> class. + /// </summary> + public Window() + { + m_verts = new CustomVertex.TransformedTextured[4]; + m_verts[0].Rhw = 1; + m_verts[1].Rhw = 1; + m_verts[2].Rhw = 1; + m_verts[3].Rhw = 1; + m_verts[0].Tu = 0; + m_verts[0].Tv = 0; + m_verts[1].Tu = 0; + m_verts[1].Tv = 1; + m_verts[2].Tu = 1; + m_verts[2].Tv = 0; + m_verts[3].Tu = 1; + m_verts[3].Tv = 1; + } + + /// <summary> + /// Render the window. + /// </summary> + public virtual void Render(DrawArgs drawArgs) + { + if(m_modified) + UpdateBounds(); + + Device device = DrawArgs.Device; + device.VertexFormat = CustomVertex.TransformedTextured.Format; + device.SetTextureStageState(0, TextureStageStates.ColorOperation, (int)TextureOperation.SelectArg1); + device.SetTexture(0, m_texture); + device.DrawUserPrimitives(PrimitiveType.TriangleStrip, m_verts.Length - 2, m_verts); + } + + void UpdateBounds() + { + m_verts[0].X = m_x; + m_verts[0].Y = m_y; + + m_verts[1].X = m_x; + m_verts[1].Y = m_y + m_height; + + m_verts[2].X = m_x + m_width; + m_verts[2].Y = m_y; + + m_verts[3].X = m_x + m_width; + m_verts[3].Y = m_y + m_height; + + m_modified = false; + } + + #region IDisposable Members + + /// <summary> + /// Performs application-defined tasks associated with freeing, releasing, or + /// resetting unmanaged resources. + /// </summary> + public virtual void Dispose() + { + if(m_texture!=null) + { + m_texture.Dispose(); + m_texture = null; + } + } + + #endregion + } +} Modified: trunk/Punt/WorldWindow/PositionInformation.cs =================================================================== --- trunk/Punt/WorldWindow/PositionInformation.cs 2006-04-30 14:04:27 UTC (rev 215) +++ trunk/Punt/WorldWindow/PositionInformation.cs 2006-04-30 14:34:31 UTC (rev 216) @@ -6,6 +6,7 @@ using Punt; using Punt.Configuration; using Punt.Menu; +using Punt.VisualControl; using System.Windows.Forms; namespace Punt @@ -13,7 +14,7 @@ /// <summary> /// Display current position. /// </summary> - internal class PositionInformation : PuntControl + internal class PositionInformation : Window { public string Caption; Modified: trunk/Punt/WorldWindow/WorldWindow.cs =================================================================== --- trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-30 14:04:27 UTC (rev 215) +++ trunk/Punt/WorldWindow/WorldWindow.cs 2006-04-30 14:34:31 UTC (rev 216) @@ -731,7 +731,7 @@ */ lock (controls) { - foreach (PuntControl control in controls) + foreach (Window control in controls) control.Render(drawArgs); } } @@ -751,7 +751,7 @@ { for (int i = controls.Count - 1; i >= 0; i--) { - PuntControl control = (PuntControl)controls[i]; + Window control = (Window)controls[i]; controls.RemoveAt(i); control.Dispose(); } @@ -834,7 +834,7 @@ { lock (controls) { - foreach (PuntControl control in controls) + foreach (Window control in controls) if (control.OnMouseWheel(e)) return; } @@ -1067,7 +1067,7 @@ lock (controls) { - foreach (PuntControl control in controls) + foreach (Window control in controls) if (control.OnMouseDown(e)) return; } @@ -1094,7 +1094,7 @@ { lock (controls) { - foreach (PuntControl control in controls) + foreach (Window control in controls) if (control.OnMouseUp(e)) return; } @@ -1155,7 +1155,7 @@ { lock (controls) { - foreach (PuntControl control in controls) + foreach (Window control in controls) if (control.OnMouseMove(e)) return; } @@ -1515,19 +1515,19 @@ } } - void RemoveControl(PuntControl control) + void RemoveControl(Window window) { - if (control == null) + if (window == null) return; - controls.Remove(control); - control.Dispose(); + controls.Remove(window); + window.Dispose(); } void OnShowToolBarChanged(object sender, EventArgs e) { // Toolbar - PuntControl toolbar = null; - foreach (PuntControl control in controls) + Window toolbar = null; + foreach (Window control in controls) { if (control is ToolBarMenu) { @@ -1547,8 +1547,8 @@ void OnShowLayerManagerChanged(object sender, EventArgs e) { - PuntControl layerManager = null; - foreach (PuntControl control in controls) + Window layerManager = null; + foreach (Window control in controls) { if (control is LayerManagerMenu) { @@ -1569,8 +1569,8 @@ void OnShowPositionChanged(object sender, EventArgs e) { - PuntControl posInfo = null; - foreach (PuntControl control in controls) + Window posInfo = null; + foreach (Window control in controls) { if (control is PositionInformation) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |