override protected void BuildGizmo() { gizmo.SetName("EditPrimitiveGizmo"); float fAlpha = 0.5f; stdMaterial = MaterialUtil.CreateTransparentMaterial(Color.yellow, fAlpha); stdHoverMaterial = MaterialUtil.CreateStandardMaterial(Color.yellow); // [TODO] this should iterate through targets... ?? Debug.Assert(this.targets.Count == 1); // object origin foreach (var so in Targets) { if ((so is PrimitiveSO) == false) { continue; } PrimitiveSO pso = so as PrimitiveSO; pso.Parameters.OnParameterModified += on_parameter_modified; float fVertMult = 1.0f; float fHorzMult = 1.0f; if (pso.Center == CenterModes.Base) { fHorzMult = 2.0f; } if (pso is CylinderSO) { add_axis_widget(pso, Vector3.up, fVertMult, "scaled_height", () => { return(pso.Parameters.GetValueFloat("scaled_height") * 0.5f * Vector3.up); }); add_axis_widget(pso, Vector3.right, 1.0f, "scaled_radius", () => { return(pso.Parameters.GetValueFloat("scaled_radius") * Vector3.right); }); } else if (pso is SphereSO) { add_axis_widget(pso, Vector3.up, 1.0f, "scaled_diameter", () => { return(pso.Parameters.GetValueFloat("scaled_diameter") * 0.5f * Vector3.up); }); } else if (pso is BoxSO) { add_axis_widget(pso, Vector3.up, fVertMult, "scaled_height", () => { return(pso.Parameters.GetValueFloat("scaled_height") * 0.5f * Vector3.up); }); add_axis_widget(pso, Vector3.right, fHorzMult, "scaled_width", () => { return(pso.Parameters.GetValueFloat("scaled_width") * 0.5f * Vector3.right); }); add_axis_widget(pso, Vector3.forward, fHorzMult, "scaled_depth", () => { return(pso.Parameters.GetValueFloat("scaled_depth") * 0.5f * Vector3.forward); }); } } gizmo.Hide(); }
void generate_points(PrimitiveSO primSO, Frame3f targetSceneF) { PrimitiveSnapGenerator snapGen = new PrimitiveSnapGenerator(); List <ISnapPoint> points = snapGen.GeneratePoints(primSO); foreach (ISnapPoint pt in points) { Frame3f objF = targetSceneF.ToFrame(pt.FrameS); snapFramesL.Add(objF); } }
public void EndDraw() { // store undo/redo record for new primitive PrimitiveSO primSO = primitive.BuildSO(scene, scene.DefaultSOMaterial); scene.History.PushChange( new AddSOChange() { scene = scene, so = primSO, bKeepWorldPosition = false }); scene.History.PushInteractionCheckpoint(); primitive.Destroy(); primitive = null; }
void add_axis_widget(PrimitiveSO primitive, Vector3 frameAxisV, float deltaMult, string paramName, Func <Vector3> localPositionF) { GameObject go = AppendMeshGO(paramName, UnityUtil.GetPrimitiveMesh(PrimitiveType.Cube), stdMaterial, gizmo); go.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f); Frame3f sourceFrame = new Frame3f(localPositionF()); UnityUtil.SetGameObjectFrame(go, sourceFrame, CoordSpace.ObjectCoords); WidgetParameterUpdates.Add(() => { UnityUtil.SetGameObjectFrame(go, new Frame3f(localPositionF()), CoordSpace.ObjectCoords); }); Widgets[go] = new AxisParameterEditWidget(this, primitive, this.parentScene) { RootGameObject = go, StandardMaterial = stdMaterial, HoverMaterial = stdHoverMaterial, AxisParamName = paramName, AxisVectorInFrame = frameAxisV, DeltaScalingF = () => { return(deltaMult / parentScene.GetSceneScale()); } }; }
public AxisParameterEditWidget(ITransformGizmo parent, PrimitiveSO primitive, FScene scene) { //this.parent = parent; this.primitive = primitive; this.scene = scene; }