private void CreateChangeOperation(CreatureStructureEditorCanvasVM canvasVM) { var startPositions = StartPositions.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); var currentPositions = new Dictionary <JointVM, Vector2>(); var movedJoints = StartPositions.Keys; foreach (var jointVM in movedJoints) { currentPositions.Add(jointVM, jointVM.Position); } var changeOperation = new ChangeOperation(c => { foreach (var movedJoint in movedJoints) { movedJoint.Position = currentPositions[movedJoint]; } }, c => { foreach (var movedJoint in movedJoints) { movedJoint.Position = startPositions[movedJoint]; } }); canvasVM.HistoryStack.AddOperation(changeOperation); }
/// <inheritdoc /> public override bool OnCanvasMouseMove(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseMove(mouseInfo, canvasVM, modifierKeys)) { return(true); } if (StartPosition == null) { return(false); } var delta = mouseInfo.RelativePosition - StartPosition.Value; foreach (var boneVM in CanvasVM.Creature.CreatureStructureVM.BoneCollectionVM) { boneVM.FirstJoint = CanvasVM.Creature.CreatureStructureVM.JointCollectionVM.First(j => boneVM.FirstJoint.Model.Tracker == j.Model.Tracker); boneVM.SecondJoint = CanvasVM.Creature.CreatureStructureVM.JointCollectionVM.First(j => boneVM.SecondJoint.Model.Tracker == j.Model.Tracker); } foreach (var jointVM in CanvasVM.SelectedJoints) { var pos = StartPositions[jointVM]; pos = new Vector2(delta.X + pos.X, delta.Y + pos.Y); jointVM.Position = pos; } return(true); }
/// <inheritdoc /> public override bool OnCanvasMouseUp(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { base.OnCanvasMouseUp(mouseInfo, canvasVM, modifierKeys); if (mouseInfo.LeftMouseButtonDown == false) { return(false); } var mousePosition = new Vector2(mouseInfo.RelativePosition.X, mouseInfo.RelativePosition.Y); if (IsSelecting) { double length = new Vector2(CanvasVM.SelectionVM.Width, CanvasVM.SelectionVM.Height).Length; if (length < MinSelectionDiagonale) { PointSelection(mousePosition, modifierKeys); CanvasVM.SelectionVM.Visibility = Visibility.Hidden; } else { SelectElementsInSelectionArea(canvasVM, modifierKeys); } IsSelecting = false; return(true); } return(false); }
/// <inheritdoc /> public override void OnCanvasMouseLeave(CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; base.OnCanvasMouseLeave(canvasVM, modifierKeys); IsSelecting = false; CanvasVM.SelectionVM.Visibility = Visibility.Hidden; }
/// <inheritdoc /> public override bool OnCanvasMouseDown(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { IsDragging = true; StartPosition = mouseInfo.AbosultePosition; return(false); }
/// <inheritdoc /> public override bool OnCanvasMouseUp(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseUp(mouseInfo, canvasVM, modifierKeys)) { return(true); } if (mouseInfo.RightMouseButtonDown) { bool block = FirstJoint != null; Reset(); return(block); } var mousePosition = new Vector2(mouseInfo.RelativePosition.X, mouseInfo.RelativePosition.Y); var jointCollectionVM = canvasVM.Creature.CreatureStructureVM.JointCollectionVM; var closestJointInRange = (from jointVM in jointCollectionVM let distance = (jointVM.Position - mousePosition).Length where distance < DistanceThreshold orderby distance select jointVM).FirstOrDefault(); if (closestJointInRange == null) { if (FirstJoint != null) { var infoMessage = new InfoMessage("To cancel the bone placement just right click anywhere on the canvas", TimeSpan.FromSeconds(5)); if (!InfoMessageCollection.InfoMessages.Any(m => string.Equals(m.Message, infoMessage.Message, StringComparison.Ordinal))) { InfoMessageCollection.AddInfoMessageWithoutTracking(infoMessage); } } else { var infoMessage = new InfoMessage("To place a bone, first place joints with the respective tool and then connect them with this tool", TimeSpan.FromSeconds(5)); if (!InfoMessageCollection.InfoMessages.Any(m => string.Equals(m.Message, infoMessage.Message, StringComparison.Ordinal))) { InfoMessageCollection.AddInfoMessageWithoutTracking(infoMessage); } } return(true); } canvasVM.PreviewBone.To = mousePosition; if (FirstJoint == null) { FirstJoint = closestJointInRange; canvasVM.PreviewBone.From = FirstJoint.Position; } else { PlaceBone(FirstJoint, closestJointInRange); } return(false); }
/// <inheritdoc /> public override void OnCanvasMouseLeave(CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { base.OnCanvasMouseLeave(canvasVM, modifierKeys); if (StartPosition != null) { CreateChangeOperation(canvasVM); } StartPosition = null; }
/// <inheritdoc /> public override bool OnCanvasMouseUp(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseUp(mouseInfo, canvasVM, modifierKeys)) { return(true); } return(false); }
/// <inheritdoc /> public override bool OnCanvasMouseWheel(MouseWheelInfo mouseWheelInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; bool result = base.OnCanvasMouseWheel(mouseWheelInfo, canvasVM, modifierKeys); canvasVM.PreviewJoint.Visibility = Visibility.Hidden; return(result); }
/// <inheritdoc /> public override bool OnCanvasMouseMove(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseMove(mouseInfo, canvasVM, modifierKeys)) { return(true); } canvasVM.PreviewJoint.Visibility = Visibility.Visible; canvasVM.PreviewJoint.Position = new Vector2(mouseInfo.RelativePosition.X, mouseInfo.RelativePosition.Y); return(false); }
/// <inheritdoc /> public override bool OnCanvasMouseUp(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseMove(mouseInfo, canvasVM, modifierKeys)) { return(true); } CreateChangeOperation(canvasVM); Reset(); return(true); }
/// <inheritdoc /> public override bool OnCanvasMouseMove(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { if (!IsDragging) { return(true); } double deltaX = (mouseInfo.AbosultePosition - StartPosition).X; double deltaY = (mouseInfo.AbosultePosition - StartPosition).Y; StartPosition = mouseInfo.AbosultePosition; canvasVM.CameraVM.OffsetX += deltaX; canvasVM.CameraVM.OffsetY += deltaY; return(true); }
/// <inheritdoc /> public override bool OnCanvasMouseDown(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseDown(mouseInfo, canvasVM, modifierKeys)) { return(true); } var jointVM = new JointVM(new Joint { Position = canvasVM.PreviewJoint.Position }); var changeOperation = new ChangeOperation(c => c.Creature.CreatureStructureVM.JointCollectionVM.Add(jointVM), c => c.Creature.CreatureStructureVM.JointCollectionVM.Remove(jointVM)); canvasVM.HistoryStack.AddOperation(changeOperation); return(true); }
/// <inheritdoc /> public override bool OnCanvasMouseDown(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; base.OnCanvasMouseDown(mouseInfo, CanvasVM, modifierKeys); StartPositions.Clear(); var selectedJoint = (from joint in CanvasVM.Creature.CreatureStructureVM.JointCollectionVM let distance = (joint.Position - new Vector2(mouseInfo.RelativePosition.X, mouseInfo.RelativePosition.Y)).Length where distance < SinglePointSelectionTolerance orderby distance select joint).FirstOrDefault(); if (selectedJoint != null) { if (CanvasVM.SelectedJoints.Count >= 1 && !CanvasVM.SelectedJoints.Contains(selectedJoint)) { CanvasVM.SelectedJoints.Clear(); } if (!CanvasVM.SelectedJoints.Contains(selectedJoint)) { CanvasVM.SelectedJoints.Add(selectedJoint); } } else { CanvasVM.SelectedJoints.Clear(); } var selectedJoins = CanvasVM.SelectedJoints.Select(j => j.Model.Tracker).ToList(); StartPosition = mouseInfo.RelativePosition; foreach (var jointVM in CanvasVM.Creature.CreatureStructureVM.JointCollectionVM.Where(j => selectedJoins.Contains(j.Model.Tracker))) { CanvasVM.SelectedJoints.Add(jointVM); StartPositions.Add(jointVM, jointVM.Position); } return(true); }
/// <inheritdoc /> public override bool OnCanvasMouseMove(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseMove(mouseInfo, canvasVM, modifierKeys)) { return(true); } var mousePosition = new Vector2(mouseInfo.RelativePosition.X, mouseInfo.RelativePosition.Y); if (IsSelecting) { var difference = mousePosition - CanvasVM.SelectionVM.StartPosition; CanvasVM.SelectionVM.Width = difference.X; CanvasVM.SelectionVM.Height = difference.Y; CanvasVM.SelectionVM.Visibility = difference.Length >= MinSelectionDiagonale ? Visibility.Visible : Visibility.Hidden; return(true); } return(false); }
/// <inheritdoc /> public override bool OnCanvasMouseMove(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if (base.OnCanvasMouseMove(mouseInfo, canvasVM, modifierKeys)) { return(true); } var mousePosition = new Vector2(mouseInfo.RelativePosition.X, mouseInfo.RelativePosition.Y); var jointCollectionVM = canvasVM.Creature.CreatureStructureVM.JointCollectionVM; var closestJointInRange = (from jointVM in jointCollectionVM let distance = (jointVM.Position - mousePosition).Length where distance < DistanceThreshold orderby distance select jointVM).FirstOrDefault(); foreach (var highlightedJoint in canvasVM.PreviewBone.HighlightedJoints.ToList()) { if (!Equals(highlightedJoint, FirstJoint) && !Equals(closestJointInRange, highlightedJoint)) { canvasVM.PreviewBone.HighlightedJoints.Remove(highlightedJoint); } } if (closestJointInRange != null && !canvasVM.PreviewBone.HighlightedJoints.Contains(closestJointInRange)) { canvasVM.PreviewBone.HighlightedJoints.Add(closestJointInRange); } if (FirstJoint == null) { return(false); } canvasVM.PreviewBone.To = closestJointInRange?.Position ?? mousePosition; canvasVM.PreviewBone.Visibility = Visibility.Visible; return(false); }
/// <inheritdoc /> public override bool OnCanvasMouseDown(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; base.OnCanvasMouseDown(mouseInfo, canvasVM, modifierKeys); if (mouseInfo.MiddleMouseButtonDown) { return(false); } var mousePosition = new Vector2(mouseInfo.RelativePosition.X, mouseInfo.RelativePosition.Y); if (!IsSelecting) { IsSelecting = true; CanvasVM.SelectionVM.StartPosition = mousePosition; CanvasVM.SelectionVM.Width = 0; CanvasVM.SelectionVM.Height = 0; return(true); } return(false); }
public ToolEventArgs(Tool tool, CreatureStructureEditorCanvasVM canvasVM) { Tool = tool; CanvasVM = canvasVM; }
/// <inheritdoc /> public override void OnCanvasMouseLeave(CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; base.OnCanvasMouseLeave(canvasVM, modifierKeys); canvasVM.PreviewJoint.Visibility = Visibility.Hidden; }
/// <inheritdoc /> public override bool OnCanvasMouseUp(MouseInfo mouseInfo, CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { IsDragging = false; return(false); }
/// <inheritdoc /> public override void OnCanvasMouseLeave(CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { OnCanvasMouseUp(default(MouseInfo), canvasVM, modifierKeys); }
private void SelectElementsInSelectionArea(CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; if ((modifierKeys & ModifierKeys.Shift) == 0) { Reset(); } CanvasVM.SelectionVM.Visibility = Visibility.Hidden; var creatureStructureVM = CanvasVM.Creature.CreatureStructureVM; var jointsInRectangle = creatureStructureVM.JointCollectionVM.Where(jointVM => jointVM.Position.IsInsideRect(CanvasVM.SelectionVM.Rectangle)); var bonesInRectangle = creatureStructureVM.BoneCollectionVM.Where(boneVM => boneVM.FirstJoint.Position.IsInsideRect(CanvasVM.SelectionVM.Rectangle) || boneVM.SecondJoint.Position.IsInsideRect(CanvasVM.SelectionVM.Rectangle) || CanvasVM.SelectionVM.Rectangle.IsBoneInside(boneVM.Model)); if ((modifierKeys & ModifierKeys.Alt) == 0) { foreach (var jointVM in jointsInRectangle) { if ((modifierKeys & ModifierKeys.Shift) == 0) { CanvasVM.SelectedJoints.Add(jointVM); } else { var joint = CanvasVM.SelectedJoints.FirstOrDefault(j => j.Model.Tracker == jointVM.Model.Tracker); if (joint != null) { CanvasVM.SelectedJoints.Remove(joint); } else { CanvasVM.SelectedJoints.Add(jointVM); } } } } if ((modifierKeys & ModifierKeys.Control) == 0) { foreach (var boneVM in bonesInRectangle) { if ((modifierKeys & ModifierKeys.Shift) == 0) { CanvasVM.SelectedBones.Add(boneVM); } else { var bone = CanvasVM.SelectedBones.FirstOrDefault(b => b.Model.Tracker == boneVM.Model.Tracker); if (bone != null) { CanvasVM.SelectedBones.Remove(bone); } else { CanvasVM.SelectedBones.Add(boneVM); } } } } }
/// <inheritdoc /> public override void OnCanvasMouseEnter(CreatureStructureEditorCanvasVM canvasVM, ModifierKeys modifierKeys) { CanvasVM = CanvasVM ?? canvasVM; base.OnCanvasMouseEnter(canvasVM, modifierKeys); }