4 pagine in totale: <<Indietro 1 2 3 [4]
Nel seguente esempio creiamo una semplice scena composta di nove cubi disposti su tre file, cliccando su uno qualsiasi dei cubi questo cambia colore e tutti assieme compiranno un giro di 360 gradi.

<Window x:Class="MyInputFocusEventing3DSupport.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<Viewport3D x:Name="MyViewPort">
<Viewport3D.Resources>
<MeshGeometry3D x:Key="cube_mesh"
Positions=""
TriangleIndices="omesse"
TextureCoordinates="omesse"
/>
<!--materiali-->
<DiffuseMaterial x:Key="tomato_material" Brush="Tomato" />
<DiffuseMaterial x:Key="darkSeaGreen_material" Brush="DarkSeaGreen"/>
</Viewport3D.Resources>
<!--camera-->
<Viewport3D.Camera>
<PerspectiveCamera Position="-136.0670166,-706.3000488,141.453949"
LookDirection="212.421463012695,712.548655033112,1.52587890625E-05"
UpDirection="0,0,1"
NearPlaneDistance="0.1"
FarPlaneDistance="10000"
FieldOfView="53.3333320617676" />
</Viewport3D.Camera>
<!--contenitore dei 9 cubi-->
<ContainerUIElement3D MouseDown="ContainerUIElement3D_MouseDown" >
<ContainerUIElement3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D x:Name="myRotation" Axis="0, 0, 1" Angle="0" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</ContainerUIElement3D.Transform>
<!--Prima fila-->
<ModelUIElement3D >
<GeometryModel3D Geometry="{StaticResource cube_mesh}" Material="{StaticResource tomato_material}">
</GeometryModel3D>
</ModelUIElement3D >
<ModelUIElement3D >
<GeometryModel3D Geometry="{StaticResource cube_mesh}" Material="{StaticResource tomato_material}">
<GeometryModel3D.Transform>
<TranslateTransform3D OffsetX="100"/>
</GeometryModel3D.Transform>
</GeometryModel3D>
</ModelUIElement3D >
<ModelUIElement3D >
<GeometryModel3D Geometry="{StaticResource cube_mesh}" Material="{StaticResource tomato_material}">
<GeometryModel3D.Transform>
<TranslateTransform3D OffsetX="200"/>
</GeometryModel3D.Transform>
</GeometryModel3D>
</ModelUIElement3D >
<!--fila 2 e terza fila omessa-->
</ContainerUIElement3D>
<!--luci-->
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<PointLight Color="#FFFFFFFF" Position="-274.548034667969,-223.444854736328,-393.385620117188" Range="Infinity" />
<PointLight Color="#FFFFFFFF" Position="71.2213745117188,-498.961975097656,341.957885742188" Range="Infinity" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Grid>
</Window>
Utilizziamo l'oggetto ContainerUIElement3D per raggruppare i nove ModelUIElement3D e poterli animare in un sol colpo. Tale oggetto non ha nessuna rappresentazione grafica, ma fornisce semplicemente i servizi necessari a catturare l'input dell'utente.
Sfruttando questa caratteristica, comune a ogni oggetto derivato da UIElement3D, impostiamo un handler per l'evento MouseDown:
<ContainerUIElement3D MouseDown="ContainerUIElement3D_MouseDown" >Per prima cosa avviamo l'esecuzione dell'animazione che ruota contemporaneamente tutti e nove i cubi, infine recuperiamo l'oggetto che ha generato l'evento mediante la proprietà OriginalSource dell'oggetto MouseButtonEventArgs e impostiamo il nuovo materiale.
private void ContainerUIElement3D_MouseDown(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
DoubleAnimation doubleAnimation = new DoubleAnimation(0,360,new Duration(TimeSpan.FromSeconds(0.5)));
myRotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, doubleAnimation);
if (((DiffuseMaterial)((GeometryModel3D)((ModelUIElement3D)e.OriginalSource).Model).Material).Brush == Brushes.Tomato)
{
((GeometryModel3D)((ModelUIElement3D)e.OriginalSource).Model).Material = _darkSeaGreenMaterial;
}
else
{
((GeometryModel3D)((ModelUIElement3D)e.OriginalSource).Model).Material = _matTomato;
}
}
Conclusioni
Con il rilascio del nuovo Framework non sono state apportate modifiche eclatanti a WPF, ma solo piccole aggiunte che ne migliorano le precedenti funzionalità e ne estendono i campi di utilizzo.
Le nuove caratteristiche in ambito 3D rappresentano di fatto le aggiunte sicuramente le più apprezzate e importanti, per la spinta che potrebbero dare nella creazione di interfacce utente realmente tridimensionali.
Lo speciale completo su Visual Studio 2008, Windows Server 2008 e SQL Server 2008
- .NET Framework 3.5 e Visual Studio 2008: cosa c'è di nuovo di Riccardo Golia
- Le novità di C# 3.0 e Visual Basic 9.0 attraverso LINQ di Stefano Mostarda
- Introduzione a LINQ, LINQ to XML, Object e DataSet di Stefano Mostarda

- Introduzione ad ASP.NET 3.5: novità e caratteristiche di Daniele Bochicchio
- Introduzione ad ASP.NET 3.5 di Daniele Bochicchio

- Le novità di Communication e Workflow Foundation e la loro cooperazione nel .NET Framework 3.5 di Cristian Civera
- Windows Presentation Foundation 3.5: 3D interattivo e le altre novità del framework di Marco Leoncini
- Utilizzare Visual Studio 2008 per semplificare lo sviluppo con LINQ to SQL di Andrea Zani
- Uno sguardo a LINQ to SQL di Stefano Mostarda

- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti di Daniele Bochicchio, Christian Paparelli
- Gestire transazioni miste con NTFS in Windows Server 2008 di Ugo Lattanzi
- LINQ oltre SQL e XML: creare un provider per l'integrazione con Live Search di Alessandro Catorcini
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008 di Luca Bianchi
4 pagine in totale: <<Indietro 1 2 3 [4]
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
- Pagina 4
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà

Stampa
Download


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!