<?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>WPF3D Team Blog : 3.5</title><link>http://blogs.msdn.com/wpf3d/archive/tags/3.5/default.aspx</link><description>Tags: 3.5</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>.NET 3.5 SP1 Graphics @ Channel 9</title><link>http://blogs.msdn.com/wpf3d/archive/2008/05/13/net-3-5-sp1-graphics-channel-9.aspx</link><pubDate>Wed, 14 May 2008 02:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8502219</guid><dc:creator>wpf3d</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/wpf3d/comments/8502219.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wpf3d/commentrss.aspx?PostID=8502219</wfw:commentRss><description>&lt;P&gt;Sorry for the lack of updates, but we've been pretty busy. On what, you may ask? Our PM, David Teitlebaum, just &lt;A class="" href="http://channel9.msdn.com/Showpost.aspx?postid=403854" mce_href="http://channel9.msdn.com/Showpost.aspx?postid=403854"&gt;did a video on Channel 9&lt;/A&gt; showing off the new features. He starts by covering interactive 2D on 3D and improved layered window support, both of which were in 3.5, and he finishes with the customizable ImageEffects, the much improved WriteableBitmap, BitmapScalingMode.NearestNeighbor, and D3DImage.&lt;/P&gt;
&lt;P&gt;-- Jordan&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8502219" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3D/default.aspx">3D</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3.5/default.aspx">3.5</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3.5+SP1/default.aspx">3.5 SP1</category></item><item><title>.NET 3.5 has been released!</title><link>http://blogs.msdn.com/wpf3d/archive/2007/11/20/net-3-5-has-been-released.aspx</link><pubDate>Wed, 21 Nov 2007 01:42:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6445866</guid><dc:creator>wpf3d</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wpf3d/comments/6445866.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wpf3d/commentrss.aspx?PostID=6445866</wfw:commentRss><description>&lt;P&gt;Yesterday, .NET Framework 3.5 and Visual Studio 2008 went live on MSDN. You can see what's new in both &lt;A class="" href="http://windowsclient.net/vstudio2008.aspx" mce_href="http://windowsclient.net/vstudio2008.aspx"&gt;here&lt;/A&gt;&amp;nbsp;and download them &lt;A class="" href="http://windowsclient.net/edownloads.aspx" mce_href="http://windowsclient.net/edownloads.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Since this is a graphics blog, here are the graphics-specific changes of note in 3.5:&lt;/P&gt;&lt;STRONG&gt;New Graphics Features&lt;/STRONG&gt; 
&lt;UL&gt;
&lt;LI&gt;UIElement3D 
&lt;LI&gt;Interactive 2D on 3D: Viewport2DVisual3D 
&lt;LI&gt;Transformation services on Visual3D 
&lt;LI&gt;BitmapSource.DecodeFailed event 
&lt;LI&gt;HwndTarget.RenderMode to enable software rendering per window 
&lt;LI&gt;BitmapImage.UriCachePolicy and BitmapDecoder.Create(..., RequestCachePolicy) to control web request caching&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Notable Graphics&amp;nbsp;Performance Improvements&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Less animation jitter&lt;/LI&gt;
&lt;LI&gt;RenderTargetBitmap memory leaks plugged&lt;/LI&gt;
&lt;LI&gt;Big layered window improvements when combined with &lt;A class="" href="http://support.microsoft.com/kb/938660" mce_href="http://support.microsoft.com/kb/938660"&gt;this&lt;/A&gt; on Vista or &lt;A class="" href="http://support.microsoft.com/kb/937106/" mce_href="http://support.microsoft.com/kb/937106/"&gt;this&lt;/A&gt; on XP&lt;/LI&gt;
&lt;LI&gt;MeshGeometry3D hit testing up to 50% faster in common scenarios&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Notable Graphics&amp;nbsp;Bug Fixes&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Numerous layered window problems resolved&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Most of these changes will appear in 3.0 SP1 as well.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;-- Jordan&lt;/P&gt;&lt;/STRONG&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6445866" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3D/default.aspx">3D</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3.5/default.aspx">3.5</category></item><item><title>Subclassing UIElement3D</title><link>http://blogs.msdn.com/wpf3d/archive/2007/09/05/subclassing-uielement3d.aspx</link><pubDate>Thu, 06 Sep 2007 04:20:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4775055</guid><dc:creator>wpf3d</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/wpf3d/comments/4775055.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wpf3d/commentrss.aspx?PostID=4775055</wfw:commentRss><description>&lt;P&gt;Subclassing from UIElement3D to create your own elements that respond to input, focus and eventing is simple to do in 3.5.&amp;nbsp; In this example we'll create a Sphere class which derives from UIElement3D and will show off some new features in the process.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Deriving from UIElement3D&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;The first step is to derive from UIElement3D:&lt;/P&gt;&lt;PRE class=code&gt;    &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt; : &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;UIElement3D
&lt;/SPAN&gt;    {&lt;/PRE&gt;&lt;PRE class=code&gt;    }&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Even though UIElement3D is declared abstract, there aren't any abstract methods you need to override.&amp;nbsp; The above will compile -&amp;nbsp;it just won't do anything interesting.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Rendering a Sphere&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Although the above lets us derive from UIElement3D, we still don't have anything rendering to look like a sphere.&amp;nbsp; Before going in to how to render the sphere, first we're going to want to create a couple of dependency properties to control how the sphere looks.&amp;nbsp; These will be PhiDiv and ThetaDiv, to represent the number of slices to make in the horizontal and vertical directions respectively, as well as Radius, to represent the radius of the sphere.&amp;nbsp; The code for these is below:&lt;/P&gt;&lt;PRE class=code&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;        ///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; The number of vertical slices to make on the sphere
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;readonly&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt; ThetaDivProperty =
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt;.Register(&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"ThetaDiv"&lt;/SPAN&gt;,
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;PropertyMetadata&lt;/SPAN&gt;(15, ThetaDivPropertyChanged));

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;void&lt;/SPAN&gt; ThetaDivPropertyChanged(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyObject&lt;/SPAN&gt; d, &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyPropertyChangedEventArgs&lt;/SPAN&gt; e)
        {
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt; s = (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;)d;
            s.InvalidateModel();
        }

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt; ThetaDiv
        {
            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get
&lt;/SPAN&gt;            {
                &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;return&lt;/SPAN&gt; (&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;)GetValue(ThetaDivProperty);
            }

            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set
&lt;/SPAN&gt;            {
                SetValue(ThetaDivProperty, &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;value&lt;/SPAN&gt;);
            }
        }

        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; The number of horizontal slices to make on the sphere
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;readonly&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt; PhiDivProperty =
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt;.Register(&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"PhiDiv"&lt;/SPAN&gt;,
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;PropertyMetadata&lt;/SPAN&gt;(15, PhiDivPropertyChanged));

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;void&lt;/SPAN&gt; PhiDivPropertyChanged(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyObject&lt;/SPAN&gt; d, &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyPropertyChangedEventArgs&lt;/SPAN&gt; e)
        {
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt; s = (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;)d;
            s.InvalidateModel();
        }

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt; PhiDiv
        {
            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get
&lt;/SPAN&gt;            {
                &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;return&lt;/SPAN&gt; (&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;int&lt;/SPAN&gt;)GetValue(PhiDivProperty);
            }

            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set
&lt;/SPAN&gt;            {
                SetValue(PhiDivProperty, &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;value&lt;/SPAN&gt;);
            }
        }

        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; The radius of the sphere
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;readonly&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt; RadiusProperty =
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt;.Register(&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"Radius"&lt;/SPAN&gt;,
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;double&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;PropertyMetadata&lt;/SPAN&gt;(1.0, RadiusPropertyChanged));

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;void&lt;/SPAN&gt; RadiusPropertyChanged(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyObject&lt;/SPAN&gt; d, &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyPropertyChangedEventArgs&lt;/SPAN&gt; e)
        {
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt; s = (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;)d;
            s.InvalidateModel();
        }

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;double&lt;/SPAN&gt; Radius
        {
            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get
&lt;/SPAN&gt;            {
                &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;return&lt;/SPAN&gt; (&lt;SPAN style="COLOR: rgb(0,0,255)"&gt;double&lt;/SPAN&gt;)GetValue(RadiusProperty);
            }

            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set
&lt;/SPAN&gt;            {
                SetValue(RadiusProperty, &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;value&lt;/SPAN&gt;);
            }
        }&lt;/PRE&gt;
