Exemplo n.º 1
0
        virtual public bool EndCapture(InputEvent e)
        {
            if (activeWidget != null)
            {
                activeWidget.EndCapture(targetWrapper);
                MaterialUtil.SetMaterial(activeWidget.RootGameObject, activeWidget.StandardMaterial);

                // tell wrapper we are done with capture, so it should bake transform/etc
                bool bModified = targetWrapper.DoneTransformation(EmitChanges);
                if (bModified)
                {
                    // update gizmo
                    onTransformModified(null);
                    // allow client/subclass to add any other change records
                    OnTransformInteractionEnd();
                    // gizmos drop change events by default
                    if (EmitChanges)
                    {
                        Scene.History.PushInteractionCheckpoint();
                    }
                }

                activeWidget = null;
            }
            return(true);
        }
Exemplo n.º 2
0
        // called on per-frame Update()
        virtual public void PreRender()
        {
            root.Show();

            float useDegrees = (GizmoVisualDegrees > 0) ? GizmoVisualDegrees : SceneGraphConfig.DefaultAxisGizmoVisualDegrees;
            float fWorldSize = VRUtil.GetVRRadiusForVisualAngle(
                root.GetPosition(),
                parentScene.ActiveCamera.GetPosition(),
                useDegrees);
            float fSceneSize = fWorldSize / parentScene.GetSceneScale();
            float fGeomScale = fSceneSize / initialGizmoRadius;

            root.SetLocalScale(new Vector3f(fGeomScale));

            foreach (var widget in Widgets)
            {
                widget.Value.UpdateGizmoWorldSize(fWorldSize);
            }

            if (DynamicVisibilityFiltering && targetWrapper != null)
            {
                Frame3f  frameW  = targetWrapper.GetLocalFrame(CoordSpace.WorldCoords);
                Vector3d camPosW = parentScene.ActiveCamera.GetPosition();
                foreach (var go in enabledWidgetGOs)
                {
                    Standard3DTransformWidget widget = Widgets[go];
                    bool visible = widget.CheckVisibility(ref frameW, ref camPosW);
                    go.SetVisible(visible);
                }
            }
        }
Exemplo n.º 3
0
        virtual protected fGameObject append_widget(AxisGizmoFlags widgetType, int nAxis, string name,
                                                    fMaterial material, fMaterial hoverMaterial)
        {
            var useMaterial = (Factory.UniqueColorPerWidget || material == null)
                ? Factory.MakeMaterial(widgetType) : material;
            var useHoverMaterial = (Factory.UniqueColorPerWidget || hoverMaterial == null)
                ? Factory.MakeHoverMaterial(widgetType) : hoverMaterial;
            var go = AppendMeshGO(name, Factory.MakeGeometry(widgetType), useMaterial, RootGameObject, true);

            Standard3DTransformWidget widget = null;

            switch (widgetType)
            {
            case AxisGizmoFlags.AxisTranslateX:
            case AxisGizmoFlags.AxisTranslateY:
            case AxisGizmoFlags.AxisTranslateZ:
                widget = new AxisTranslationWidget(nAxis)
                {
                    RootGameObject    = go, StandardMaterial = useMaterial, HoverMaterial = useHoverMaterial,
                    TranslationScaleF = () => { return(TranslateSpeed / parentScene.GetSceneScale()); }
                };
                break;

            case AxisGizmoFlags.AxisRotateX:
            case AxisGizmoFlags.AxisRotateY:
            case AxisGizmoFlags.AxisRotateZ:
                widget = new AxisRotationWidget(nAxis)
                {
                    RootGameObject   = go, StandardMaterial = useMaterial, HoverMaterial = useHoverMaterial,
                    EnableSnapping   = EnableRotationSnapping,
                    SnapIncrementDeg = RotationSnapStepSizeDeg
                };
                break;

            case AxisGizmoFlags.PlaneTranslateX:
            case AxisGizmoFlags.PlaneTranslateY:
            case AxisGizmoFlags.PlaneTranslateZ:
                widget = new PlaneTranslationWidget(nAxis)
                {
                    RootGameObject    = go, StandardMaterial = useMaterial, HoverMaterial = useHoverMaterial,
                    TranslationScaleF = () => { return(TranslateSpeed / parentScene.GetSceneScale()); }
                };
                break;

            case AxisGizmoFlags.UniformScale:
                widget = new UniformScaleWidget(parentScene.ActiveCamera)
                {
                    RootGameObject   = go, StandardMaterial = useMaterial, HoverMaterial = useHoverMaterial,
                    ScaleMultiplierF = () => { return(ScaleSpeed / parentScene.GetSceneScale()); }
                };
                break;

            default:
                throw new Exception("DefaultAxisGizmoWidgetFactory.MakeHoverMaterial: invalid widget type " + widget.ToString());
            }

            Widgets[go] = widget;
            return(go);
        }
Exemplo n.º 4
0
 public virtual void EndHover(Ray3f ray)
 {
     if (hoverWidget != null)
     {
         MaterialUtil.SetMaterial(hoverWidget.RootGameObject, hoverWidget.StandardMaterial);
         hoverWidget = null;
     }
 }
Exemplo n.º 5
0
 public virtual void UpdateHover(Ray3f ray, UIRayHit hit)
 {
     if (hoverWidget != null)
     {
         EndHover(ray);
     }
     if (Widgets.ContainsKey(hit.hitGO))
     {
         hoverWidget = Widgets[hit.hitGO];
         MaterialUtil.SetMaterial(hoverWidget.RootGameObject, hoverWidget.HoverMaterial);
     }
 }
Exemplo n.º 6
0
        virtual public bool BeginCapture(InputEvent e)
        {
            activeWidget = null;

            // if the hit gameobject has a widget attached to it, begin capture & transformation
            // TODO maybe wrapper class should have Begin/Update/End capture functions, then we do not need BeginTransformation/EndTransformation ?
            if (Widgets.ContainsKey(e.hit.hitGO))
            {
                Standard3DTransformWidget w = Widgets [e.hit.hitGO];
                if (w.BeginCapture(targetWrapper, e.ray, e.hit.toUIHit()))
                {
                    MaterialUtil.SetMaterial(w.RootGameObject, w.HoverMaterial);
                    targetWrapper.BeginTransformation();
                    activeWidget = w;
                    OnTransformInteractionStart();
                    return(true);
                }
            }
            return(false);
        }