/// <summary> /// Get a Vector of Coordinates for a given drawing context /// </summary> /// <param name="position"></param> /// <param name="distancesToAnchor"></param> /// <param name="asPreview"></param> /// <param name="keyboardInput"></param> /// <returns></returns> public Vec <Coordinate> GetParametricPosition(Vec <float> position, Vec <float> distancesToAnchor, bool asPreview, KeyboardInput.Model keyboardInput) { SnappedCoordinate = new Vec <Coordinate>(); SnappedParameter = new Vec <Parameter>(); var output = new Vec <Coordinate>(); foreach (var a in Vec.XYZ) { // a parameter is referenced in the keyboard input if (keyboardInput?.ParameterReferences[a] != null) { output[a] = Axes[a].AddNewMueCoordinateWithParameterReference( keyboardInput.ParameterReferences[a], keyboardInput.IsDirectionNegative[a], asPreview ); continue; } // a dimension is set in the keyboard input if (keyboardInput?.DimensionInput[a] != null) { output[a] = Axes[a].AddNewMueCoordinateWithParameterValue( keyboardInput.DimensionInput[a].InM, keyboardInput.IsDirectionNegative[a], asPreview ); continue; } // try to snap to an existing coordinate var snappedCoordinate = Axes[a].TryToSnapToExistingCoordinate(position[a], asPreview); if (snappedCoordinate != null) { output[a] = snappedCoordinate; SnappedCoordinate[a] = snappedCoordinate; continue; } // try to snap to an existing parameter var parameterSnap = Axes[a].TryToSnapToExistingParameter(distancesToAnchor[a], GetAllParameters()); if (parameterSnap != null) { output[a] = Axes[a].AddNewMueCoordinate( parameterSnap.Value.parameter, parameterSnap.Value.pointsInNegativeDirection, asPreview ); SnappedParameter[a] = parameterSnap.Value.parameter; continue; } // create new coordinate output[a] = Axes[a].AddNewMueCoordinate(position[a], asPreview); } return(output); }
public void Reset() { draggedCoordinate = null; keyboardInputModel = new KeyboardInput.Model(); incompleteGeometry = null; focusPosition = null; currentGeometryColor = null; }
public static Vec <Coordinate> UpdateCursorPosition(Vec <Coordinate> oldFocusPosition, CoordinateSystem cs, KeyboardInput.Model keyboardInput) { oldFocusPosition?.ForEach(c => { if (c.IsCurrentlyDrawn) { c.Delete(); } }); return(GetOrCreatePositionAtMousePosition(cs, cs.Anchor, true, keyboardInput)); }
private static Vec <Coordinate> GetOrCreatePositionAtMousePosition(CoordinateSystem coordinateSystem, Anchor anchor, bool asPreview = false, KeyboardInput.Model keyboardInput = null) { var mousePosition = MouseInput.RaycastPosition; var distanceToAnchor = new Vec <float>( mousePosition.X - anchor.PrimaryPosition.x, mousePosition.Y - anchor.PrimaryPosition.y, mousePosition.Z - anchor.PrimaryPosition.z ); return (coordinateSystem.GetParametricPosition(mousePosition, distanceToAnchor, asPreview, keyboardInput)); }
public void UpdateUI(CoordinateSystem cs, CoordinateUIStyle coordinateUIStyle, KeyboardInput.Model keyboardInput, Coordinate draggedCoordinate, (Coordinate coordinate, Vec.AxisID axis)?hoveredCoordinate)