public virtual void Setup()
        {
            // do this here ??
            behaviors = new InputBehaviorSet();
            SpatialDeviceGrabBehavior behavior = new SpatialDeviceGrabBehavior(Scene.Context, (so) => { return(so == this.Target); })
            {
                Priority         = 1,
                RotationSpeed    = 0.25f,
                TranslationSpeed = 0.25f
            };

            behaviors.Add(behavior);


            indicators = new ToolIndicatorSet(this, Scene);

            float   h      = 300.0f;
            Frame3f f1     = Frame3f.Identity.Rotated(Quaternionf.AxisAngleD(Vector3f.AxisZ, 90.0f)).Translated(h * 0.5f * Vector3f.AxisY);
            var     plane1 = new SectionPlaneIndicator()
            {
                Width       = fDimension.Scene(h), // in mm
                SceneFrameF = () => { return(f1); }
            };

            indicators.AddIndicator(plane1);

            Frame3f f2     = Frame3f.Identity.Rotated(Quaternionf.AxisAngleD(Vector3f.AxisX, 90.0f)).Translated(h * 0.5f * Vector3f.AxisY);
            var     plane2 = new SectionPlaneIndicator()
            {
                Width       = fDimension.Scene(h), // in mm
                SceneFrameF = () => { return(f2); }
            };

            indicators.AddIndicator(plane2);
        }
Esempio n. 2
0
        public override void Connect(bool bRestore)
        {
            if (indicators == null)
            {
                FScene scene = GetScene();
                indicators = new SOSceneIndicatorSet(this, scene);

                LineIndicator line = new LineIndicator()
                {
                    LineWidth   = fDimension.Scene(0.5),
                    VisibleF    = () => { return(LineAlwaysVisible || SceneUtil.IsVisible(this)); },
                    SceneStartF = () => { return(MinPosS); },
                    SceneEndF   = () => { return(MaxPosS); },
                    LayerF      = () => { return(FPlatform.GeometryLayer); }
                };
                indicators.AddIndicator(line);

                SectionPlaneIndicator plane = new SectionPlaneIndicator()
                {
                    Width       = fDimension.Scene(() => { return(BoundsDim); }),
                    ColorF      = () => { return(Colorf.VideoYellow.WithAlpha(0.5f)); },
                    VisibleF    = () => { return(GetScene().IsSelected(this) || (active_gizmo != null && active_gizmo.IsCapturing)); },
                    SceneFrameF = () => {
                        Vector3f curPosS = GetLocalFrame(CoordSpace.SceneCoords).Origin;
                        return(new Frame3f(CenterPosS + (curPosS - MinPosS)));
                    }
                };
                indicators.AddIndicator(plane);
            }
        }
Esempio n. 3
0
        public OldPlaneCutTool(FScene scene, SceneObject target)
        {
            this.scene  = scene;
            this.target = target as DMeshSO;

            double plane_dim = 1.5 * this.target.Mesh.CachedBounds.DiagonalLength;

            behaviors = new InputBehaviorSet();

            // TODO is this where we should be doing this??
            behaviors.Add(
                new PlaneCutTool_SpatialBehavior(this, scene.Context)
            {
                Priority = 5
            });

            // shut off transform gizmo
            scene.Context.TransformManager.PushOverrideGizmoType(TransformManager.NoGizmoType);


            indicators = new ToolIndicatorSet(this, scene);
            SectionPlaneIndicator section_plane = new SectionPlaneIndicator()
            {
                SceneFrameF = () => { return(cut_plane); },
                Width       = fDimension.Scene(() => { return((float)(plane_dim)); })
            };

            indicators.AddIndicator(section_plane);
        }