&lt;P&gt;&lt;STRONG&gt;InvalidateModel, OnUpdateModel and &lt;STRONG&gt;Visual3DModel&lt;/STRONG&gt;&lt;/STRONG&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The above should look like standard C# WPF code to create a few dependency properties, but the one new method that should look unfamiliar is the InvalidateModel call made whenever any of the above dependency properties changes.&amp;nbsp;InvalidateModel is similar to the InvalidateVisual method that exists for the 2D UIElement.&amp;nbsp; Calling InvalidateModel indicates that the 3D model representing the UIElement3D has changed and should be updated.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In&amp;nbsp;response to InvalidateModel, OnUpdateModel will be called to update the 3D model that represents the object. In this way, you can&amp;nbsp;make multiple changes to properties that affect the visual appearance of the UIElement3D and only make one final change to the model, rather than having to regenerate it each time a change is made.&amp;nbsp; For instance, say changes are made to ThetaDiv, PhiDiv, and Radius above.&amp;nbsp;&amp;nbsp;Rather than having to regenerate the model each time, InvalidateModel can be called each time a property changes, and then all of the changes can be dealt with when OnUpdateModel is called. Of course,&amp;nbsp;the model can also be changed in other places, but this provides one standard option to make the change.&lt;/P&gt;
&lt;P&gt;The last thing that hasn't been discussed is how to actually change the model.&amp;nbsp;In 3.5, Visual3D now exposes a protected CLR property Visual3DModel which represents the 3D model for the object.&amp;nbsp; This is the 3D equivalent to the render data of a 2D Visual.&amp;nbsp; To set what the visual representation for the Visual3D&amp;nbsp;is&amp;nbsp;then, it's necessary to set this property.&amp;nbsp; For instance, ModelUIElement3D's&amp;nbsp;Model property takes care of setting this. There is one subtle point about setting this property.&amp;nbsp; Just like render data, setting this property won't set up the links necessary for things such as data bindings to work.&amp;nbsp; To make this happen, you'll also want to have a dependency property for the&amp;nbsp;model itself.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The code for InvalidateModel is shown below, as well as the Model dependency property:&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class=code&gt;        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;override&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;void&lt;/SPAN&gt; OnUpdateModel()
        {
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;GeometryModel3D&lt;/SPAN&gt; model = &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;GeometryModel3D&lt;/SPAN&gt;();

            model.Geometry = Tessellate(ThetaDiv, PhiDiv, Radius);
            model.Material = &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DiffuseMaterial&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Brushes&lt;/SPAN&gt;.Blue);

            Model = model;
        }

        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; The Model property for the sphere
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(128,128,128)"&gt;///&lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(0,128,0)"&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: rgb(128,128,128)"&gt;&amp;lt;/summary&amp;gt;
&lt;/SPAN&gt;        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;readonly&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt; ModelProperty =
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyProperty&lt;/SPAN&gt;.Register(&lt;SPAN style="COLOR: rgb(163,21,21)"&gt;"Model"&lt;/SPAN&gt;,
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Model3D&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;typeof&lt;/SPAN&gt;(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;),
                                        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;PropertyMetadata&lt;/SPAN&gt;(ModelPropertyChanged));

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;static&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;void&lt;/SPAN&gt; ModelPropertyChanged(&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyObject&lt;/SPAN&gt; d, &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;DependencyPropertyChangedEventArgs&lt;/SPAN&gt; e)
        {
            &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt; s = (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Sphere&lt;/SPAN&gt;)d;
            s.Visual3DModel = (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Model3D&lt;/SPAN&gt;)e.NewValue;
        }

        &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;private&lt;/SPAN&gt; &lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Model3D&lt;/SPAN&gt; Model
        {
            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;get
&lt;/SPAN&gt;            {
                &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;return&lt;/SPAN&gt; (&lt;SPAN style="COLOR: rgb(43,145,175)"&gt;Model3D&lt;/SPAN&gt;)GetValue(ModelProperty);
            }

            &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;set
&lt;/SPAN&gt;            {
                SetValue(ModelProperty, &lt;SPAN style="COLOR: rgb(0,0,255)"&gt;value&lt;/SPAN&gt;);
            }
        }&lt;/PRE&gt;&lt;A href="http://11011.net/software/vspaste" mce_href="http://11011.net/software/vspaste"&gt;&lt;/A&gt;
