/// <inheritdoc/> protected internal override void Draw() { HandleDrawing.Layer = 1; HandleDrawing.Transform = Matrix4.TRS(Position, Rotation, Vector3.One); float handleSize = Handles.GetHandleSize(EditorApplication.SceneViewCamera, position); // Draw 1D arrows if (xAxis.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.White; else if(xAxis.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.BansheeOrange; else HandleDrawing.Color = Color.Red; Vector3 xConeStart = Vector3.XAxis*(1.0f - CONE_HEIGHT); HandleDrawing.DrawLine(Vector3.Zero, xConeStart, handleSize); HandleDrawing.DrawCone(xConeStart, Vector3.XAxis, CONE_HEIGHT, CONE_RADIUS, handleSize); if (yAxis.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.White; else if (yAxis.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.BansheeOrange; else HandleDrawing.Color = Color.Green; Vector3 yConeStart = Vector3.YAxis * (1.0f - CONE_HEIGHT); HandleDrawing.DrawLine(Vector3.Zero, yConeStart, handleSize); HandleDrawing.DrawCone(yConeStart, Vector3.YAxis, CONE_HEIGHT, CONE_RADIUS, handleSize); if (zAxis.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.White; else if (zAxis.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.BansheeOrange; else HandleDrawing.Color = Color.Blue; Vector3 zConeStart = Vector3.ZAxis * (1.0f - CONE_HEIGHT); HandleDrawing.DrawLine(Vector3.Zero, zConeStart, handleSize); HandleDrawing.DrawCone(zConeStart, Vector3.ZAxis, CONE_HEIGHT, CONE_RADIUS, handleSize); // Draw 2D planes Color planeNormal = new Color(1.0f, 1.0f, 1.0f, 0.2f); Color planeHover = new Color(1.0f, 1.0f, 1.0f, 0.4f); Color planeActive = new Color(1.0f, 1.0f, 1.0f, 0.6f); Vector3 planeXOffset = Vector3.XAxis * 0.3f; Vector3 planeYOffset = Vector3.YAxis * 0.3f; Vector3 planeZOffset = Vector3.ZAxis * 0.3f; //// XY plane HandleDrawing.Color = Color.Blue; HandleDrawing.DrawLine(planeXOffset, planeXOffset + planeYOffset, handleSize); HandleDrawing.DrawLine(planeYOffset, planeYOffset + planeXOffset, handleSize); if (xyPlane.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.Blue * planeActive; else if (xyPlane.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.Blue * planeHover; else HandleDrawing.Color = Color.Blue * planeNormal; Rect3 xyPlaneArea = new Rect3( (planeXOffset + planeYOffset) * 0.5f, new Vector3[] { Vector3.XAxis, Vector3.YAxis}, new float[] { 0.15f, 0.15f}); HandleDrawing.DrawRect(xyPlaneArea, handleSize); //// YZ plane HandleDrawing.Color = Color.Red; HandleDrawing.DrawLine(planeYOffset, planeYOffset + planeZOffset, handleSize); HandleDrawing.DrawLine(planeZOffset, planeZOffset + planeYOffset, handleSize); if (yzPlane.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.Red * planeActive; else if (yzPlane.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.Red * planeHover; else HandleDrawing.Color = Color.Red * planeNormal; Rect3 yzPlaneArea = new Rect3( (planeYOffset + planeZOffset) * 0.5f, new Vector3[] { Vector3.YAxis, Vector3.ZAxis }, new float[] { 0.15f, 0.15f }); HandleDrawing.DrawRect(yzPlaneArea, handleSize); //// ZX plane HandleDrawing.Color = Color.Green; HandleDrawing.DrawLine(planeZOffset, planeZOffset + planeXOffset, handleSize); HandleDrawing.DrawLine(planeXOffset, planeXOffset + planeZOffset, handleSize); if (zxPlane.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.Green * planeActive; else if (zxPlane.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.Green * planeHover; else HandleDrawing.Color = Color.Green * planeNormal; Rect3 zxPlaneArea = new Rect3( (planeZOffset + planeXOffset) * 0.5f, new Vector3[] { Vector3.ZAxis, Vector3.XAxis }, new float[] { 0.15f, 0.15f }); HandleDrawing.DrawRect(zxPlaneArea, handleSize); }
/// <summary> /// Triggered when the user selects a new color. /// </summary> /// <param name="newValue">New value of the color field.</param> private void OnFieldValueChanged(Color newValue) { property.SetValue(newValue); state = InspectableState.Modified; }
/// <inheritdoc/> protected internal override void Draw() { HandleDrawing.Layer = 1; HandleDrawing.Transform = Matrix4.TRS(Position, Rotation, Vector3.One); float handleSize = Handles.GetHandleSize(EditorApplication.SceneViewCamera, position); // Draw arcs if (xAxis.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.White; else if(xAxis.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.BansheeOrange; else HandleDrawing.Color = Color.Red; HandleDrawing.DrawWireArc(Vector3.Zero, Vector3.XAxis, 1.0f, GetXStartAngle(false), new Degree(180.0f), handleSize); if (yAxis.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.White; else if (yAxis.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.BansheeOrange; else HandleDrawing.Color = Color.Green; HandleDrawing.DrawWireArc(Vector3.Zero, Vector3.YAxis, 1.0f, GetYStartAngle(false), new Degree(180.0f), handleSize); if (zAxis.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.White; else if (zAxis.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.BansheeOrange; else HandleDrawing.Color = Color.Blue; HandleDrawing.DrawWireArc(Vector3.Zero, Vector3.ZAxis, 1.0f, GetZStartAngle(false), new Degree(180.0f), handleSize); // Draw "bounds" and free handle Color gray = new Color(1.0f, 1.0f, 1.0f, 0.3f); Vector3 cameraNormal = EditorApplication.SceneViewCamera.SceneObject.Rotation.Rotate(Vector3.ZAxis); HandleDrawing.Transform = Matrix4.TRS(Position, Quaternion.Identity, Vector3.One); HandleDrawing.Color = gray; HandleDrawing.DrawWireDisc(cameraNormal * 0.1f, cameraNormal, 1.0f, handleSize); if (freeAxis.State == HandleSlider.StateType.Active) HandleDrawing.Color = Color.White; else if (freeAxis.State == HandleSlider.StateType.Hover) HandleDrawing.Color = Color.BansheeOrange; else HandleDrawing.Color = gray; HandleDrawing.DrawWireDisc(Vector3.Zero, cameraNormal, 1.2f, handleSize); // Draw active rotation pie HandleDrawing.Color = gray; HandleDrawing.Transform = Matrix4.TRS(Position, EditorApplication.SceneViewCamera.SceneObject.Rotation, Vector3.One); if (freeAxis.State == HandleSlider.StateType.Active) HandleDrawing.DrawArc(Vector3.Zero, -Vector3.ZAxis, 1.2f, freeAxis.StartAngle, -freeAxis.Delta, handleSize); HandleDrawing.Transform = Matrix4.TRS(Position, dragStartRotation, Vector3.One); if (xAxis.State == HandleSlider.StateType.Active) HandleDrawing.DrawArc(Vector3.Zero, Vector3.XAxis, 1.0f, xAxis.StartAngle, -xAxis.Delta, handleSize); else if (yAxis.State == HandleSlider.StateType.Active) HandleDrawing.DrawArc(Vector3.Zero, Vector3.YAxis, 1.0f, yAxis.StartAngle, -yAxis.Delta, handleSize); else if (zAxis.State == HandleSlider.StateType.Active) HandleDrawing.DrawArc(Vector3.Zero, Vector3.ZAxis, 1.0f, zAxis.StartAngle, -zAxis.Delta, handleSize); }