private void _panel_MouseUp(object sender, MouseEventArgs e) { _translateDragging = TransformDragging.NONE; _scaleDragging = DirectionalTransformDragging.NONE; if (_translateFreeDragging) { _translateFreeDragging = false; } }
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; } } } } }); }
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); }