&lt;P&gt;Attached to this post you'll find a simple example app which has the full code to the above Sphere class.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4775055" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/wpf3d/attachment/4775055.ashx" length="60911" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3D/default.aspx">3D</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/Geometry/default.aspx">Geometry</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/UIElement3D/default.aspx">UIElement3D</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3.5/default.aspx">3.5</category></item><item><title>What’s new in WPF 3.5</title><link>http://blogs.msdn.com/wpf3d/archive/2007/07/30/what-s-new-in-wpf-3-5.aspx</link><pubDate>Tue, 31 Jul 2007 03:24:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4139200</guid><dc:creator>wpf3d</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/wpf3d/comments/4139200.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wpf3d/commentrss.aspx?PostID=4139200</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;With the release of WPF 3.5 beta 2 (download here: &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D2F74873-C796-4E60-91C8-F0EF809B09EE&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D2F74873-C796-4E60-91C8-F0EF809B09EE&amp;amp;displaylang=en"&gt;&lt;FONT face=Calibri size=3&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=D2F74873-C796-4E60-91C8-F0EF809B09EE&amp;amp;displaylang=en&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=3&gt;), we’ve added some exciting new features to WPF 3D.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;At a very high level these can be grouped in to two main additions: UIElement3D and Viewport2DVisual3D.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Over the next couple of weeks we’ll be adding examples and tips and tricks to the blog on these new additions, but for now we’ll start with a quick overview of what both of these provide.&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT face=Cambria color=#4f81bd size=4&gt;UIElement3D&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In the 2D world, UIElement adds layout, input, focus and eventing on to Visual.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;UIElement3D brings these same things (except no layout) to 3D.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What this means is that the standard events and means of adding event handlers that you’re used to with UIElements now applies in the 3D world with UIElement3D.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;UIElement3D itself is an abstract class that derives from Visual3D.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;To make it useable out of the box without having to derive from UIElement3D yourself, we’ve provided two new classes:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ModelUIElement3D and ContainerUIElement3D.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;ContainerUIElement3D&lt;/B&gt; does exactly what its name says.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is a container for other Visual3Ds.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It has one main property, Children, which is used to add and remove 3D children.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The ContainerUIElement3D doesn’t have a visual representation itself, but rather is just a collection of other 3D objects.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;ModelUIElement3D&lt;/B&gt; has one property, Model, which is the Model3D that should be displayed to represent the UIElement3D.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It has no children itself, and in some ways you can think of ModelUIElement3D like a Shape in the 2D world.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;If you’re familiar with ModelVisual3D, then ContainerUIElement3D and ModelUIElement3D should look very familiar. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;The difference is we’ve gone and split the functionality of ModelVisual3D (i.e. a model and children) in to two separate classes, one with a model and the other with children.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;With these then, making use of layout, focus and eventing is very easy.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance, say you want to create a 3D object that responds to mouse events, you can just do:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&lt;FONT face=Calibri size=3&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;ModelUIElement3D&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;MouseDown&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;OnMouseDown&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;/&amp;gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;And then in the code behind have:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;protected&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; OnMouseDown(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR: #2b91af"&gt;MouseButtonEventArgs&lt;/SPAN&gt; e)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;Console&lt;/SPAN&gt;.WriteLine(&lt;SPAN style="COLOR: #a31515"&gt;"Hello"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;If you have experience adding event handlers in the 2D world, then this should look immediately familiar.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;In fact it’s exactly the same, and UIElement3D is going to handle the same routed events that a UIElement deals with.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;With the addition of UIElement3D you now get all the great functionality that UIElement provided to 2D, but now in the 3D world!&lt;/FONT&gt;&lt;/P&gt;
&lt;H2 style="MARGIN: 10pt 0in 0pt"&gt;&lt;FONT face=Cambria color=#4f81bd size=4&gt;Viewport2DVisual3D&lt;/FONT&gt;&lt;/H2&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The second main addition is Viewport2DVisual3D which enables you to put interactive 2D on 3D in WPF.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If you’ve used the 3DTools work that was released shortly after the 3.0 release of WPF, Viewport2DVisual3D will look very familiar to you.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;With 3.5 though we’ve fully integrated 2D on 3D in to WPF rather than requiring a separate DLL to have this feature.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The 2D and 3D trees are also integrated now, so if you walk up to a 2D visual on 3D and ask it for its parent, it will tell you the 3D object it is on.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Viewport2DVisual3D derives from Visual3D and has three main dependency properties: Visual, Geometry and Material.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Visual&lt;/B&gt; – This is the 2D Visual that will be placed on the 3D object. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Geometry&lt;/B&gt; – The 3D geometry for the Viewport2DVisual3D&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Material&lt;/B&gt; – This describes the look of the 3D object.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;You can use any material you want.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;For the material that you want to have the Visual be placed on, you simply need to set the Viewport2DVisual3D.IsVisualHostMaterial attached property to true.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;Below is a XAML example using Viewport2DVisual3D&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Viewport2DVisual3D&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Geometry&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;{StaticResource plane}&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Viewport2DVisual3D.Material&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;DiffuseMaterial&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Viewport2DVisual3D.IsVisualHostMaterial&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;"&lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR: blue"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Viewport2DVisual3D.Material&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;3.5!&lt;SPAN style="COLOR: blue"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="COLOR: #a31515"&gt;Button&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: #a31515; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Viewport2DVisual3D&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;The above is a very quick overview of what is added in 3.5, so expect more posts on more specific details as well as some code samples on how to use it.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 10pt"&gt;&lt;FONT face=Calibri size=3&gt;-Kurt Berglund&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4139200" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3D/default.aspx">3D</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/Viewport2DVisual3D/default.aspx">Viewport2DVisual3D</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/UIElement3D/default.aspx">UIElement3D</category><category domain="http://blogs.msdn.com/wpf3d/archive/tags/3.5/default.aspx">3.5</category></item></channel></rss>