public void OnSceneGUI() { Event e = Event.current; if(poly && !poly.isEditable) return; // Force orthographic camera and x/y axis SceneView sceneView = SceneView.lastActiveSceneView; if(!sceneView) return; sceneView.orthographic = true; switch(poly.drawSettings.axis) { case Axis.Forward: sceneView.rotation = Quaternion.identity; break; case Axis.Up: sceneView.rotation = Quaternion.Euler(Vector3.right*90f); break; case Axis.Right: sceneView.rotation = Quaternion.Euler(-Vector3.up*90f); break; } List<PolydrawPoint3> points = new List<PolydrawPoint3>(); for (int i = 0; i < poly.points.Count; i++) { PolydrawPoint2 point2 = poly.points[i]; Vector2 v2 = point2.vector; Vector3 v3 = poly.transform.TransformPoint(v2.ToVector3(poly.drawSettings.axis, poly.drawSettings.zPosition)); PolydrawPoint3 point3 = new PolydrawPoint3(v3); point3.borderIgnored = point2.borderIgnored; points.Add(point3); } // listen for shortcuts ShortcutListener(e); // draw handles // draws PositionHandles and delete / point no info DrawHandles(points); if( DrawInsertPointGUI(points) ) return; if(earlyOut) return; // Give us control of the scene view int controlID = GUIUtility.GetControlID(FocusType.Passive); HandleUtility.AddDefaultControl(controlID); Tools.current = Tool.None; switch(poly.drawStyle) { case DrawStyle.Point: PointDrawStyleInput(sceneView.camera, e, points); break; case DrawStyle.Continuous: ContinuousDrawStyleInput(sceneView.camera, e, points); break; default: break; } }
// TODO -- account for scale and rotation public static void CenterPivot(this PolydrawObject poly) { if(!poly.isValid) return; List<PolydrawPoint3> points = new List<PolydrawPoint3>(); for (int i = 0; i < poly.points.Count; i++) { PolydrawPoint2 point2 = poly.points[i]; Vector2 v2 = point2.vector; Vector3 v3 = poly.transform.TransformPoint(v2.ToVector3(poly.drawSettings.axis, poly.drawSettings.zPosition)); PolydrawPoint3 point3 = new PolydrawPoint3(v3); point3.borderIgnored = point2.borderIgnored; points.Add(point3); } Vector3 avg = Vector3.zero; for(int i = 0; i < points.Count; i++) avg += points[i].vector; avg /= (float)points.Count; for(int i = 0; i < points.Count; i++) points[i].vector -= avg; poly.points = points.ToPolydrawPoint2(poly.drawSettings.axis); poly.Refresh(); // go.GetComponent<MeshFilter>().sharedMesh.vertices = v; poly.transform.position = avg; }