<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Virtual Earth 3D team blog : VE3D</title><link>http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx</link><description>Tags: VE3D</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>GraphicsProxy RenderState</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/09/22/graphicsproxy-renderstate.aspx</link><pubDate>Tue, 22 Sep 2009 23:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9898177</guid><dc:creator>NikolaiF</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9898177.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9898177</wfw:commentRss><description>&lt;P&gt;I've gotten a few questions lately about how to do some alpha effects using models, specifically MeshGraphicsObject.&amp;nbsp; After you create the GraphicsObject, it has a RenderState object available on it.&amp;nbsp; The fields on this object will be familiar to those experienced with DirectX, but here's a rundown of a few especially useful ones:&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Allow your model to cast shadows on the ground.&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Lighting.CastShadows = true;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Allow your model to have directional shading&lt;/U&gt; (you can adjust the direction of the light using Host.WorldEngine.Environment.SunPosition).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Lighting.DirectionalLightEnabled = true;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Allow your model to use transparency&lt;/U&gt;, whether from vertex colors, textures, or TextureFactor (see below).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Alpha.Enabled = true;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Alpha.SourceBlend = Blend.SourceAlpha;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Alpha.DestinationBlend = Blend.InvSourceAlpha;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Allow use of TextureFactor to control the overall color of the model&lt;/U&gt;.&amp;nbsp; For example, you can create a model that has a texture with a white patch, and then create two models, one red and one blue, both using the same texture but differing on the value of TextureFactor.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Blending.ColorArgument1 = TextureArgument.TextureColor;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Blending.ColorArgument2 = TextureArgument.TFactor;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Blending.ColorOperation = TextureOperation.Modulate;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Allow use of TextureFactor to control the overall opacity of the model&lt;/U&gt;.&amp;nbsp; This is great for fading effects, as changing the TextureFactor per-frame is cheap.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Blending.AlphaArgument1 = TextureArgument.TextureColor;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Blending.AlphaArgument2 = TextureArgument.TFactor;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Blending.AlphaOperation = TextureOperation.Modulate;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Change the filtering used for textures&lt;/U&gt;.&amp;nbsp; For example, in the XFile sample, if you zoom in close to the model the texture gets blocky.&amp;nbsp; Dropping this code in improves the situation.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Sampler.MagnificationFilter = TextureFilter.Linear;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.Stages[0].Sampler.MinificationFilter = TextureFilter.Linear;&lt;/P&gt;
&lt;P&gt;&lt;U&gt;The TextureFactor value mentioned above&lt;/U&gt;.&amp;nbsp; This value would make the model ghostly transparent and red-tinged.&amp;nbsp; This (and other values in RenderState) can be cheaply changed every frame.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; newMesh.RenderState.TextureFactor.Value = Color.FromArgb(128, Color.Red);&lt;/P&gt;
&lt;P&gt;One additional note:&amp;nbsp; to use alpha, you must also call AddAlphaRenderable in your actor's Render function instead of just AddRenderable.&amp;nbsp; The distance is a sorting function that lets the renderer know what order to draw the alpha in (affects blending).&amp;nbsp; A constant value works in some situations, but if you find things look wrong, especially when one of your models occludes another, try using a value based on the distance between the model and the camera.&lt;/P&gt;
&lt;P&gt;Here's a few shots to demonstrate the effects of these switches:&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 591px; HEIGHT: 533px" title="XFile Model" alt="XFile Model" src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelOrig.jpg" width=591 height=533 mce_src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelOrig.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Everyone's favorite XFile sample model.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 602px; HEIGHT: 544px" title="XFile Model, lit" alt="XFile Model, lit" src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelLight.jpg" width=602 height=544 mce_src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelLight.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The same model, with shadows and directional lighting (the sun is above and a bit behind, if you move it the shading and shadows move appropriately).&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 612px; HEIGHT: 543px" title="XFile Model, alternate texture" alt="XFile Model, alternate texture" src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelTex.jpg" width=612 height=543 mce_src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelTex.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The same again, with an alternate texture that contains transparency and the various alpha switches on.&amp;nbsp; Note one detail:&amp;nbsp; the shadow casting code does not account for transparency.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 657px; HEIGHT: 631px" title="XFile model, all switches" alt="XFile model, all switches" src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelAll.jpg" width=657 height=631 mce_src="http://www.veteam.members.winisp.net/Spaceland/blog/ModelAll.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Same again, with all switches described above turned on.&amp;nbsp; The texture filtering is improved (look for blockiness in the center of the body in the previous shot), the color is shifted red, and the whole model is somewhat transparent, even parts where the texture is opaque.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9898177" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Rendering/default.aspx">Rendering</category></item><item><title>Actor data source questions</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/07/26/actor-data-source-questions.aspx</link><pubDate>Sun, 26 Jul 2009 21:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9849338</guid><dc:creator>NikolaiF</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9849338.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9849338</wfw:commentRss><description>&lt;P&gt;I just fielded a few good questions via email about actor data sources, and thought it would make a good post.&lt;/P&gt;
&lt;P&gt;Actor data sources are a way of getting little bits of your code (actors) into the world, handing spatial indexing and cache management for you.&amp;nbsp; When each actor is in view, they are given the opportunity to execute code in the Render and Update functions.&amp;nbsp; When the cache is full and an actor is evicted, they again may execute code in the OnRemove function.&lt;/P&gt;
&lt;P&gt;You create them by implementing a DataSource with usage Actor, and an ActorBuilder which translates the Primitives returned into Actor objects, along with information like what areas of the Earth the actors should be used in, as an ActorBounds object.&amp;nbsp; All of this can be seen in the &lt;A title=ActorDataSource href="http://www.veteam.members.winisp.net/Spaceland/Samplesv4/ActorDataSource/TestPage.htm" mce_href="http://www.veteam.members.winisp.net/Spaceland/Samplesv4/ActorDataSource/TestPage.htm"&gt;ActorDataSource&lt;/A&gt; &lt;A title=Samples href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx" target=_blank mce_href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx"&gt;sample&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;In the sample, however, only one Primitive is returned per request, and only one Actor.&amp;nbsp; What if you want more?&amp;nbsp; The important thing to know is that there has to be a 1-1 correspondence between Primitives and Actors *.&amp;nbsp; You must create one Actor for every Primitive used.&amp;nbsp; If you create more than one Actor for a single Primitive, only one will appear.&lt;/P&gt;
&lt;P&gt;The reason for this is the Actor update story.&amp;nbsp; It is possible to update an Actor already in the system by two methods.&amp;nbsp; When an Actor is updated, the PrimitiveId from the passed-in primitive is used to find and update the actor in question.&amp;nbsp; If you add multiple actors per primitive, an ambiguity arises as to what you actually want to do.&lt;/P&gt;
&lt;P&gt;It is possible to resolve this ambiguity by creating "nested" actors.&amp;nbsp; This is simple.&amp;nbsp; Just create the actors you want, and then a "container"&lt;/P&gt;
&lt;P&gt;*:&amp;nbsp; actually you can create a single Actor with multiple Primitives, but I don't want to confuse the issue for now.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;U&gt;Updating an Actor:&lt;/U&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Expiration.&lt;/STRONG&gt;&amp;nbsp; On the Entity attached to your primitive, add a property "ExpiresInSeconds":&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;e.EntityTypes["bunny"].Properties.Create("ExpiresInSeconds", typeof(double));&lt;/P&gt;
&lt;P mce_keep="true"&gt;...&lt;/P&gt;
&lt;P mce_keep="true"&gt;entitySpec.Properties.SetValue("ExpiresInSeconds", 10.0);&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;Your QueryPrimitivesInternal function will be called again for every area the affected Actors live, and OnRemove will be called for the expiring Actors.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Manual.&lt;/STRONG&gt;&amp;nbsp; You can specify a specific PrimitiveId to update using OnDataChanged in your source DataSource.&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;PrimitiveIdWriteableCollection wc = new PrimitiveIdWriteableCollection();&lt;BR&gt;wc.Add(new BunnyPrimitiveId(this, tile));&lt;BR&gt;OnDataChanged(new SpatialExtent(null, null, wc.GetReadOnlyCopy()));&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P mce_keep="true"&gt;You must also implement the QueryPrimitivesByIdsInternal function.&amp;nbsp; A collection of ids is provided, and you must return an array of Primitives that matches the input (so, the first item in the id collection should result in a Primitive at array index 0, etc).&amp;nbsp; If an element of the array is left null, that means to delete the Actor corresponding to that PrimitiveId.&amp;nbsp; Your ActorBuilder is then called to allow you to create the new replacement Actors.&lt;/P&gt;
&lt;P mce_keep="true"&gt;You can also specify a region of the Earth to update in the SpatialExtent, but update by entity is not supported.&amp;nbsp; Updating very large areas can be expensive, so use spatial regions with care.&amp;nbsp; Update by PrimitiveId is the most efficient.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9849338" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/DataSource/default.aspx">DataSource</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Actor/default.aspx">Actor</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Bing+Maps+3D/default.aspx">Bing Maps 3D</category></item><item><title>Data Format update and reminder</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/06/09/data-format-update-and-reminder.aspx</link><pubDate>Wed, 10 Jun 2009 01:07:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9718595</guid><dc:creator>NikolaiF</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9718595.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9718595</wfw:commentRss><description>&lt;P&gt;You may recall that I posted about a data format change for the new version.&amp;nbsp; The final switch-over is going to happen July 9th.&amp;nbsp; If you are still using an old version, models will stop displaying.&amp;nbsp; So upgrade now, the new version is better anyway.&lt;/P&gt;
&lt;P&gt;For those already on the new version (assembly version 4), you do not need to change anything at all.&lt;/P&gt;
&lt;P&gt;The plus side is that all of you developers have, for reasons of compatibility, been getting the old data for some time now, even if you have upgraded (right now, only Bing Maps gets the new data, everyone else gets the old).&amp;nbsp; On that date you will&amp;nbsp;automatically start getting the new data, and yes you will notice.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9718595" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category></item><item><title>WMS Data</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/06/09/wms-data.aspx</link><pubDate>Tue, 09 Jun 2009 20:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9716735</guid><dc:creator>NikolaiF</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9716735.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9716735</wfw:commentRss><description>&lt;P&gt;I was having a discussion with&amp;nbsp;Kurt Guenther from &lt;A title="Infusion Surface Blog" href="http://www.infusion.com/surfaceblog/" target=_blank mce_href="http://www.infusion.com/surfaceblog/"&gt;Infusion&lt;/A&gt; yesterday on the topic of WMS servers and VE3D.&amp;nbsp; There is a large amount of very interesting spatial data out there served by &lt;A title="WMS on Wikipedia" href="http://en.wikipedia.org/wiki/Web_Map_Service" target=_blank mce_href="http://en.wikipedia.org/wiki/Web_Map_Service"&gt;Web Map Services&lt;/A&gt;, or WMS servers.&amp;nbsp; VE3D is able to process this data using ConnectionParameter-based DataSources.&amp;nbsp; Setting it up is pretty easy:&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #2b91af; FONT-SIZE: 10pt"&gt;ConnectionParameters&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt; cp = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;ConnectionParameters&lt;/SPAN&gt;(&lt;SPAN style="FONT-FAMILY: 'Courier New'; COLOR: #a31515; FONT-SIZE: 10pt; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;A href="http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Portland/Portland_ESRI_Neighborhoods_AGO/MapServer/export?bbox=%7b16%7d,%7b17%7d,%7b18%7d,%7b19%7d&amp;amp;bboxSR=4326&amp;amp;layers=&amp;amp;layersDefs=&amp;amp;size=256,256&amp;amp;imageSR=102113&amp;amp;format=png&amp;amp;transparent=true&amp;amp;dpi=&amp;amp;f=image"&gt;&lt;FONT color=#0000ff&gt;http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Portland/Portland_ESRI_Neighborhoods_AGO/MapServer/export?bbox={16},{17},{18},{19}&amp;amp;bboxSR=4326&amp;amp;layers=&amp;amp;layersDefs=&amp;amp;size=256,256&amp;amp;imageSR=102113&amp;amp;format=png&amp;amp;transparent=true&amp;amp;dpi=&amp;amp;f=image&lt;/FONT&gt;&lt;/A&gt;&lt;/SPAN&gt;);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;string&lt;/SPAN&gt; connectionParameters = cp.ToString();&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;DataSourceLayerData&lt;/SPAN&gt; layerData = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;DataSourceLayerData&lt;/SPAN&gt;(LayerName, Name, connectionParameters, &lt;SPAN style="COLOR: #2b91af"&gt;DataSourceUsage&lt;/SPAN&gt;.TextureMap);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Courier New'; FONT-SIZE: 10pt"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Host.DataSources.Add(layerData);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Drop this in to your Activate (plug-in) or Initialized handler (winforms etc) app and fly to Portland, OR to see the data (thanks to ArcGIS for the sample data and Kurt for the pointer).&lt;/P&gt;
&lt;P mce_keep="true"&gt;I won't go into all the details of the WMS spec here, but I will call out a few important parts.&amp;nbsp; First, in order for this to work you must specify the bbox to be in Geographic coordinates (4326).&amp;nbsp; This is usually the default.&amp;nbsp; Second, you must pay attention to the returned projection.&amp;nbsp; In the above case, we have instructed the server to return 102113, which is Web Mercator, VE3D's native image projection.&amp;nbsp; This data can be consumed directly with very little overhead.&amp;nbsp; However, different servers support only certain formats and projections, and you must be careful for any particular server (it is possible to query this using WMS's GetCapabilities).&amp;nbsp; Nearly all support returning images in Geographic coordinates, 4326.&amp;nbsp; It is possible to instruct VE3D to reproject this to Web Mercator (this is the only reprojection VE3D will do for you, fortunately it will work for the majority of data).&lt;/P&gt;
&lt;P mce_keep="true"&gt;Now, to look at ConnectionParameters and what it can do for you.&amp;nbsp; First, there's the big url.&amp;nbsp; Notice that the bbox has string.Format replacement variables in it:&amp;nbsp; {16}, {17}, etc.&amp;nbsp; Requests to the server are made on a per-tile basis (the &lt;A title="Debug keys" href="http://blogs.msdn.com/virtualearth3d/archive/2008/10/29/debug-key-shortcuts.aspx" target=_blank mce_href="http://blogs.msdn.com/virtualearth3d/archive/2008/10/29/debug-key-shortcuts.aspx"&gt;T key&lt;/A&gt; is useful here).&amp;nbsp; For each request, these variables are replaced with data specific to the tile in question.&amp;nbsp; Here is a list of available parameters:&lt;/P&gt;&lt;FONT color=#008000 size=2&gt;&lt;FONT color=#008000 size=2&gt;
&lt;P&gt;0 Reserved&lt;/P&gt;
&lt;P&gt;1 Map Style&lt;/P&gt;
&lt;P&gt;2 Round-robin integer&lt;/P&gt;
&lt;P&gt;3 Reserved&lt;/P&gt;
&lt;P&gt;4 Quadkey&lt;/P&gt;
&lt;P&gt;5 Extension&lt;/P&gt;
&lt;P&gt;6 Generation&lt;/P&gt;
&lt;P&gt;7 Stripe (0-3)&lt;/P&gt;
&lt;P&gt;8 Tile Host&lt;/P&gt;
&lt;P&gt;9 App Host&lt;/P&gt;
&lt;P&gt;10 Language code&lt;/P&gt;
&lt;P&gt;11 Region code&lt;/P&gt;
&lt;P&gt;12 Tile LOD&lt;/P&gt;
&lt;P&gt;13 Tile X&lt;/P&gt;
&lt;P&gt;14 Tile Y&lt;/P&gt;
&lt;P&gt;15 Low order stripe (0-1)&lt;/P&gt;
&lt;P&gt;16 MinLong&lt;/P&gt;
&lt;P&gt;17 MinLat&lt;/P&gt;
&lt;P&gt;18 MaxLong&lt;/P&gt;
&lt;P&gt;19 MaxLat&lt;/P&gt;
&lt;P&gt;20 RequestToken&lt;/P&gt;
&lt;P&gt;21 Culture name&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P mce_keep="true"&gt;The most interesting ones are 4 (the main quad-key, very useful for already-tiled data), 12, 13, 14, and and 16-19.&amp;nbsp; To see some of this in action, check out the &lt;A title="Terrain Images live sample" href="http://www.veteam.members.winisp.net/Spaceland/Samplesv4/TerrainImages/TestPage.htm" target=_blank mce_href="http://www.veteam.members.winisp.net/Spaceland/Samplesv4/TerrainImages/TestPage.htm"&gt;TerrainImages sample&lt;/A&gt;&amp;nbsp;(also available in the &lt;A title=Samples href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx" target=_blank mce_href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx"&gt;sample code&lt;/A&gt; of course).&amp;nbsp; Programatically, you can&amp;nbsp;investigate these values using the TileId class, using GetRequestCode, GetPosition, and GetLatLonBoundingBox.&lt;/P&gt;
&lt;P mce_keep="true"&gt;As for other values on ConnectionParameters, you can control reprojection (if your data is in Geographic, specify CoordinateReferenceSystem = WGS84CoordinateReferenceSystem.Instance, as noted before this is the only reprojection natively supported, so otherwise leave this field uninitialized), the bounds of where the data is valid is terms of Lat/Long and LOD (useful to reducing unnecessary network requests), and caching behavior.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Caching behavior deserves special discussion, because WMS servers are often quite slow.&amp;nbsp; By default, data loaded using ConnectionParameters is not cached locally.&amp;nbsp; Once it moves out of memory, it must be re-queried.&amp;nbsp; If you set CacheRetention however, the data will be kept locally for the period of time specified (unless it is evicted due to space restrictions in the interim).&amp;nbsp; If you set CacheRetention = new TimeSpan(24, 0, 0), for example, for 24 hours from the time of query a given tile will not be re-queried.&amp;nbsp; Note that some servers are dynamic, such as weather data, so it's important to use an appropriate value here.&lt;/P&gt;
&lt;P mce_keep="true"&gt;And just to give Kurt a poke in the ribs, please remember to only add DataSources after/during the Initialized event!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;STRONG&gt;Update:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;John Fletcher from &lt;A href="http://www.latitudegeo.com/" target=_blank mce_href="http://www.latitudegeo.com/"&gt;Latitude Geographics&lt;/A&gt; pointed out that the example I give above isn't actually WMS compliant in its query parameters.&amp;nbsp; He suggests an alternate sample, of the British Columbia, CA&amp;nbsp;area:&lt;/P&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;
&lt;P&gt;ConnectionParameters&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; p = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;ConnectionParameters&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"http://openmaps.gov.bc.ca/mapserver/libcwms2?SERVICE=WMS&amp;amp;VERSION=1.1.1&amp;amp;REQUEST=GetMap&amp;amp;LAYERS=DBM_7H_MIL_BATHYMETRIC_POLY,BC_LABEL,DBM_7H_MIL_DRAINAGE_LINE,DBM_7H_MIL_DRAINAGE_POLY,DBM_7H_MIL_ROADS_LINE,DBM_7H_MIL_POLITICAL_POLY_PS,DBM_7H_MIL_POPULATION_POINT&amp;amp;STYLES=,,,,,,&amp;amp;SRS=EPSG:4326&amp;amp;BBOX={16},{17},{18},{19}&amp;amp;WIDTH=256&amp;amp;HEIGHT=256&amp;amp;FORMAT=image/png&amp;amp;TRANSPARENT=TRUE&amp;amp;EXCEPTIONS=application/vnd.ogc.se_inimage&amp;amp;"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;/P&gt;
&lt;P&gt;p.CoordinateReferenceSystem = Microsoft.MapPoint.CoordinateSystems.&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;Wgs84CoordinateReferenceSystem&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Instance;&lt;/P&gt;
&lt;P&gt;Host.DataSources.Add(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;DataSourceLayerData&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"foo"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"bar"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, p.ToString(), &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;DataSourceUsage&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.TextureMap));&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;John&amp;nbsp;also provided a link to the WMS spec repository&amp;nbsp;(&lt;A href="http://www.opengeospatial.org/standards/wms"&gt;http://www.opengeospatial.org/standards/wms&lt;/A&gt;).&amp;nbsp; Note that the sample above is for WMS 1.1.1.&amp;nbsp; The most current version is 1.3.0, but many servers use the older, or support both.&amp;nbsp; No matter which you use (or even for something a little off spec like my original example) the interface with VE3D is the same.&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9716735" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/DataSource/default.aspx">DataSource</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Cache/default.aspx">Cache</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/WMS/default.aspx">WMS</category></item><item><title>Modifying cache location</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/06/09/modifying-cache-location.aspx</link><pubDate>Tue, 09 Jun 2009 20:06:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9716616</guid><dc:creator>NikolaiF</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9716616.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9716616</wfw:commentRss><description>&lt;P&gt;My, it has been a long time since I posted.&amp;nbsp; I promise I will try to be better.&lt;/P&gt;
&lt;P&gt;Recently I was asked if it is possible to change the location of the cache file.&amp;nbsp; It is, with certain minor restrictions.&amp;nbsp; &lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000 size=2 face=Arial&gt;You can change the location by adding this to user.config:&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000 size=2 face=Arial&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;setting name="PersistentCacheDirectory" serializeAs="String"&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;value&amp;gt;path here&amp;lt;/value&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/setting&amp;gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000 size=2 face=Arial&gt;Or, when creating the GlobeControl directly, pass in a GlobeControlInitializationOptions object with PersistentCachePath set.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT color=#000000&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000 size=2 face=Arial&gt;In either case, you can either specify a full path to anywhere, or a relative path from the current location (\AppData\LocalLow\Microsoft\Virtual Earth 3D\).&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT size=3&gt;&lt;FONT color=#000000 size=2 face=Arial&gt;Putting the file outside LocalLow will cause problems when running in IE7/8 protected mode (Vista/Win7 with UAC on).&amp;nbsp; For a WinForms or WPF-based solution, it’s fine.&amp;nbsp; In such a case, the GlobeControlInitializationOptions setting is generally preferred as it will prevent problems when running Bing Maps on the same machine.&amp;nbsp; On the other hand, this will also cause two caches to be written, one in the default location and containing data from runs in Bing Maps, and one in the specified location.&amp;nbsp; The best approach depends on your exact usage.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9716616" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Cache/default.aspx">Cache</category></item><item><title>New Version Released!</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/04/09/new-version-released.aspx</link><pubDate>Fri, 10 Apr 2009 01:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9541704</guid><dc:creator>NikolaiF</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9541704.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9541704</wfw:commentRss><description>&lt;P&gt;Our new version has gone live.&amp;nbsp; Head on over to &lt;A class="" href="http://maps.live.com/" target=_blank mce_href="http://maps.live.com/"&gt;maps.live.com&lt;/A&gt; and click "3D" to upgrade.&amp;nbsp; This release is billed primarily as a perf and bug release because it doesn't add a lot of new features at the end-user level (though I think you will be pleased with the perf improvements), but we did have time to throw in some good stuff for the devs.&lt;/P&gt;
&lt;P&gt;I've updated the Samples entry, and clicking on the link should get you the new sample set.&amp;nbsp; As usual, please pass along any problems in comments or blog feedback.&amp;nbsp; The samples are mostly the same, with a few new additions, but they have been cleaned up for best practices and new features.&amp;nbsp; I do recommend that you take a glance at them even if you're already familiar with the API.&amp;nbsp; The Camera sample is most changed, and hopefully should help explain the flow of camera control a little better.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx" mce_href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx"&gt;Get the code!&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Here's a sampling of new and expanded areas:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Initialized event&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;A new event on RenderEngine that simplifies the startup scenario.&amp;nbsp; Check out SimpleForm to see it.&amp;nbsp; Remember that use of this event or FirstFrameRendered is now required!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Anisotropic Filtering&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;Greatly improves the appearance of terrain when at an angle.&amp;nbsp; It's off by default, since there are some graphics cards that don't play nice with it (usually old and rare, but still).&amp;nbsp; You can turn this on through the website in the options box, or you can set it programmatically.&amp;nbsp; See SimpleForm.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Dem Data&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;The ability to supply custom DEM data, and have it automatically stitched into existing data.&amp;nbsp; Previously DEM datasources did not work very well, mostly because we did not automatically stitch.&amp;nbsp; They are still a bit trickier than imagery, but there's a new sample DemData to help you out.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ILocationListener&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;An interface that allows automatic and efficient query of a location to determine elevation as data changes.&amp;nbsp; ActorDataSource now uses it.&amp;nbsp; Essentially, you register this object and report its Lat/Lon position.&amp;nbsp; If the ground or other solid object moves or changes there, you will get a call to update.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Manual Rendering&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;Manual render functions that allow use your own thread as the render thread, good for offline rendering or incorporation into another product.&amp;nbsp; RenderEngine.ManuallyInitializeRender and ManuallyRenderNextFrame.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Datasource ConnectionParameters&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;Helper function for specifying data sources without a content manifest.&amp;nbsp; The string parameter was very hard to use, this is nicer.&amp;nbsp; There are also a few new options, like allowing caching of data specified this way.&amp;nbsp; See TerrainImages.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CelestialStyle&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;Allow display of a stylized sky with constellations.&amp;nbsp; This is used on the website in Road Mode, but you can set it yourself.&amp;nbsp; See SimpleForm.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Versioning&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;Support for running code built against previous control versions, if it meets certain requirements.&amp;nbsp; I've outlined this in &lt;A href="http://blogs.msdn.com/virtualearth3d/archive/2009/04/01/upcoming-new-version.aspx"&gt;http://blogs.msdn.com/virtualearth3d/archive/2009/04/01/upcoming-new-version.aspx&lt;/A&gt;.&amp;nbsp; To show it working, I've set up a page with samples built from the &lt;A class="" href="http://www.veteam.members.winisp.net/Spaceland/Samples/TestPage.htm" target=_blank mce_href="http://www.veteam.members.winisp.net/Spaceland/Samples/TestPage.htm"&gt;previous version&lt;/A&gt;&amp;nbsp;and from the &lt;A class="" href="http://www.veteam.members.winisp.net/Spaceland/Samplesv4/TestPage.htm" target=_blank mce_href="http://www.veteam.members.winisp.net/Spaceland/Samplesv4/TestPage.htm"&gt;new version&lt;/A&gt;.&amp;nbsp; Both sets work just fine with the new release.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Pixel-width lines&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;GeometryManager supports pixel-width 3D lines (previously only single-pixel or meter-width).&amp;nbsp; See the Camera sample.&amp;nbsp; We also now have nice looking text labels.&amp;nbsp; See the XFile sample.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Constant value datasources&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;Helper functions for supplying flat color or elevation data.&amp;nbsp; The Mandelbrot sample uses one to display flat elevation.&amp;nbsp; Please note that a DEM and an Imagery datasource are actually required for proper display.&amp;nbsp; These constant value sources are useful for this case.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Terrain Scaling&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;WorldEngine.Min/MaxElevationScaling.&amp;nbsp; It is actually possible to have varying scale based on your altitude, but there is some cost associated and I recommend that you set the two values equal to each other.&amp;nbsp; Our default value is 1.0, unscaled.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Override Loading Screen&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;You can now render (or suppress) the loading screen (affectionately known as "The Circle Of Hope" since our first version, back when the startup flow was a bit less stable than it is now).&amp;nbsp; In the very simplest case, write this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;class MyControl : GlobeControl&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; protected override void OnPaintLoading(...)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;This will get you a black screen.&amp;nbsp; You can also grab a reference to the control's Graphics object from the PaintEventArgs and draw anything you like.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Building culling value&lt;/STRONG&gt;&lt;BR&gt;&amp;nbsp;Allows control of how many buildings are displayed, based on distance and size of the buildings.&amp;nbsp; WorldEngine.BuildingCulling.&amp;nbsp; The effectiveness of this varies on hardware -- some hardware benefits a great deal, some very little.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Turn on/off street level navigation&lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;Can turn off some of the special navigation effects that occur when right next to the ground, such as sticking to the ground, and the screen drag regions on the sides of the screen when at low altitude.&amp;nbsp; WorldEngine.Enable*.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;We have not yet updated the docs.&amp;nbsp; However, we did not make many fundamental changes to the code from an API perspective, and in fact existing code is as much as possible exactly the same.&amp;nbsp; So it is just lacking detail on the new features, and still a good reference.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9541704" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Documentation/default.aspx">Documentation</category></item><item><title>Upcoming new version</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/04/01/upcoming-new-version.aspx</link><pubDate>Wed, 01 Apr 2009 21:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9527562</guid><dc:creator>NikolaiF</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9527562.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9527562</wfw:commentRss><description>&lt;P&gt;Next week we'll be releasing a new version of the control.&amp;nbsp; The focus of the release is on perf and bug fixes, but it also adds a set of interesting new functions for managed code developers.&amp;nbsp; I'll be posting updated samples, and more detail on the changes, when the control goes public.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;But will it break me?&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;This is of course the biggest question for most devs, and the reason why you're getting a heads up.&amp;nbsp; We've tried hard to minimize breakage.&amp;nbsp; The main differences between this update and the previous is that we've&amp;nbsp;maintained binary compatibility for the "public" assemblies, and are also including version redirect assemblies.&amp;nbsp; The upshot is that if you are only hitting public members in those assemblies, your code should continue to function without a recompile.&amp;nbsp; If you are hitting other assemblies, you will have to recompile.&lt;/P&gt;
&lt;P&gt;Here are the public API assemblies:&lt;/P&gt;
&lt;P&gt;Microsoft.MapPoint.Data.dll&lt;BR&gt;Microsoft.MapPoint.Geometry.dll&lt;BR&gt;Microsoft.MapPoint.Rendering3D.dll&lt;BR&gt;Microsoft.MapPoint.Rendering3D.Utility.dll&lt;BR&gt;Microsoft.MapPoint.UtilityPartialTrust.dll&lt;/P&gt;
&lt;P&gt;Note that these are also the assemblies accessible to partial trust.&lt;/P&gt;
&lt;P&gt;There is one caveat to the compatibility story, and that is startup.&amp;nbsp; This is significant enough that I &lt;A class="" href="http://blogs.msdn.com/virtualearth3d/archive/2009/02/21/startup-and-host-interaction.aspx" mce_href="http://blogs.msdn.com/virtualearth3d/archive/2009/02/21/startup-and-host-interaction.aspx"&gt;posted about it already&lt;/A&gt;.&amp;nbsp; If you haven't looked at this yet please do so.&amp;nbsp; But overall I think the transition will be easier this time around, and we aim to make that better as we go.&lt;/P&gt;
&lt;P&gt;As usual I will be available via the comments section or blog feedback to help with any issues.&amp;nbsp; Thanks!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9527562" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category></item><item><title>WPF and VE3D</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/03/11/wpf-and-ve3d.aspx</link><pubDate>Wed, 11 Mar 2009 22:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9470917</guid><dc:creator>NikolaiF</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9470917.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9470917</wfw:commentRss><description>&lt;P&gt;I do love having a developer community out there.&amp;nbsp; We've had lots of requests for direct WPF integration of VE3D, and we've certainly wanted to make it part of the story... and then someone else just goes and does it.&amp;nbsp; &lt;A class="" href="http://blogs.msdn.com/devkeydet/archive/2009/03/10/infostrat-releases-a-virtual-earth-control-for-both-wpf-and-surface-to-codeplex.aspx" target=_blank mce_href="http://blogs.msdn.com/devkeydet/archive/2009/03/10/infostrat-releases-a-virtual-earth-control-for-both-wpf-and-surface-to-codeplex.aspx"&gt;Marc Schweigert&lt;/A&gt; called this to me attention yesterday.&amp;nbsp; &lt;A class="" href="http://www.infostrat.com/home" target=_blank mce_href="http://www.infostrat.com/home"&gt;Infostrat&lt;/A&gt;&amp;nbsp;has taken VE3D and wrapped it up in a WPF control that you can just drop right into your XAML, which is precisely what folks have wanted out of it.&lt;/P&gt;
&lt;P&gt;But it gets better.&amp;nbsp; Infostrat has also put this project, including the source, onto &lt;A class="" href="http://virtualearthwpf.codeplex.com/" target=_blank mce_href="http://virtualearthwpf.codeplex.com/"&gt;CodePlex&lt;/A&gt; under LGPL.&amp;nbsp; I've downloaded the source and built myself with no problems.&amp;nbsp; You just need VS 2008 and .NET 3.5 SP1.&amp;nbsp; The central problem and the trickiest part for most folks is how to efficiently get VE3D to composite into the rest of the WPF app, and they've done a good job.&amp;nbsp; For more sugar, they also have a Surface version with multi-touch support.&lt;/P&gt;
&lt;P&gt;Many thanks to &lt;A class="" href="http://nui.joshland.org/" target=_blank mce_href="http://nui.joshland.org/"&gt;Josh Blake&lt;/A&gt;, the primary developer on the project, and the Infostrat team.&amp;nbsp; Have fun!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9470917" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/WPF/default.aspx">WPF</category></item><item><title>Multitouch in VE3D</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/03/04/multitouch-in-ve3d.aspx</link><pubDate>Wed, 04 Mar 2009 21:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9458806</guid><dc:creator>NikolaiF</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9458806.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9458806</wfw:commentRss><description>&lt;P&gt;Ever since I got a Touchsmart at home I've been very interested in the desktop touch experience, and so in the last couple days I decided to play with how I could incorporate it into VE3D.&amp;nbsp; The code itself isn't really ready for consumption, but if you'd like to see where I'm at, I've built a very preliminary plug-in that you can install and play with.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.veteam.members.winisp.net/Spaceland/blog/MultitouchPlugInSetup.exe" mce_href="http://www.veteam.members.winisp.net/Spaceland/blog/MultitouchPlugInSetup.exe"&gt;Download&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This requires Windows 7 and a machine that has multitouch support, such as a Touchsmart or Latitude XT.&amp;nbsp; The package is a self-extracting zip, just run it and accept the defaults.&amp;nbsp; The next time you launch VE3D, the plug-in will load shortly after startup.&amp;nbsp; There's no UI or anything.&amp;nbsp; The gestures will just quietly start working.&amp;nbsp; The plug-in will work on any app that uses GlobeControl (and loads it), but since it calls native code it does require &lt;A href="http://blogs.msdn.com/virtualearth3d/archive/2008/05/01/installing-plug-ins.aspx" mce_href="http://blogs.msdn.com/virtualearth3d/archive/2008/05/01/installing-plug-ins.aspx"&gt;installation&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Currently supported are two-finger zoom and two-finger rotate.&amp;nbsp; I'm using the built-in gesture engine from Win7, which makes things very easy, but in the future I would like to use direct touch input instead.&amp;nbsp; This&amp;nbsp;should eliminate a few artifacts like a momentary delay between when you start input and when the map starts moving.&amp;nbsp; It should also allow support of some more interesting types of inputs, like a two-finger pan, combining rotate and zoom into a single fluid motion, etc.&amp;nbsp; The point is that there's a lot of potential beyond what I've done here.&lt;/P&gt;
&lt;P&gt;The touch interface in Win7 relies on Windows Messages and a few native functions.&amp;nbsp; To listen to Windows Messages, use Host.CommunicationManager.AttachToMessage.&amp;nbsp; To interact with the native gesture API, &lt;A href="http://www.veteam.members.winisp.net/Spaceland/blog/NativeGestures.zip" mce_href="http://www.veteam.members.winisp.net/Spaceland/blog/NativeGestures.zip"&gt;here's something to get you started&lt;/A&gt;&amp;nbsp;(this code will work just as well in any managed application).&amp;nbsp; After that it's a matter of redirecting gestures to existing navigation Actions using bindings.&amp;nbsp; To really do it right you'd probably also want to write a few things in your own CameraController.&lt;/P&gt;
&lt;P&gt;Here's the &lt;A href="http://msdn.microsoft.com/en-us/library/dd353239(VS.85).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd353239(VS.85).aspx"&gt;gesture documentation&lt;/A&gt; on MSDN.&amp;nbsp; Here's the &lt;A href="http://msdn.microsoft.com/en-us/library/dd317321(VS.85).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/dd317321(VS.85).aspx"&gt;raw touch docs&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Note:&amp;nbsp; there's a bug in the current GlobeControl where the lParam and wParam values are reversed in the handler to AttachToMessage.&amp;nbsp; Whoops!&amp;nbsp; This is fixed in the next version, so be prepared.&amp;nbsp; I will be releasing my code as a sample at that time, and will update the installer as well.&lt;/P&gt;
&lt;P&gt;Note 2:&amp;nbsp; I noticed on my Touchsmart that the rotate gesture has some trouble when your fingers are diagonal relative&amp;nbsp;to the screen.&amp;nbsp; I think this is a driver thing, since it doesn't happen on the Latitude XT, which uses a different touch technology and, obviously, different drivers.&amp;nbsp; However, it looks like they are releasing improved drivers on Windows Update, so I hope this is just a bleeding edge thing.&lt;/P&gt;
&lt;P&gt;Edit:&amp;nbsp; the "Download" link has been updated to a version that is compatible with the current build on Virtual Earth 3D.&amp;nbsp; Please uninstall the old version first and then install the new one.&amp;nbsp; Functionality is still the same, that is to say, less than ideal.&amp;nbsp; From what I have seen, using WM_TOUCH instead of WM_GESTURE will provide a far superior experience.&amp;nbsp; Stay tuned.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9458806" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Plug-In/default.aspx">Plug-In</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Multitouch/default.aspx">Multitouch</category></item><item><title>Startup and Host interaction</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/02/21/startup-and-host-interaction.aspx</link><pubDate>Sat, 21 Feb 2009 22:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9438052</guid><dc:creator>NikolaiF</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9438052.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9438052</wfw:commentRss><description>&lt;P&gt;When the control first starts, there are several stages that need to complete before it is really ready.&lt;/P&gt;
&lt;P&gt;1 Construction.&amp;nbsp; This occurs when you call GlobeControl's constructor.&lt;/P&gt;
&lt;P&gt;2 Initialization on the UI thread.&amp;nbsp; Some objects can initialize themselves here.&amp;nbsp; This happens when the control starts receiving windows messages.&lt;/P&gt;
&lt;P&gt;3 Initialization on the Render thread.&amp;nbsp; Other objects need information from the graphics system, which must happen on the render thread to keep DX happy.&lt;/P&gt;
&lt;P&gt;4 Start rendering.&amp;nbsp; The control is now ready to go.&lt;/P&gt;
&lt;P&gt;If you start playing with the control before it's done, accessing properties and functions on the various Host objects, you can get bad behavior.&amp;nbsp; You may get an error, and you may not.&amp;nbsp; In the current version, there is no validation for this, so you might be fine, or there could be subtle or rare badness.&amp;nbsp;&amp;nbsp;To get past all of this,&amp;nbsp;you&amp;nbsp;should hook up to the Host.RenderEngine.FirstFrameRendered event and do all of your GlobeControl-related setup there, like adding DataSources and PlugIns, really&amp;nbsp;everything should happen in or after the event.&amp;nbsp; Properties that derive from Control (the winforms class), such as Height and Width, are ok.&lt;/P&gt;
&lt;P&gt;In the next version, we will be validating startup to make sure you don't call most functions until it's ready.&amp;nbsp; You will be able to access the events on RenderEngine right after construction, but that's all you should do.&amp;nbsp; There will be a new event, Initialized, to make this process more obvious and logical.&lt;/P&gt;
&lt;P&gt;So I encourage everyone to hook up to the FirstFrameRendered event now.&amp;nbsp; If you're not using it, you may be broken and not realize it.&amp;nbsp; In the next version, you will definitely be broken.&amp;nbsp; The FirstFrameRendered event will still be available, and there will&amp;nbsp;not a big difference between it and Initialized, but Initialized will be the best practices way of doing it.&lt;/P&gt;
&lt;P&gt;We have tried hard to minimize breaking changes for the next version, and in fact I can't think of any others off the top of my head, but&amp;nbsp;for this we decided it is for the best.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9438052" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Startup/default.aspx">Startup</category></item><item><title>Microsoft Photo Calibration Tool</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/02/11/microsoft-photo-calibration-tool.aspx</link><pubDate>Wed, 11 Feb 2009 22:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9413258</guid><dc:creator>NikolaiF</dc:creator><slash:comments>18</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9413258.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9413258</wfw:commentRss><description>&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT face="Times New Roman"&gt;Siddharth Jain, one of the devs on our team, wrote a tool using VE3D to place photos in 3D and save this information as a tag in the file itself.&amp;nbsp; In short, you open a picture in the program, fly to roughly where the picture was taken from, click on points in the world and in the photo that you know are the same (for example, the chimney of a house, or the edge of a lake), and the program tries to determine where the picture was taken from.&amp;nbsp; You can then view this picture in the world.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT face="Times New Roman"&gt;We have a &lt;A class="" href="http://www.veteam.members.winisp.net/siddjain/test.jpg" target=_blank mce_href="http://www.veteam.members.winisp.net/siddjain/test.jpg"&gt;picture&lt;/A&gt; that another dev on the team took in Las Vegas for you to play with.&amp;nbsp; This picture already has some rough information in it to help you get started, and it might be a good idea to start with it.&amp;nbsp; There's also an &lt;A class="" href="http://www.veteam.members.winisp.net/siddjain/test_calibrated.jpg" mce_href="http://www.veteam.members.winisp.net/siddjain/test_calibrated.jpg"&gt;image&lt;/A&gt; that has already been placed, so you can see how it might look after you're done (load this picture into the tool instead of the first one to see it).&amp;nbsp; Generally speaking your own photos will probably not have any positioning information in them to begin with, unless you have a very fancy camera, so it is important that you know pretty much where you were when you took it.&amp;nbsp; Also keep in mind that this is a tool and demonstration, not a finished product.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT face="Times New Roman"&gt;Here’s Sid’s writeup of the tool. &amp;nbsp;Enjoy!&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;H2 style="MARGIN: auto 0in"&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;B&gt;&lt;FONT size=5&gt;
&lt;P&gt;Install&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;A class="" href="http://www.veteam.members.winisp.net/siddjain/calibrationv4.zip" mce_href="http://www.veteam.members.winisp.net/siddjain/calibrationv4.zip"&gt;Download the zip &lt;U&gt;file&lt;/U&gt;&lt;/A&gt; and extract its contents to any folder (there is no installer program).&amp;nbsp; As long as all four dll/exe files are in the same directory it should just run by double-clicking the exe file.&lt;/P&gt;&lt;B&gt;&lt;FONT size=5&gt;
&lt;P&gt;Introduction&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;The Microsoft Photo Placement Tool can be used to find the geographic coordinates of the camera that took a photo. In this way a photo can be geolocated in the 3D world. There are seven parameters which need to be determined to geoposition a photo in the 3D world. Six of them are latitude, longitude, altitude, roll, pitch, yaw which define the position and orientation of the camera. The seventh parameter is the focal length of the camera that took the photo. The Photo Placement Tool allows determination of these seven parameters via manually specified correspondences between points in the photo and 3D world. &lt;/P&gt;&lt;B&gt;&lt;FONT size=5&gt;
&lt;P&gt;System Requirements&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;Virtual Earth 3D (VE3D) must be installed on user’s machine.&lt;/P&gt;&lt;B&gt;&lt;FONT size=5&gt;
&lt;P&gt;Usage&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;On running the exe following screen is displayed: &lt;/P&gt;
&lt;P&gt;&lt;IMG title="Startup view" style="WIDTH: 628px; HEIGHT: 483px" height=483 alt="Startup view" src="http://www.veteam.members.winisp.net/siddjain/img01.jpg" width=628 mce_src="http://www.veteam.members.winisp.net/siddjain/img01.jpg"&gt;&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;Step 1: User uploads a photo by clicking on Load Image button&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;Any exif information in the image such as GPS position and focal length is automatically loaded.&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;Step 2: User navigates in VE3D to a position from where s/he can begin adding correspondences&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;An example screen is shown below: &lt;/P&gt;
&lt;P&gt;&lt;IMG title="Smith tower" style="WIDTH: 628px; HEIGHT: 473px" height=473 alt="Smith tower" src="http://www.veteam.members.winisp.net/siddjain/img02.jpg" width=628 mce_src="http://www.veteam.members.winisp.net/siddjain/img02.jpg"&gt;&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;Step 3: User turns on calibration by clicking on Turn ON Calibration button&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;When you are ready to begin adding correspondences, click on the Turn ON Calibration button. This sets the initial camera position and orientation, which is then optimized as correspondences are added.&amp;nbsp; To get back to step 2, click on the Load Image button again.&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;Step 4: User adds point correspondences between photo and 3D world&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;As the user adds correspondences via left mouse click, the tool calibrates the photo in the background. The Preview Result button is automatically enabled after adding 3 or more correspondences. An example is shown below:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Smith correspondences" style="WIDTH: 628px; HEIGHT: 474px" height=474 alt="Smith correspondences" src="http://www.veteam.members.winisp.net/siddjain/img03.jpg" width=628 mce_src="http://www.veteam.members.winisp.net/siddjain/img03.jpg"&gt;&lt;/P&gt;
&lt;P&gt;While in calibration mode it is still possible to navigate in VE3D using the arrow keys, and change the view by holding&amp;nbsp;the shift and ctrl keys while dragging with the mouse. Normal mouse drag is disabled in this mode.&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;Step 5: Preview the result by clicking on Preview button&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;When the RMS reprojection error becomes small (say less than 20 pixels), preview the result by clicking on Preview button. The smaller the error, the better the preview would be.&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;Step 6: Either Accept the result or Revise&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;User can either Accept or Revise. Clicking on &lt;B&gt;Accept&lt;/B&gt; will display the solution and prompt user to save the calibrated photo as a JPEG. The latitude, longitude, altitude, roll, pitch, yaw, and focal length are saved as EXIF tags in the JPEG. Roll, pitch, yaw are relative to the &lt;A href="http://blogs.msdn.com/virtualearth3d/archive/2008/05/06/basic-math.aspx"&gt;&lt;U&gt;local coordinate system&lt;/U&gt;&lt;/A&gt; at (lat,lon,alt). All angles (lat, lon, roll, pitch, yaw) are stored in degrees. Next time the photo is opened in this tool, the camera will automatically fly to that location.&lt;/P&gt;
&lt;P&gt;By clicking on &lt;B&gt;Revise&lt;/B&gt; user can continue to add more correspondences and refine the result. Note that as more correspondences are added, the RMS reprojection error may become better or even worse.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Placed image" style="WIDTH: 628px; HEIGHT: 474px" height=474 alt="Placed image" src="http://www.veteam.members.winisp.net/siddjain/img04.jpg" width=628 mce_src="http://www.veteam.members.winisp.net/siddjain/img04.jpg"&gt;&lt;/P&gt;&lt;B&gt;&lt;FONT size=5&gt;
&lt;P&gt;Miscellaneous Features&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=4&gt;
&lt;P&gt;Use Locate feature to quickly fly to a location e.g. New York&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;Use the Locate button on the Menu to quickly fly to a location e.g. New York&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;Deleting a pushpin&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;Move mouse pointer over pushpin. Its color changes. Press delete key to delete the pushpin. Note that deleting a pushpin also deletes the corresponding pushpin, if any, in the other view.&lt;/P&gt;&lt;B&gt;&lt;FONT size=4&gt;
&lt;P&gt;The Settings Window&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;By clicking on the Settings button, user can control the parameters to optimize. The user would generally not need to change the default settings. However, for completeness the options provided by this window are described here. If the altitude option is unchecked, the tool will not optimize the altitude of the camera. For example, if you took a photo from the ground and have positioned the Virtual Earth 3D camera on the ground, you may want to uncheck the altitude button as the correct altitude has already been set by you. Similarly, if the focal length option is left unchecked, the tool will not optimize the focal length of the camera. You may want to do this, for example, when you are sure that the EXIF focal length is the correct focal length.&lt;/P&gt;
&lt;P&gt;Technical Note: user may find that when a calibrated photo is opened, the camera does not fly to the exact calibrated location. Usually when this happens the camera is positioned too high.&amp;nbsp; This is because the background data in the area, specifically the DEM, is not yet fully loaded, and the program wasn’t able to get to the right spot.&amp;nbsp; Loading the image again should correct the problem.&lt;/P&gt;&lt;B&gt;&lt;FONT size=5&gt;
&lt;P&gt;Acknowledgements&lt;/P&gt;&lt;/B&gt;&lt;/FONT&gt;
&lt;P&gt;Bill Chen in VE3D Research originally developed a photo geopositioning tool.&amp;nbsp; His work can be found &lt;A class="" href="http://research.microsoft.com/apps/pubs/default.aspx?id=70622" target=_blank mce_href="http://research.microsoft.com/apps/pubs/default.aspx?id=70622"&gt;here&lt;/A&gt;.&amp;nbsp; The present tool has been developed from scratch and is 100% managed code.&amp;nbsp; I would like to acknowledge Nikolai Faaland, David Buerer, Bret Mulvey for helping me out on this project. David Buerer provided the Hilton Las Vegas image used in this writeup.&amp;nbsp; Jonathan Doughi provided the Smith Tower image used in the writeup.&lt;/P&gt;&lt;FONT face=Arial size=2&gt;&lt;FONT face=Arial size=2&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-WEIGHT: normal; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;o:p&gt;&lt;IMG title="Placed test image" style="WIDTH: 640px; HEIGHT: 480px" height=480 alt="Placed test image" src="http://www.veteam.members.winisp.net/siddjain/screenshot.jpg" width=640 mce_src="http://www.veteam.members.winisp.net/siddjain/screenshot.jpg"&gt;&lt;/H2&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9413258" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/photos/default.aspx">photos</category></item><item><title>Documentation!</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/01/25/documentation.aspx</link><pubDate>Sun, 25 Jan 2009 22:21:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9375207</guid><dc:creator>NikolaiF</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9375207.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9375207</wfw:commentRss><description>&lt;P&gt;Due to the outstanding efforts of our team's tech writer, we've produced some lovely help documentation and are able to share it with you, the intrepid VE3D dev community.&amp;nbsp; Why intrepid?&amp;nbsp; Well, at least some of you coded for some time and did some impressive work without even the intellisense files!&amp;nbsp; Even I think that takes dedication (and I'm not really being self-deprecating or anything, any signficant codebase is hard to work with when all you have is function names).&amp;nbsp; Lots of folks have asked for some more standard documentation files, and now we're able to deliver.&lt;/P&gt;
&lt;P&gt;&lt;A class="" title="Virtual Earth 3D Documentation" href="http://www.veteam.members.winisp.net/Spaceland/blog/VirtualEarth3DAPI.zip" mce_href="http://www.veteam.members.winisp.net/Spaceland/blog/VirtualEarth3DAPI.zip"&gt;Here they are!&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;As always, let us know if you have any trouble or suggestions.&amp;nbsp; Some of the usual caveats apply.&amp;nbsp; Both the API and documentation are still in beta form and are not officially supported.&amp;nbsp; That said, still make sure to let us know about what you want to do, issues you encounter, etc, and we'll do our best to help you out.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Update:&lt;/STRONG&gt;&amp;nbsp; the link now points to a zip file, which should bypass the "blocked" issue with the chm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9375207" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Documentation/default.aspx">Documentation</category></item><item><title>Busy busy busy...</title><link>http://blogs.msdn.com/virtualearth3d/archive/2009/01/11/busy-busy-busy.aspx</link><pubDate>Sun, 11 Jan 2009 22:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9306239</guid><dc:creator>NikolaiF</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9306239.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9306239</wfw:commentRss><description>&lt;P&gt;I haven't posted in quite awhile, as development on the next version has been pretty intense.&amp;nbsp; However, we are still monitoring the blog feedback and comments, so don't feel as if VE3D or the blog is being neglected.&amp;nbsp; When I have time I will be getting back to writing.&lt;/P&gt;
&lt;P&gt;Happy New Year!&lt;/P&gt;
&lt;P&gt;Oh, one thing:&amp;nbsp; apparently in the Win7 Beta (which I just installed on my TouchSmart at home... it is so far very stable and complete and I have been quite happy with it) there is a permissions issue with the LocalLow directory that may cause VE3D to encounter an error on startup.&amp;nbsp; This&amp;nbsp;is in&amp;nbsp;IE8 in Protected Mode.&amp;nbsp; There is a workaround.&amp;nbsp; From an elevated prompt, run this command:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Icacls c:\users\&amp;lt;username&amp;gt;\appdata\locallow\microsoft /setintegritylevel low&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT face=Calibri size=3&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="COLOR: #1f497d"&gt;&lt;FONT color=#000000&gt;We are of course working with the Win7 team to make sure there are no problems when our respective products reach release.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9306239" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Information Pop-ups in WinForms</title><link>http://blogs.msdn.com/virtualearth3d/archive/2008/11/24/information-pop-ups-in-winforms.aspx</link><pubDate>Tue, 25 Nov 2008 00:47:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9139174</guid><dc:creator>NikolaiF</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9139174.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9139174</wfw:commentRss><description>&lt;P&gt;We've had several questions about how to do a pop-up form in WinForms, similar to the one on the website.&amp;nbsp; The website pop-up is implemented entirely within the browser, using an IFrame.&amp;nbsp; Therefore, the functionality does not exist by default in the managed code alone.&amp;nbsp; However, the events you need are provided, and creating your own pop-up is not difficult.&lt;/P&gt;
&lt;P&gt;&lt;IMG title="Html rendered pop-up" style="WIDTH: 603px; HEIGHT: 510px" height=510 alt="Html rendered pop-up" src="http://www.veteam.members.winisp.net/Spaceland/blog/html.jpg" width=603 mce_src="http://www.veteam.members.winisp.net/Spaceland/blog/html.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The event you need is EngineEvents.OnHover, accessed via the CommunicationManager.&amp;nbsp; It will fire when the mouse hovers over any GeometryManager object that has hit detection on.&amp;nbsp; The event arguments (CommunicationParameters) tell you which item was hovered and where on the screen it is.&amp;nbsp; I used the Tag property on WorldGeometry to hold the name and description I wish to display, so when I get the hover event I retrieve the item back again and pass the tag to my Popup form.&lt;/P&gt;
&lt;P&gt;The next step is to render the form.&amp;nbsp; There are two behaviors we want:&amp;nbsp; first, the auto-closing.&amp;nbsp; This was pretty simple to do using a Timer.&amp;nbsp; When you get an OnHoverEnd (another EngineEvent), start a timer.&amp;nbsp; If the mouse moves into the popup, stop the timer.&amp;nbsp; When the mouse leaves it, start the timer again.&amp;nbsp; The second behavior is rendering HTML.&amp;nbsp; This was trivial on the website, but a little tricker in winforms.&amp;nbsp; Fortunately Windows ships with mshtml, which has a ready-made browser window.&amp;nbsp; I based my work on &lt;A class="" href="http://blog.monstuff.com/archives/000052.html" target=_blank mce_href="http://blog.monstuff.com/archives/000052.html"&gt;this&lt;/A&gt;, and had it working in just a few minutes.&lt;/P&gt;
&lt;P&gt;I'm certain all of this could be done more attractively and elegantly, but it should get you started.&amp;nbsp; I updated the main samples package to have the new HtmlForm project.&amp;nbsp; Just grab the zip file again and pull out that project directory.&lt;/P&gt;
&lt;P&gt;&lt;A class="" href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx" mce_href="http://blogs.msdn.com/virtualearth3d/archive/2008/09/25/current-samples.aspx"&gt;Get the code!&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;P.S.&amp;nbsp; If you want to open an ERO from a plug-in without having to go through the JS API first, do this:&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;CommunicationParameterSet set = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; CommunicationParameterSet(8);&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"layerId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;BR&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"pushpinId"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;BR&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"rX1"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, p.X);&lt;BR&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"rY1"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, p.Y);&lt;BR&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"rX2"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, p.X);&lt;BR&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"rY2"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, p.Y);&lt;BR&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"header"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, name);&lt;BR&gt;set.Add(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"content"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, desc == &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;null&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ? &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Empty : desc);&lt;BR&gt;Host.CommunicationManager.FireEvent(EngineEvents.Group, EngineEvents.OnHover, set);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;p is the location on the screen you want it, name is the title, and desc is your html content.&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9139174" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Code/default.aspx">Code</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Windows+Forms/default.aspx">Windows Forms</category></item><item><title>VE3D on a Mac</title><link>http://blogs.msdn.com/virtualearth3d/archive/2008/11/23/ve3d-on-a-mac.aspx</link><pubDate>Sun, 23 Nov 2008 21:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9134772</guid><dc:creator>NikolaiF</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/virtualearth3d/comments/9134772.aspx</comments><wfw:commentRss>http://blogs.msdn.com/virtualearth3d/commentrss.aspx?PostID=9134772</wfw:commentRss><description>&lt;P&gt;Parallels, which is a program that allows running Windows software on a Mac, has recently released version 4, which has support&amp;nbsp;for DirectX 9.0.&amp;nbsp; This means that Mac users can now see VE3D in all its glory.&amp;nbsp; Well, most of it anyway.&amp;nbsp; I don't have a Mac in my office to test with, but it kind of sounds from the &lt;A class="" href="http://www.parallels.com/products/desktop/features/3d/" mce_href="http://www.parallels.com/products/desktop/features/3d/"&gt;description&lt;/A&gt; like it emulates DX in software.&amp;nbsp; If I'm wrong about that someone please correct me.&amp;nbsp; It also only supports up to pixel shader 2.0, which means that a few of the advanced features like weather will be off by default (you can turn it back on though if you go into the options page and click the local weather checkbox).&amp;nbsp; Again, I'm not able to test, but I see no reason why plug-ins or apps written with VE3D wouldn't work as well.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.digitalgeography.co.uk/archives/2008/11/parallels-4-brings-live-maps-3d-to-the-mac/"&gt;http://www.digitalgeography.co.uk/archives/2008/11/parallels-4-brings-live-maps-3d-to-the-mac/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I also encourage any Mac users out there to check out &lt;A class="" href="http://www.worldwidetelescope.org/Home.aspx" mce_href="http://www.worldwidetelescope.org/Home.aspx"&gt;World Wide Telescope&lt;/A&gt;, it is well worth it.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9134772" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/VE3D/default.aspx">VE3D</category><category domain="http://blogs.msdn.com/virtualearth3d/archive/tags/Mac/default.aspx">Mac</category></item></channel></rss>