Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 private void onMouseLeave( object obj, MouseEventArgs e )
 {
     if (MovePiece != null)
     {
         MovePiece.onRollOut();
         MovePiece = null;
     }
 }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
        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
            }
        }
Exemplo n.º 5
0
 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];
 }
Exemplo n.º 6
0
        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();
            }
        }