コード例 #1
0
        public BaseNAryInputSOTool(FScene scene, List <DMeshSO> meshSOs)
        {
            this.Scene = scene;
            if (meshSOs == null || meshSOs.Count == 0)
            {
                this.InputSOs = scene.FindSceneObjectsOfType <DMeshSO>(false, true, true);
            }
            else
            {
                this.InputSOs = meshSOs;
            }
            if (this.InputSOs.Count < 2)
            {
                throw new Exception("BaseNAryInputSOTool: requires at least two inputs!");
            }

            // no behaviors..
            behaviors = new InputBehaviorSet();

            // hide target objects
            set_targets_visibility(false);

            // disable transformations
            Scene.Context.TransformManager.PushOverrideGizmoType(TransformManager.NoGizmoType);

            // set up parameters
            parameters = new ParameterSet();
        }
コード例 #2
0
        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);
        }
コード例 #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);
        }
コード例 #4
0
ファイル: MultiPointTool.cs プロジェクト: tomleetv/gsCore
        public MultiPointTool(FScene scene, SceneObject target)
        {
            this.Scene = scene;
            TargetSO   = target;

            // do this here ??
            behaviors = new InputBehaviorSet();
            behaviors.Add(
                new MultiPointTool_2DBehavior(scene.Context, this)
            {
                Priority = 5
            });
            if (FPlatform.IsUsingVR())
            {
                behaviors.Add(
                    new MultiPointTool_SpatialBehavior(scene.Context, this)
                {
                    Priority = 5
                });
            }

            Indicators       = new ToolIndicatorSet(this, scene);
            IndicatorBuilder = new StandardIndicatorFactory();
            GizmoPoints      = new Dictionary <int, ControlPoint>();
            PointHitTestF    = PointIntersectionTest;
        }
コード例 #5
0
        public SnapDrawPrimitivesTool(FScene scene)
        {
            this.scene = scene;

            behaviors = new InputBehaviorSet();

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

            // generate snap target set
            Snaps = SnapSet.CreateStandard(scene);
            Snaps.EnableSnapSegments = true;

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

            scene.SelectionChangedEvent += Scene_SelectionChangedEvent;
            // initialize active set with input selection
            Scene_SelectionChangedEvent(null, null);
        }
コード例 #6
0
        public RevolveTool(FScene scene, List <SceneObject> targets)
        {
            this.scene = scene;

            behaviors = new InputBehaviorSet();

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

            // generate snap target set
            Snaps = SnapSet.CreateStandard(scene);
            Snaps.EnableSnapSegments = false;
            Snaps.EnableSnapPoints   = false;

            // shut off transform gizmo
            //scene.ActiveController.TransformManager.SetOverrideGizmoType(TransformManager.NoGizmoType);

            scene.SelectionChangedEvent += Scene_SelectionChangedEvent;
            // initialize active set with input selection
            Scene_SelectionChangedEvent(null, null);


            if (targets != null)
            {
                if (targets.Count == 2 && targets[0] is PolyCurveSO && targets[1] is PolyCurveSO)
                {
                    PolyCurveSO curveSO = targets[0] as PolyCurveSO;
                    PolyCurveSO axisSO  = targets[1] as PolyCurveSO;
                    set_curve(curveSO, true);
                    set_axis(axisSO, true);
                }
                else
                {
                    SceneObject foundCurveSO = targets.Find((so) => { return(so is PolyCurveSO); });
                    if (foundCurveSO != null)
                    {
                        set_curve(foundCurveSO as PolyCurveSO, false);
                    }
                    SceneObject otherSO = targets.Find((so) => { return(!(so is PolyCurveSO)); });
                    if (otherSO != null)
                    {
                        set_axis(otherSO, false);
                    }
                }
            }
        }
コード例 #7
0
ファイル: PurgeSpiralTool.cs プロジェクト: tomleetv/Cotangent
        public PurgeSpiralTool(FScene scene)
        {
            this.Scene = scene;

            // no behaviors..
            behaviors = new InputBehaviorSet();

            // disable transformations
            Scene.Context.TransformManager.PushOverrideGizmoType(TransformManager.NoGizmoType);

            // set up parameters
            parameters = new ParameterSet();
        }
コード例 #8
0
        public BendTool(FScene scene, DMeshSO target)
        {
            this.Scene = scene;
            TargetSO   = target;

            // do this here ??
            behaviors = new InputBehaviorSet();
            //behaviors.Add(
            //    new MultiPointTool_2DBehavior(scene.Context, this) { Priority = 5 });
            //if (FPlatform.IsUsingVR()) {
            //    behaviors.Add(
            //        new MultiPointTool_SpatialBehavior(scene.Context, this) { Priority = 5 });
            //}

            Indicators = new ToolIndicatorSet(this, scene);
        }
