Example #1
0
        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();
        }
Example #2
0
        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;
        }
Example #4
0
        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()); }
            };
        }
Example #5
0
 public AxisParameterEditWidget(ITransformGizmo parent, PrimitiveSO primitive, FScene scene)
 {
     //this.parent = parent;
     this.primitive = primitive;
     this.scene     = scene;
 }