Beispiel #1
0
	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;
	}