コード例 #9
0
ファイル: SetDimensionsTool.cs プロジェクト: tomleetv/gsTools
        public SetDimensionsTool(FScene scene, List <DMeshSO> meshSOs)
        {
            this.Scene = scene;
            if (meshSOs == null || meshSOs.Count == 0)
            {
                this.InputSOs = scene.FindSceneObjectsOfType <DMeshSO>(false, true, true);
            }
            else
            {
                this.InputSOs = meshSOs;
            }

            // no behaviors..
            behaviors = new InputBehaviorSet();

            // disable transformations
            Scene.Context.TransformManager.PushOverrideGizmoType(TransformManager.NoGizmoType);

            // set up parameters
            parameters = new ParameterSet();
        }
コード例 #10
0
ファイル: FillHolesTool.cs プロジェクト: tomleetv/gsTools
        public FillHolesTool(FScene scene, DMeshSO target)
        {
            this.Scene  = scene;
            this.target = target;

            behaviors = new InputBehaviorSet();

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

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

            // set up parameters
            initialize_parameters();

            SceneUtil.SetVisible(Target, false);
        }
コード例 #11
0
        public TwoPointMeasureTool(FScene scene, List <SceneObject> targets)
        {
            this.scene      = scene;
            SpecificTargets = (targets == null) ? null : new List <SceneObject>(targets);

            setPointsS        = new Vector3d[2];
            setPointsS[0]     = setPointsS[1] = Vector3d.Zero;
            snappedPointsS    = new Vector3d[2];
            snappedPointsS[0] = snappedPointsS[1] = Vector3d.Zero;
            point_initialized = new bool[2] {
                false, false
            };

            behaviors = new InputBehaviorSet();
            if (FPlatform.IsUsingVR())
            {
                behaviors.Add(new TwoPointMeasureTool_SpatialDeviceBehavior(scene.Context, this)
                {
                    Priority = 5
                });
            }
            if (FPlatform.IsTouchDevice())
            {
                behaviors.Add(new TwoPointMeasureTool_TouchBehavior(scene.Context, this)
                {
                    Priority = 5
                });
            }
            behaviors.Add(
                new TwoPointMeasureTool_MouseBehavior(scene.Context, this)
            {
                Priority = 5
            });

            // shut off transform gizmo
            scene.Context.TransformManager.PushOverrideGizmoType(TransformManager.NoGizmoType);
            scene.SelectionChangedEvent += Scene_SelectionChangedEvent;
        }
コード例 #12
0
        public SeparateSolidsTool(FScene scene, List <DMeshSO> meshSOs)
        {
            this.Scene = scene;
            if (meshSOs == null || meshSOs.Count == 0)
            {
                this.InputSOs = scene.FindSceneObjectsOfType <DMeshSO>(false, true, true);
            }
            else
            {
                this.InputSOs = meshSOs;
            }

            // no behaviors..
            behaviors = new InputBehaviorSet();

            // hide target objects
            set_targets_visibility(false);

            // disable transformations
            Scene.Context.TransformManager.PushOverrideGizmoType(TransformManager.NoGizmoType);

            // set up parameters
            initialize_parameters();
        }
コード例 #13
0
        public DrawCurveTool(FScene scene)
        {
            this.scene = scene;

            behaviors = new InputBehaviorSet();

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

            // restore radius
            if (SavedSettings.Restore("DrawCurveTool_width") != null)
            {
                width = (float)SavedSettings.Restore("DrawCurveTool_width");
            }
        }
コード例 #14
0
        public DrawTubeTool(FScene scene)
        {
            this.scene = scene;

            behaviors = new InputBehaviorSet();

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

            // restore radius
            if (SavedSettings.Restore("DrawTubeTool_radius") != null)
            {
                radius = (float)SavedSettings.Restore("DrawTubeTool_radius");
            }


            indicators = new ToolIndicatorSet(this, scene);
            BrushCursorSphere brushSphere = new BrushCursorSphere()
            {
                PositionF = () => { return(lastPreviewPos.Origin); },
                Radius    = fDimension.Scene(() => { return(Radius); })
            };

            brushSphereMat       = MaterialUtil.CreateTransparentMaterialF(Colorf.CornflowerBlue, 0.2f);
            brushSphere.material = brushSphereMat;
            indicators.AddIndicator(brushSphere);
        }
コード例 #15
0
ファイル: RadialMeasureTool.cs プロジェクト: tomleetv/gsCore
        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);
        }