示例#1
0
 private void _panel_MouseUp(object sender, MouseEventArgs e)
 {
     _translateDragging = TransformDragging.NONE;
     _scaleDragging     = DirectionalTransformDragging.NONE;
     if (_translateFreeDragging)
     {
         _translateFreeDragging = 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 bool IsTranslateClick(SceneNode checking, out TransformDragging translateDragging)
 {
     if (checking.Equals(_xArrowNodeA) || checking.Equals(_xArrowNodeB))
     {
         translateDragging = TransformDragging.X;
         return(true);
     }
     else if (checking.Equals(_yArrowNodeA) || checking.Equals(_yArrowNodeB))
     {
         translateDragging = TransformDragging.Y;
         return(true);
     }
     else if (checking.Equals(_zArrowNodeA) || checking.Equals(_zArrowNodeB))
     {
         translateDragging = TransformDragging.Z;
         return(true);
     }
     translateDragging = TransformDragging.NONE;
     return(false);
 }