static void CreatePrimitiveBrush(PrimitiveBrushType brushType) { Vector3 position = GetPositionForNewBrush(); GameObject newBrushObject = csgModel.CreateBrush(brushType, position); // Set the selection to the new object Selection.activeGameObject = newBrushObject; Undo.RegisterCreatedObjectUndo(newBrushObject, "Create Brush"); }
static void OnSelectedCreateOption(object userData) { if (userData.GetType() == typeof(PrimitiveBrushType)) { GameObject newBrushObject = csgModel.CreateBrush((PrimitiveBrushType)userData); if (SceneView.lastActiveSceneView != null) { Transform cameraTransform = SceneView.lastActiveSceneView.camera.transform; Ray ray = new Ray(cameraTransform.position, cameraTransform.forward); List <PolygonRaycastHit> hits = csgModel.RaycastBrushesAll(ray); if (hits.Count > 0) { Vector3 newPosition = hits[0].Point; // Back a unit, since the brush is around 2 units in each dimensions newPosition += hits[0].Normal; if (CurrentSettings.PositionSnappingEnabled) { float snapDistance = CurrentSettings.PositionSnapDistance; newPosition = MathHelper.RoundVector3(newPosition, snapDistance); newBrushObject.transform.position = newPosition; } } else { Vector3 newPosition = SceneView.lastActiveSceneView.pivot; if (CurrentSettings.PositionSnappingEnabled) { float snapDistance = CurrentSettings.PositionSnapDistance; newPosition = MathHelper.RoundVector3(newPosition, snapDistance); newBrushObject.transform.position = newPosition; } } } newBrushObject.GetComponent <Brush>().Invalidate(true); // Set the selection to the new object Selection.activeGameObject = newBrushObject; Undo.RegisterCreatedObjectUndo(newBrushObject, "Create Brush"); } }