public void setData( List<PieElement> data ) { if( Children.Count > 0 ) Children.RemoveAt(0); Data = data; Sum = 0d; foreach (PieElement element in Data) Sum += element.value; Model3DGroup group = new Model3DGroup(); group.Children.Add( new AmbientLight( Color.FromRgb( 128, 128, 128) ) ); group.Children.Add( new DirectionalLight( Colors.White, new Vector3D( 1, 1, 1 ) ) ); PiePieces = new List<PiePiece>(); double cCurrent = 0; int idx = 0; foreach (PieElement element in Data) { PiePiece piece = new PiePiece(cCurrent, (cCurrent += element.value / Sum * PI2), ColorList[idx%ColorList.Count]); PiePieces.Add( piece ); group.Children.Add( piece.Geometry ); idx++; } ModelVisual3D visual = new ModelVisual3D(); visual.Content = group; PerspectiveCamera camera = new PerspectiveCamera(); camera.FarPlaneDistance = 30; camera.NearPlaneDistance = 1; camera.FieldOfView = 90; camera.Position = new Point3D (0, -6.5, -4.5 ); camera.LookDirection = new Vector3D( 0, 7.5, 5.5 ); camera.UpDirection = new Vector3D( 0, 1, 0 ); Children.Add( visual ); Camera = camera; }
private void onMouseLeave( object obj, MouseEventArgs e ) { if (MovePiece != null) { MovePiece.onRollOut(); MovePiece = null; } }
private HitTestResultBehavior onGeometryClickHit( System.Windows.Media.HitTestResult result ) { RayMeshGeometry3DHitTestResult hit = result as RayMeshGeometry3DHitTestResult; if (hit != null && hit.DistanceToRayOrigin < HitDistanceClick && hit.ModelHit is GeometryModel3D) { GeometryModel3D model = hit.ModelHit as GeometryModel3D; foreach( PiePiece piece in PiePieces ) { if( piece.Geometry == model ) { HitDistanceClick = hit.DistanceToRayOrigin; ClickPiece = piece; break; } } } return HitTestResultBehavior.Continue; }
private void onMouseDown( object obj, MouseEventArgs e ) { Point pos = e.GetPosition( this ); PointHitTestParameters pointparams = new PointHitTestParameters( pos ); HitDistanceClick = double.MaxValue; PiePiece lastClickPiece = ClickPiece; ClickPiece = null; VisualTreeHelper.HitTest( this, null, onGeometryClickHit, pointparams ); if( ClickPiece != lastClickPiece ) { if (ClickPiece != null) ClickPiece.Select(true); if( lastClickPiece != null ) lastClickPiece.Select( false ); //Select.cEnd } }
public void SelectPiece(int id) { if (MovePiece != null) MovePiece.Select(false); if (id != -1 && PiePieces.Count > id && PiePieces[id] != null) PiePieces[id].Select(true); MovePiece = id == -1 ? null : PiePieces[id]; }
private void onMouseMove( object obj, MouseEventArgs e ) { Point pos = e.GetPosition( this ); PointHitTestParameters pointparams = new PointHitTestParameters( pos ); HitDistanceMove = double.MaxValue; PiePiece lastMovePiece = MovePiece; MovePiece = null; VisualTreeHelper.HitTest( this, null, onGeometryMoveHit, pointparams ); if( MovePiece != lastMovePiece ) { if( MovePiece != null ) MovePiece.onRollOver(); if (lastMovePiece != null) lastMovePiece.onRollOut(); } }