public override bool CanDrag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position) { const int width = 8; var pos = GetWorldPositionAndScreenOffset(viewport.Viewport.Camera); var screenPosition = camera.WorldToScreen(pos.Item1) + pos.Item2; var diff = Vector3.Abs(e.Location - screenPosition); return(diff.X < width && diff.Y < width); }
protected virtual void LeftMouseClickOnResizeHandle(Viewport2D vp, ViewportEvent e) { State.Action = BoxAction.ReadyToResize; }
public override void MouseWheel(ViewportBase viewport, ViewportEvent e) { // Nope. }
public override void MouseClick(ViewportBase viewport, ViewportEvent e) { }
public override void MouseLeave(ViewportBase viewport, ViewportEvent e) { _activeViewport = null; }
public override void MouseMove(ViewportBase viewport, ViewportEvent e) { // }
public override void KeyDown(ViewportBase viewport, ViewportEvent e) { }
public void KeyUp(ViewportEvent e) { // Not used }
public void KeyDown(ViewportEvent e) { // Not used }
public bool CanDrag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position) => false;
public void EndDrag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position) { }
public override void EndDrag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position) { BoxState.FixBounds(); BoxState.Action = BoxAction.Drawn; MoveOrigin = SnappedMoveOrigin = null; base.EndDrag(document, viewport, camera, e, position); }
public override void Drag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 lastPosition, Vector3 position) { if (Handle == ResizeHandle.Center) { var delta = position - lastPosition; var newOrigin = MoveOrigin + delta; var snapped = State.Tool.SnapIfNeeded(newOrigin.Value); BoxState.Move(camera, snapped - SnappedMoveOrigin.Value); SnappedMoveOrigin = snapped; MoveOrigin = newOrigin; } else { var snapped = State.Tool.SnapIfNeeded(position); BoxState.Resize(Handle, viewport, camera, snapped); } base.Drag(document, viewport, camera, e, lastPosition, position); }
public override void StartDrag(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position) { BoxState.OrigStart = BoxState.Start; BoxState.OrigEnd = BoxState.End; if (!MoveOrigin.HasValue) { MoveOrigin = GetResizeOrigin(viewport, camera, position); } if (!SnappedMoveOrigin.HasValue) { SnappedMoveOrigin = MoveOrigin; } BoxState.Action = BoxAction.Resizing; base.StartDrag(document, viewport, camera, e, position); }
public override void MouseDown(ViewportBase viewport, ViewportEvent e) { var vp = viewport as Viewport3D; if (vp == null || (e.Button != MouseButtons.Left && e.Button != MouseButtons.Right)) { return; } var behaviour = e.Button == MouseButtons.Left ? _form.GetLeftClickBehaviour(KeyboardState.Ctrl, KeyboardState.Shift, KeyboardState.Alt) : _form.GetRightClickBehaviour(KeyboardState.Ctrl, KeyboardState.Shift, KeyboardState.Alt); var ray = vp.CastRayFromScreen(e.X, e.Y); var hits = Document.Map.WorldSpawn.GetAllNodesIntersectingWith(ray).OfType <Solid>(); var clickedFace = hits.SelectMany(f => f.Faces) .Select(x => new { Item = x, Intersection = x.GetIntersectionPoint(ray) }) .Where(x => x.Intersection != null) .OrderBy(x => (x.Intersection - ray.Start).VectorMagnitude()) .Select(x => x.Item) .FirstOrDefault(); if (clickedFace == null) { return; } var faces = new List <Face>(); if (KeyboardState.Shift) { faces.AddRange(clickedFace.Parent.Faces); } else { faces.Add(clickedFace); } var firstSelected = Document.Selection.GetSelectedFaces().FirstOrDefault(); var firstClicked = faces.FirstOrDefault(face => !String.IsNullOrWhiteSpace(face.Texture.Name)); var ac = new ActionCollection(); var select = new ChangeFaceSelection( KeyboardState.Ctrl ? faces.Where(x => !x.IsSelected) : faces, KeyboardState.Ctrl ? faces.Where(x => x.IsSelected) : Document.Selection.GetSelectedFaces().Where(x => !faces.Contains(x))); Action lift = () => { if (firstClicked == null) { return; } var itemToSelect = Document.TextureCollection.GetItem(firstClicked.Texture.Name) ?? new TextureItem(null, firstClicked.Texture.Name, TextureFlags.Missing, 64, 64); Mediator.Publish(EditorMediator.TextureSelected, itemToSelect); }; switch (behaviour) { case SelectBehaviour.Select: ac.Add(select); break; case SelectBehaviour.LiftSelect: lift(); ac.Add(select); break; case SelectBehaviour.Lift: lift(); break; case SelectBehaviour.Apply: case SelectBehaviour.ApplyWithValues: var item = _form.GetFirstSelectedTexture(); if (item != null) { var texture = item.GetTexture(); ac.Add(new EditFace(faces, (document, face) => { face.Texture.Name = item.Name; face.Texture.Texture = texture; if (behaviour == SelectBehaviour.ApplyWithValues && firstSelected != null) { // Calculates the texture coordinates face.AlignTextureWithFace(firstSelected); } else if (behaviour == SelectBehaviour.ApplyWithValues) { face.Texture.XScale = _form.CurrentProperties.XScale; face.Texture.YScale = _form.CurrentProperties.YScale; face.Texture.XShift = _form.CurrentProperties.XShift; face.Texture.YShift = _form.CurrentProperties.YShift; face.SetTextureRotation(_form.CurrentProperties.Rotation); } else { face.CalculateTextureCoordinates(true); } }, true)); } break; case SelectBehaviour.AlignToView: var right = vp.Camera.GetRight(); var up = vp.Camera.GetUp(); var loc = vp.Camera.Location; var point = new Coordinate((decimal)loc.X, (decimal)loc.Y, (decimal)loc.Z); var uaxis = new Coordinate((decimal)right.X, (decimal)right.Y, (decimal)right.Z); var vaxis = new Coordinate((decimal)up.X, (decimal)up.Y, (decimal)up.Z); ac.Add(new EditFace(faces, (document, face) => { face.Texture.XScale = 1; face.Texture.YScale = 1; face.Texture.UAxis = uaxis; face.Texture.VAxis = vaxis; face.Texture.XShift = face.Texture.UAxis.Dot(point); face.Texture.YShift = face.Texture.VAxis.Dot(point); face.Texture.Rotation = 0; face.CalculateTextureCoordinates(true); }, false)); break; default: throw new ArgumentOutOfRangeException(); } if (!ac.IsEmpty()) { Document.PerformAction("Texture selection", ac); } }
public void KeyPress(ViewportEvent e) { // Not used }
public override void KeyDown(ViewportBase viewport, ViewportEvent e) { //throw new NotImplementedException(); }
public void MouseWheel(ViewportEvent e) { // Not used }
public override void KeyUp(ViewportBase viewport, ViewportEvent e) { // }
public void MouseUp(ViewportEvent e) { // Not used }
public override void KeyPress(ViewportBase viewport, ViewportEvent e) { }
public void MouseDown(ViewportEvent e) { // Not used }
public override void MouseEnter(ViewportBase viewport, ViewportEvent e) { _activeViewport = viewport; }
public void MouseDoubleClick(ViewportEvent e) { // Not used }
public override void MouseDoubleClick(ViewportBase viewport, ViewportEvent e) { // Not used }
public void MouseEnter(ViewportEvent e) { // Not used }
protected virtual void MouseMove3D(Viewport3D viewport, ViewportEvent e) { // Virtual }
public void MouseLeave(ViewportEvent e) { // Not used }
protected Tuple <Coordinate, Coordinate> GetResizedBoxCoordinates(Viewport2D viewport, ViewportEvent e) { if (State.Action != BoxAction.Resizing && State.Action != BoxAction.Drawing) { return(Tuple.Create(State.BoxStart, State.BoxEnd)); } var now = SnapIfNeeded(viewport.ScreenToWorld(e.X, viewport.Height - e.Y)); var cstart = viewport.Flatten(State.BoxStart); var cend = viewport.Flatten(State.BoxEnd); // Proportional scaling var ostart = viewport.Flatten(State.PreTransformBoxStart ?? Coordinate.Zero); var oend = viewport.Flatten(State.PreTransformBoxEnd ?? Coordinate.Zero); var owidth = oend.X - ostart.X; var oheight = oend.Y - ostart.Y; var proportional = KeyboardState.Ctrl && State.Action == BoxAction.Resizing && owidth != 0 && oheight != 0; switch (State.Handle) { case ResizeHandle.TopLeft: cstart.X = now.X; cend.Y = now.Y; break; case ResizeHandle.Top: cend.Y = now.Y; break; case ResizeHandle.TopRight: cend.X = now.X; cend.Y = now.Y; break; case ResizeHandle.Left: cstart.X = now.X; break; case ResizeHandle.Center: var cdiff = cend - cstart; cstart = viewport.Flatten(State.PreTransformBoxStart) + now - SnapIfNeeded(State.MoveStart); cend = cstart + cdiff; break; case ResizeHandle.Right: cend.X = now.X; break; case ResizeHandle.BottomLeft: cstart.X = now.X; cstart.Y = now.Y; break; case ResizeHandle.Bottom: cstart.Y = now.Y; break; case ResizeHandle.BottomRight: cend.X = now.X; cstart.Y = now.Y; break; default: throw new ArgumentOutOfRangeException(); } if (proportional) { var nwidth = cend.X - cstart.X; var nheight = cend.Y - cstart.Y; var mult = Math.Max(nwidth / owidth, nheight / oheight); var pwidth = owidth * mult; var pheight = oheight * mult; var wdiff = pwidth - nwidth; var hdiff = pheight - nheight; switch (State.Handle) { case ResizeHandle.TopLeft: cstart.X -= wdiff; cend.Y += hdiff; break; case ResizeHandle.TopRight: cend.X += wdiff; cend.Y += hdiff; break; case ResizeHandle.BottomLeft: cstart.X -= wdiff; cstart.Y -= hdiff; break; case ResizeHandle.BottomRight: cend.X += wdiff; cstart.Y -= hdiff; break; } } return(SnapBoxCoordinatesIfNeeded(viewport, cstart, cend)); }
public override void Click(MapDocument document, MapViewport viewport, OrthographicCamera camera, ViewportEvent e, Vector3 position) { }