void OnSceneGUI() { MeshSimplify meshSimplify = target as MeshSimplify; bool bDrawSpheres = true; if (meshSimplify.m_meshSimplifyRoot != null) { if (meshSimplify.m_meshSimplifyRoot.m_bExpandRelevanceSpheres == false) { bDrawSpheres = false; } } else { if (meshSimplify.m_bExpandRelevanceSpheres == false) { bDrawSpheres = false; } } if (meshSimplify.m_aRelevanceSpheres != null && bDrawSpheres) { for (int nSphere = 0; nSphere < meshSimplify.m_aRelevanceSpheres.Length; nSphere++) { if (meshSimplify.m_aRelevanceSpheres[nSphere].m_bExpanded == false) { continue; } RelevanceSphere relevanceSphere = meshSimplify.m_aRelevanceSpheres[nSphere] as RelevanceSphere; if (Tools.current == Tool.Move) { EditorGUI.BeginChangeCheck(); Vector3 v3Position = Handles.PositionHandle(relevanceSphere.m_v3Position, Quaternion.Euler(relevanceSphere.m_v3Rotation)); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(meshSimplify, "Move Relevance Sphere"); relevanceSphere.m_v3Position = v3Position; meshSimplify.RestoreOriginalMesh(false, true); meshSimplify.SetDataDirty(true); EditorUtility.SetDirty(target); } } else if (Tools.current == Tool.Rotate) { EditorGUI.BeginChangeCheck(); Quaternion qRotation = Handles.RotationHandle(Quaternion.Euler(relevanceSphere.m_v3Rotation), relevanceSphere.m_v3Position); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(meshSimplify, "Rotate Relevance Sphere"); relevanceSphere.m_v3Rotation = qRotation.eulerAngles; meshSimplify.RestoreOriginalMesh(false, true); meshSimplify.SetDataDirty(true); EditorUtility.SetDirty(target); } } else if (Tools.current == Tool.Scale) { EditorGUI.BeginChangeCheck(); Vector3 v3Scale = Handles.ScaleHandle(relevanceSphere.m_v3Scale, relevanceSphere.m_v3Position, Quaternion.Euler(relevanceSphere.m_v3Rotation), HandleUtility.GetHandleSize(relevanceSphere.m_v3Position) * 1.0f); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(meshSimplify, "Scale Relevance Sphere"); relevanceSphere.m_v3Scale = v3Scale; meshSimplify.RestoreOriginalMesh(false, true); meshSimplify.SetDataDirty(true); EditorUtility.SetDirty(target); } } if (Event.current.type == EventType.Repaint) { Matrix4x4 mtxHandles = Handles.matrix; Handles.matrix = Matrix4x4.TRS(relevanceSphere.m_v3Position, Quaternion.Euler(relevanceSphere.m_v3Rotation), relevanceSphere.m_v3Scale); Handles.color = new Color(0.0f, 0.0f, 1.0f, 0.5f); Handles.SphereHandleCap(0, Vector3.zero, Quaternion.identity, 1.0f, EventType.Repaint); Handles.matrix = mtxHandles; } } } }