Esempio n. 4
0
        public virtual void Setup()
        {
            // turn on xform gizmo
            Scene.Context.TransformManager.PushOverrideGizmoType(BendPlanePivotGizmo.DefaultTypeName);


            Vector3d ctrPt    = TargetSO.Mesh.CachedBounds.Center;
            Frame3f  nearestF = MeshQueries.NearestPointFrame(TargetSO.Mesh, TargetSO.Spatial, ctrPt, true);

            BendPlaneOriginS = SceneTransforms.ObjectToSceneP(TargetSO, nearestF.Origin);
            BendPlaneNormalS = Vector3d.AxisY;

            bendPlaneGizmoSO = new BendPlanePivotSO();
            bendPlaneGizmoSO.Create(Scene.PivotSOMaterial, Scene.FrameSOMaterial);
            bendPlaneGizmoSO.OnTransformModified += OnBendPlaneTransformModified;
            Scene.AddSceneObject(bendPlaneGizmoSO);

            Frame3f cutFrameS = new Frame3f(BendPlaneOriginS); cutFrameS.AlignAxis(1, (Vector3f)BendPlaneNormalS);

            bendPlaneGizmoSO.SetLocalFrame(cutFrameS, CoordSpace.SceneCoords);

            allow_selection_changes = true;
            Scene.Select(bendPlaneGizmoSO, true);
            allow_selection_changes = false;


            StandardIndicatorFactory factory   = new StandardIndicatorFactory();
            SectionPlaneIndicator    bendPlane = factory.MakeSectionPlaneIndicator(
                100, "bendPlane",
                fDimension.Scene(100),
                () => { return(new Frame3f(BendPlaneOriginS, BendPlaneNormalS)); },
                () => { return(new Colorf(Colorf.LightGreen, 0.5f)); },
                () => { return(true); }
                );

            Indicators.AddIndicator(bendPlane);

            // save initial vtx positions
            VertexPositions = new Vector3d[TargetSO.Mesh.MaxVertexID];
            foreach (int vid in TargetSO.Mesh.VertexIndices())
            {
                VertexPositions[vid] = TargetSO.Mesh.GetVertex(vid);
            }

            PreviewSO = TargetSO.Duplicate() as DMeshSO;
            Scene.AddSceneObject(PreviewSO);
            //PreviewSO.AssignSOMaterial(Scene.TransparentNewSOMaterial);

            fMaterial transMat = MaterialUtil.CreateTransparentMaterial(Colorf.BlueMetal.SetAlpha(0.1f));

            TargetSO.PushOverrideMaterial(transMat);
            TargetSO.SetLayer(FPlatform.WidgetOverlayLayer);
        }
        /// <summary>
        /// called on click-down
        /// </summary>
        override public void Begin(SceneObject so, Vector2d downPos, Ray3f downRay)
        {
            SORayHit hit;

            if (TargetSO.FindRayIntersection(downRay, out hit) == false)
            {
                return;
            }

            Vector3d scenePos = SceneTransforms.WorldToSceneP(this.Scene, hit.hitPos);

            CurrentHitPosS = new Frame3f(scenePos);

            float fObjectT = (CurrentHitPosS.Origin - ObjectFrameS.Origin).Dot(ObjectFrameS.Y);

            CurrentPlaneFrameS = ObjectFrameS.Translated(fObjectT, 1);

            if (have_set_plane == false)
            {
                sphereIndicator = IndicatorBuilder.MakeSphereIndicator(0, "hit_point",
                                                                       fDimension.Scene(sphere_indicator_size * 0.5),
                                                                       () => { return(CurrentHitPosS); },
                                                                       () => { return(Colorf.Orange); },
                                                                       () => { return(true); });
                Indicators.AddIndicator(sphereIndicator);
                sphereIndicator.RootGameObject.SetName("hit_point");

                planeIndicator = IndicatorBuilder.MakeSectionPlaneIndicator(1, "section_plane",
                                                                            fDimension.Scene(plane_indicator_width),
                                                                            () => { return(CurrentPlaneFrameS); },
                                                                            () => { return(new Colorf(Colorf.LightGreen, 0.5f)); },
                                                                            () => { return(true); });
                Indicators.AddIndicator(planeIndicator);
                planeIndicator.RootGameObject.SetName("section_plane");

                have_set_plane = true;
            }
        }
        public override void Setup()
        {
            StartPointID = AppendSurfacePoint("StartPoint", Colorf.Blue);
            EndPointID   = AppendSurfacePoint("EndPoint", Colorf.Green);

            //LineIndicator line = new LineIndicator() {
            //    LineWidth = fDimension.Scene(1.0f),
            //    SceneStartF = () => { return GizmoPoints[StartPointID].currentFrameS.Origin; },
            //    SceneEndF = () => { return GizmoPoints[EndPointID].currentFrameS.Origin; },
            //};
            //indicators.AddIndicator(line);
            //indicators.SetLayer(line, FPlatform.HUDOverlay);   // has to be hud overlay or it will be clipped by depth render

            Frame3f TargetFrameS = TargetSO.GetLocalFrame(CoordSpace.SceneCoords);

            TargetAxis = new Line3d(TargetFrameS.Origin, Vector3d.AxisY);

            SectionPlaneIndicator startPlane = IndicatorBuilder.MakeSectionPlaneIndicator(
                100, "startPlane",
                fDimension.Scene(plane_indicator_width),
                () => { return(new Frame3f(TargetAxis.ClosestPoint(GizmoPoints[StartPointID].currentFrameS.Origin))); },
                () => { return(new Colorf(Colorf.LightGreen, 0.5f)); },
                () => { return(true); }
                );

            Indicators.AddIndicator(startPlane);

            SectionPlaneIndicator endPlane = IndicatorBuilder.MakeSectionPlaneIndicator(
                101, "endPlane",
                fDimension.Scene(plane_indicator_width),
                () => { return(new Frame3f(TargetAxis.ClosestPoint(GizmoPoints[EndPointID].currentFrameS.Origin))); },
                () => { return(new Colorf(Colorf.LightGreen, 0.5f)); },
                () => { return(true); }
                );

            Indicators.AddIndicator(endPlane);
        }
