void SetPolyEditMode(PolyShape.PolyEditMode mode) { if (polygon == null) { return; } PolyShape.PolyEditMode old = polygon.polyEditMode; if (mode != old) { GUIUtility.hotControl = 0; // Entering edit mode after the shape has been finalized once before, which means // possibly reverting manual changes. Store undo state so that if this was // not intentional user can revert. if (old == PolyShape.PolyEditMode.None && polygon.m_Points.Count > 2) { if (ProBuilderEditor.instance != null) { ProBuilderEditor.instance.ClearElementSelection(); } UndoUtility.RecordComponents <ProBuilderMesh, PolyShape>(polygon.GetComponents(typeof(Component)), "Edit Polygon Shape"); } polygon.polyEditMode = mode; // If coming from Path -> Height set the mouse / origin offset if (old == PolyShape.PolyEditMode.Path && mode == PolyShape.PolyEditMode.Height && Event.current != null) { Vector3 up = polygon.transform.up; Vector3 origin = polygon.transform.TransformPoint(Math.Average(polygon.m_Points)); Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); Vector3 p = Math.GetNearestPointRayRay(origin, up, r.origin, r.direction); float extrude = Vector3.Distance(origin, p) * Mathf.Sign(Vector3.Dot(p - origin, up)); s_HeightMouseOffset = polygon.extrude - EditorSnapping.MoveSnap(extrude); } else if (old == PolyShape.PolyEditMode.Path && mode == PolyShape.PolyEditMode.None) { var go = polygon.gameObject; EditorApplication.delayCall += () => DestroyImmediate(go); return; } RebuildPolyShapeMesh(polygon); //Dirty the polygon for serialization (fix for transition between prefab and scene mode) if (polygon != null) { UnityEditor.EditorUtility.SetDirty(polygon); } } }
void SetPolyEditMode(PolyShape.PolyEditMode mode) { PolyShape.PolyEditMode old = polygon.polyEditMode; if (mode != old) { // Clear the control always GUIUtility.hotControl = 0; // Entering edit mode after the shape has been finalized once before, which means // possibly reverting manual changes. Store undo state so that if this was // not intentional user can revert. if (polygon.polyEditMode == PolyShape.PolyEditMode.None && polygon.m_Points.Count > 2) { if (ProBuilderEditor.instance != null) { ProBuilderEditor.instance.ClearElementSelection(); } UndoUtility.RecordObject(polygon, "Edit Polygon Shape"); UndoUtility.RecordObject(polygon.mesh, "Edit Polygon Shape"); } polygon.polyEditMode = mode; if (polygon.polyEditMode == PolyShape.PolyEditMode.None) { ProBuilderEditor.selectMode = ProBuilderEditor.selectMode & ~(SelectMode.InputTool); } else { ProBuilderEditor.selectMode = ProBuilderEditor.selectMode | SelectMode.InputTool; } if (polygon.polyEditMode != PolyShape.PolyEditMode.None) { Tools.current = Tool.None; } // If coming from Path -> Height set the mouse / origin offset if (old == PolyShape.PolyEditMode.Path && mode == PolyShape.PolyEditMode.Height && Event.current != null) { Vector3 up = polygon.transform.up; Vector3 origin = polygon.transform.TransformPoint(Math.Average(polygon.m_Points)); Ray r = HandleUtility.GUIPointToWorldRay(Event.current.mousePosition); Vector3 p = Math.GetNearestPointRayRay(origin, up, r.origin, r.direction); s_HeightMouseOffset = polygon.extrude - ProGridsInterface.ProGridsSnap( Vector3.Distance(origin, p) * Mathf.Sign(Vector3.Dot(p - origin, up))); } RebuildPolyShapeMesh(polygon); } }
void OnEnable() { if (polygon == null) { DestroyImmediate(this); return; } ProBuilderEditor.selectModeChanged += OnSelectModeChanged; m_LineMesh = new Mesh(); m_LineMaterial = CreateHighlightLineMaterial(); Undo.undoRedoPerformed += UndoRedoPerformed; DrawPolyLine(polygon.m_Points); EditorApplication.update += Update; PolyShape.PolyEditMode mode = polygon.polyEditMode; polygon.polyEditMode = PolyShape.PolyEditMode.None; SetPolyEditMode(mode); }
void OnEnable() { if (polygon == null) { DestroyImmediate(this); return; } ProBuilderEditor.selectModeChanged += OnSelectModeChanged; m_LineMesh = new Mesh(); m_LineMaterial = CreateHighlightLineMaterial(); Undo.undoRedoPerformed += UndoRedoPerformed; #if UNITY_2019_1_OR_NEWER SceneView.duringSceneGui += DuringSceneGUI; #else SceneView.onSceneGUIDelegate += DuringSceneGUI; #endif DrawPolyLine(polygon.m_Points); EditorApplication.update += Update; PolyShape.PolyEditMode mode = polygon.polyEditMode; polygon.polyEditMode = PolyShape.PolyEditMode.None; SetPolyEditMode(mode); }