Пример #1
0
 private bool IsScaleClick(SceneNode checking, out DirectionalTransformDragging scaleDragging)
 {
     if (checking.Equals(_xScaleNodeA))
     {
         scaleDragging = DirectionalTransformDragging.XA;
         return(true);
     }
     else if (checking.Equals(_xScaleNodeB))
     {
         scaleDragging = DirectionalTransformDragging.XB;
         return(true);
     }
     else if (checking.Equals(_yScaleNodeA))
     {
         scaleDragging = DirectionalTransformDragging.YA;
         return(true);
     }
     else if (checking.Equals(_yScaleNodeB))
     {
         scaleDragging = DirectionalTransformDragging.YB;
         return(true);
     }
     else if (checking.Equals(_zScaleNodeA))
     {
         scaleDragging = DirectionalTransformDragging.ZA;
         return(true);
     }
     else if (checking.Equals(_zScaleNodeB))
     {
         scaleDragging = DirectionalTransformDragging.ZB;
         return(true);
     }
     scaleDragging = DirectionalTransformDragging.NONE;
     return(false);
 }
Пример #2
0
        private void _panel_MouseDown(object sender, MouseEventArgs e)
        {
            Point point = new Point(e.X, e.Y);

            Engine.QueueForRenderDispatcher(() =>
            {
                if (e.Button == MouseButtons.Left)
                {
                    Ray ray;
                    RaySceneQueryResult.Enumerator itr = GetRaySceneQuery(point.X, point.Y, out ray);

                    if (itr != null)
                    {
                        if (itr.MoveNext())
                        {
                            RaySceneQueryResultEntry entry = itr.Current;
                            SceneNode parentNode           = entry.movable.ParentSceneNode;

                            TransformDragging dragging;
                            DirectionalTransformDragging directionalDragging;
                            if (IsTranslateClick(parentNode, out dragging))
                            {
                                _translateDragging = dragging;
                                IEnumerable <SceneNode> selected = GetSelectedNode();
                                if (selected != null)
                                {
                                    SceneNode node = selected.FirstOrDefault();
                                    if (node != null)
                                    {
                                        _translateDragDifference = ray.GetPoint(entry.distance) - node.Position;
                                    }
                                }
                                return;
                            }
                            else if (IsScaleClick(parentNode, out directionalDragging))
                            {
                                _scaleDragging = directionalDragging;
                                IEnumerable <SceneNode> selected = GetSelectedNode();
                                if (selected != null)
                                {
                                    SceneNode node = selected.FirstOrDefault();
                                    if (node != null)
                                    {
                                        _scaleDragDifference = ray.GetPoint(entry.distance) - node.Position;
                                    }
                                }
                                return;
                            }
                            else
                            {
                                _translateDragging = TransformDragging.NONE;
                            }
                        }
                    }
                }
            });
        }
Пример #3
0
 private void _panel_MouseUp(object sender, MouseEventArgs e)
 {
     _translateDragging = TransformDragging.NONE;
     _scaleDragging     = DirectionalTransformDragging.NONE;
     if (_translateFreeDragging)
     {
         _translateFreeDragging = false;
     }
 }