Esempio n. 7
0
        public RadialMeasureTool(FScene scene, SceneObject target)
        {
            this.scene = scene;

            behaviors = new InputBehaviorSet();

            // TODO is this where we should be doing this??
            behaviors.Add(
                new RadialMeasureTool_MouseBehavior(scene.Context)
            {
                Priority = 5
            });
            //behaviors.Add(
            //    new RevolveTool_SpatialDeviceBehavior(scene.ActiveController) { Priority = 5 });

            // shut off transform gizmo
            scene.Context.TransformManager.PushOverrideGizmoType(TransformManager.NoGizmoType);

            scene.SelectionChangedEvent += Scene_SelectionChangedEvent;

            this.meshTarget = target as MeshSO;

            var boundsW = meshTarget.GetBoundingBox(CoordSpace.WorldCoords);

            measureHitPos = boundsW.Center;
            update_measurement();


            indicators = new ToolIndicatorSet(this, scene);
            TextLabelIndicator dimensionLabel = new TextLabelIndicator()
            {
                ScenePositionF = () => { return(displayPosS + 0.01f * Vector3f.AxisY); },
                TextHeight     = fDimension.Scene(0.05f),
                DimensionTextF = () => { return(" " + (curDimension * 100).ToString("F2") + "cm"); }
            };

            indicators.AddIndicator(dimensionLabel);
            CircleIndicator circle = new CircleIndicator()
            {
                SceneFrameF = () => { return(new Frame3f(circleCenterS)); },
                RadiusF     = () => { return((float)(curDimension * 0.5)); },
                ColorF      = () => { return(new Colorf(Colorf.VideoRed, 0.5f)); },
                LineWidth   = fDimension.Scene(0.001f)
            };

            indicators.AddIndicator(circle);
            LineIndicator diag = new LineIndicator()
            {
                SceneStartF = () => { return(maxStart); },
                SceneEndF   = () => { return(maxEnd); },
                ColorF      = () => { return(Colorf.VideoRed); },
                LineWidth   = fDimension.Scene(0.001f)
            };

            indicators.AddIndicator(diag);
            SectionPlaneIndicator section_plane = new SectionPlaneIndicator()
            {
                SceneFrameF = () => { return(new Frame3f(displayPosS)); },
                Width       = fDimension.Scene(() => { return((float)(curDimension * 1.5)); })
            };

            indicators.AddIndicator(section_plane);
        }