public static string FormatCoordinate(double coord, CoordinateDisplay display) { coord = Math.Abs(coord); if (display == CoordinateDisplay.DecimalDegrees) { return string.Format("{0:0.00000}", coord); } else if (display == CoordinateDisplay.DecimalMinutes) { return string.Format("{0} {1:0.000}", (int)coord, (coord - (int)coord) * 60.0); } return "Unknown format"; }
public static string FormatCoordinate(double coord, CoordinateDisplay display) { coord = Math.Abs(coord); if (display == CoordinateDisplay.DecimalDegrees) { return(string.Format("{0:0.00000}", coord)); } else if (display == CoordinateDisplay.DecimalMinutes) { return(string.Format("{0} {1:0.000}", (int)coord, (coord - (int)coord) * 60.0)); } return("Unknown format"); }
public static void Draw(SceneView sceneView, GridData gridData) { CoordinateDisplay coordinateStyle = GridSettings.instance.coordinateDisplay; if (coordinateStyle == CoordinateDisplay.Off) { return; } if (sceneView.camera.orthographic && coordinateStyle == CoordinateDisplay.PerspectiveOnly) { return; } if (!sceneView.camera.orthographic && coordinateStyle == CoordinateDisplay.OrthographicOnly) { return; } if (Selection.activeTransform != null) { GUIStyle style = new GUIStyle(EditorGUIUtility.GetBuiltinSkin(EditorSkin.Game).box) { richText = true, padding = new RectOffset(0, 0, 0, 0), margin = new RectOffset(0, 0, 0, 0) }; string coordinateColor = GetHexRGB(GridSettings.instance.coordinateColor); bool useComponentColors = GridSettings.instance.useAxisColorForComponents; GridPoint gridPoint = gridData.WorldPositionToGridPoint(Selection.activeTransform.position); string label = string.Format(COORDINATE_LABEL_FORMAT, gridPoint.x, gridPoint.y, gridPoint.z, (useComponentColors ? GetHexRGB(GridSettings.instance.xAxisColor) : coordinateColor), (useComponentColors ? GetHexRGB(GridSettings.instance.yAxisColor) : coordinateColor), (useComponentColors ? GetHexRGB(GridSettings.instance.zAxisColor) : coordinateColor), GridSettings.instance.coordinateSize, coordinateColor); CoordinateAnchor coordinateAnchor = GridSettings.instance.coordinateAnchor; float size = GridSettings.instance.coordinateSize; Handles.BeginGUI(); if (coordinateAnchor == CoordinateAnchor.AttachToSelection) { style.alignment = TextAnchor.UpperLeft; style.padding = new RectOffset(5, 0, 5, 0); style.margin = new RectOffset(5, 0, 5, 0); Handles.Label(Selection.activeTransform.position, label, style); } else { style.alignment = TextAnchor.MiddleCenter; int numCharacters = (gridPoint.x.ToString().Length + gridPoint.y.ToString().Length + gridPoint.z.ToString().Length); // arbitrary multipliers that look good float width = size * 6f + (numCharacters - 3) * size * 0.75f; float height = size * 1.8f; Rect rect = new Rect(0f, 0f, width, height); float padding = 10f; float paddingCenter = (sceneView.position.width - width) * 0.5f; float paddingMiddle = (sceneView.position.height - height) * 0.5f; float paddingRight = sceneView.position.width - padding - width; float paddingLower = sceneView.position.height - padding - height - 14f; switch (coordinateAnchor) { case CoordinateAnchor.UpperLeft: rect.x = padding; rect.y = padding; break; case CoordinateAnchor.MiddleLeft: rect.x = padding; rect.y = paddingMiddle; break; case CoordinateAnchor.LowerLeft: rect.x = padding; rect.y = paddingLower; break; case CoordinateAnchor.UpperCenter: rect.x = paddingCenter; rect.y = padding; break; case CoordinateAnchor.LowerCenter: rect.x = paddingCenter; rect.y = paddingLower; break; case CoordinateAnchor.UpperRight: rect.x = paddingRight; rect.y = padding; break; case CoordinateAnchor.MiddleRight: rect.x = paddingRight; rect.y = paddingMiddle; break; case CoordinateAnchor.LowerRight: rect.x = paddingRight; rect.y = paddingLower; break; default: Debug.LogError(string.Format("Grids MX -- Unsupported Coordinate Anchor: " + coordinateAnchor)); break; } GUI.Label(rect, label, style); } Handles.EndGUI(); } }