コード例 #1
0
        public override void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
        {
            var selectedItem = RootSelection;

            ActiveSelectedItem = selectedItem;

            if (mouseEvent3D.MouseEvent2D.Button == MouseButtons.Left &&
                mouseEvent3D.info != null &&
                selectedItem != null)
            {
                hadClickOnControl = true;

                xValueDisplayInfo.Visible = true;
                yValueDisplayInfo.Visible = true;

                hitPlane            = new PlaneShape(Vector3.UnitZ, mouseEvent3D.info.HitPosition.Z, null);
                originalPointToMove = GetEdgePosition(selectedItem, edgeIndex);

                initialHitPosition      = mouseEvent3D.info.HitPosition;
                transformOnMouseDown    = transformAppliedByThis = selectedItem.Matrix;
                mouseDownSelectedBounds = selectedItem.GetAxisAlignedBoundingBox();
            }

            base.OnMouseDown(mouseEvent3D);
        }
コード例 #2
0
        public override void OnMouseUp(MouseEventArgs mouseEvent)
        {
            Invalidate();

            if (SuppressUiVolumes)
            {
                return;
            }

            Ray  ray = this.World.GetRayForLocalBounds(mouseEvent.Position);
            bool anyInteractionVolumeHit = FindInteractionVolumeHit(ray, out InteractionVolume iaVolume, out IntersectInfo info);
            var  mouseEvent3D            = new Mouse3DEventArgs(mouseEvent, ray, info);

            if (MouseDownOnInteractionVolume && mouseDownIAVolume != null)
            {
                mouseDownIAVolume.OnMouseUp(mouseEvent3D);
                SelectedInteractionVolume = null;

                mouseDownIAVolume = null;
            }
            else
            {
                mouseDownIAVolume = null;

                if (anyInteractionVolumeHit)
                {
                    iaVolume.OnMouseUp(mouseEvent3D);
                }

                SelectedInteractionVolume = null;
            }

            base.OnMouseUp(mouseEvent);
        }
コード例 #3
0
        public override void OnMouseMove(MouseEventArgs mouseEvent)
        {
            lastMouseMovePosition = mouseEvent.Position;
            base.OnMouseMove(mouseEvent);

            if (SuppressObject3DControls ||
                !this.PositionWithinLocalBounds(mouseEvent.X, mouseEvent.Y) ||
                !CanSelectObject())
            {
                return;
            }

            Ray           ray          = this.World.GetRayForLocalBounds(mouseEvent.Position);
            IntersectInfo info         = null;
            var           mouseEvent3D = new Mouse3DEventArgs(mouseEvent, ray, info);

            if (MouseDownOnObject3DControlVolume && mouseDownObject3DControl != null)
            {
                mouseDownObject3DControl.OnMouseMove(mouseEvent3D, false);
            }
            else
            {
                this.FindHitObject3DControl(ray, out IObject3DControl hitObject3DControl, out _);

                var object3DControls = this.Object3DControls;

                var overControl = false;
                foreach (var object3DControl in object3DControls)
                {
                    if (hitObject3DControl == object3DControl &&
                        hitObject3DControl.Visible)
                    {
                        overControl = true;

                        // we have found the control that got hit, wait 200 ms to see if we are still over the same control
                        UiThread.RunOnIdle(() =>
                        {
                            var ray2 = this.World.GetRayForLocalBounds(lastMouseMovePosition);
                            this.FindHitObject3DControl(ray2, out IObject3DControl stillOver3DControl, out _);

                            if (stillOver3DControl == hitObject3DControl)
                            {
                                // we are over the same control as the last mouse move so set the hovered object to it
                                HoveredObject3DControl = object3DControl;
                                object3DControl.OnMouseMove(mouseEvent3D, true);
                            }
                        }, .2);
                    }
                    else
                    {
                        object3DControl.OnMouseMove(mouseEvent3D, false);
                    }
                }

                if (overControl &&
                    hitObject3DControl is Object3DControl object3DControl2 &&
                    object3DControl2.RootSelection != null)
                {
                    ApplicationController.Instance.UiHint = "Click to edit values".Localize();
                }
コード例 #4
0
        public override void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
        {
            if (mouseEvent3D.info != null &&
                mouseEvent3D.MouseEvent2D.Button == MouseButtons.Left &&
                Object3DControlContext.Scene.SelectedItem != null)
            {
                hadClickOnControl  = true;
                activeSelectedItem = RootSelection;

                heightValueDisplayInfo.Visible = true;

                var selectedItem = activeSelectedItem;

                var bottomPosition = GetBottomPosition(selectedItem);
                var topPosition    = GetTopPosition(selectedItem);

                var upNormal    = (topPosition - bottomPosition).GetNormal();
                var sideNormal  = upNormal.Cross(mouseEvent3D.MouseRay.directionNormal).GetNormal();
                var planeNormal = upNormal.Cross(sideNormal).GetNormal();
                hitPlane = new PlaneShape(new Plane(planeNormal, mouseEvent3D.info.HitPosition), null);

                originalPointToMove = GetTopPosition(selectedItem);

                initialHitPosition = mouseEvent3D.info.HitPosition;
                if (selectedItem is IObjectWithHeight heightObject)
                {
                    heightOnMouseDown = heightObject.Height;
                }
            }

            base.OnMouseDown(mouseEvent3D);
        }
コード例 #5
0
        public void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
        {
            if (mouseOver != mouseIsOver)
            {
                mouseOver = mouseIsOver;
                context.GuiSurface.Invalidate();
            }

            if (downOnControl)
            {
                var ray              = context.World.GetRayForLocalBounds(mouseEvent3D.MouseEvent2D.Position);
                var scene            = context.Scene;
                var intersectionInfo = scene.GetBVHData().GetClosestIntersection(ray);
                if (intersectionInfo != null)
                {
                    foreach (var object3D in scene.Children)
                    {
                        if (object3D.GetBVHData().Contains(intersectionInfo.HitPosition))
                        {
                            var newPosition = intersectionInfo.HitPosition;
                            if (newPosition != getPosition())
                            {
                                setPosition(newPosition);
                                context.GuiSurface.Invalidate();
                                break;
                            }
                        }
                    }
                }
            }
        }
コード例 #6
0
        public override void OnMouseUp(MouseEventArgs mouseEvent)
        {
            Invalidate();

            if (SuppressObject3DControls)
            {
                return;
            }

            Ray  ray = this.World.GetRayForLocalBounds(mouseEvent.Position);
            bool anyObject3DControlVolumeHit = FindHitObject3DControl(ray, out IObject3DControl object3DControl, out IntersectInfo info);
            var  mouseEvent3D = new Mouse3DEventArgs(mouseEvent, ray, info);

            if (MouseDownOnObject3DControlVolume && mouseDownObject3DControl != null)
            {
                mouseDownObject3DControl.OnMouseUp(mouseEvent3D);
                SelectedObject3DControl = null;

                mouseDownObject3DControl = null;
            }
            else
            {
                mouseDownObject3DControl = null;

                if (anyObject3DControlVolumeHit)
                {
                    object3DControl.OnMouseUp(mouseEvent3D);
                }

                SelectedObject3DControl = null;
            }

            base.OnMouseUp(mouseEvent);
        }
コード例 #7
0
        public override void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
        {
            if (mouseEvent3D.info != null &&
                mouseEvent3D.MouseEvent2D.Button == MouseButtons.Left &&
                Object3DControlContext.Scene.SelectedItem != null)
            {
                hadClickOnControl  = true;
                activeSelectedItem = RootSelection;

                heightValueDisplayInfo.Visible = true;

                var selectedItem = activeSelectedItem;

                var bottomPosition = GetBottomPosition(selectedItem);
                var topPosition    = GetTopPosition(selectedItem);
                originalPointToMove = topPosition;

                var upNormal    = (topPosition - bottomPosition).GetNormal();
                var sideNormal  = upNormal.Cross(mouseEvent3D.MouseRay.directionNormal).GetNormal();
                var planeNormal = upNormal.Cross(sideNormal).GetNormal();
                hitPlane = new PlaneShape(new Plane(planeNormal, mouseEvent3D.info.HitPosition), null);

                initialHitPosition = mouseEvent3D.info.HitPosition;
                scaleController    = new ScaleController(Object3DControlContext, getWidth, setWidth, getDepth, setDepth, getHeight, setHeight, getDiameters, setDiameters);

                Object3DControlContext.Scene.ShowSelectionShadow = false;
            }

            base.OnMouseDown(mouseEvent3D);
        }
コード例 #8
0
        public override void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
        {
            if (mouseEvent3D.info != null && Object3DControlContext.Scene.SelectedItem != null)
            {
                hadClickOnControl  = true;
                activeSelectedItem = RootSelection;

                zValueDisplayInfo.Visible = true;

                var selectedItem = activeSelectedItem;

                double distanceToHit = Vector3Ex.Dot(mouseEvent3D.info.HitPosition, mouseEvent3D.MouseRay.directionNormal);
                hitPlane            = new PlaneShape(mouseEvent3D.MouseRay.directionNormal, distanceToHit, null);
                originalPointToMove = GetTopPosition(selectedItem);

                initialHitPosition = mouseEvent3D.info.HitPosition;
                if (selectedItem is IObjectWithHeight heightObject)
                {
                    heightOnMouseDown = heightObject.Height;
                }

                mouseDownSelectedBounds = selectedItem.GetAxisAlignedBoundingBox();
            }

            base.OnMouseDown(mouseEvent3D);
        }
コード例 #9
0
        public override void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
        {
            var selectedItem = RootSelection;

            ActiveSelectedItem = selectedItem;

            if (mouseEvent3D.MouseEvent2D.Button == MouseButtons.Left &&
                mouseEvent3D.info != null &&
                selectedItem != null)
            {
                hadClickOnControl = true;

                xValueDisplayInfo.Visible = true;
                yValueDisplayInfo.Visible = true;

                var edge0 = ObjectSpace.GetEdgePosition(selectedItem, quadrantIndex);
                var edge1 = ObjectSpace.GetEdgePosition(selectedItem, quadrantIndex + 1);
                var edge3 = ObjectSpace.GetEdgePosition(selectedItem, quadrantIndex + 2);

                var normal01    = (edge1 - edge0).GetNormal();
                var normal03    = (edge3 - edge0).GetNormal();
                var planeNormal = normal01.Cross(normal03).GetNormal();
                hitPlane = new PlaneShape(new Plane(planeNormal, edge0), null);

                initialHitPosition = mouseEvent3D.info.HitPosition;
                scaleController    = new ScaleController(Object3DControlContext, getWidth, setWidth, getDepth, setDepth, getHeight, setHeight);

                Object3DControlContext.Scene.ShowSelectionShadow = false;
            }

            base.OnMouseDown(mouseEvent3D);
        }
コード例 #10
0
        public override async void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
        {
            var selectedItem = RootSelection;

            ActiveSelectedItem = selectedItem;

            if (MouseIsOver || MouseDownOnControl)
            {
                diameterValueDisplayInfo.Visible = true;
            }
            else if (!hadClickOnControl || scaleController.HasChange)
            {
                diameterValueDisplayInfo.Visible = false;
            }

            if (MouseDownOnControl && hitPlane != null)
            {
                var info = hitPlane.GetClosestIntersection(mouseEvent3D.MouseRay);

                if (info != null &&
                    selectedItem != null)
                {
                    var delta = info.HitPosition - initialHitPosition;

                    var lockedBottomCenter = ObjectSpace.GetCenterPosition(selectedItem, placement);

                    var(hit, otherSide) = GetHitIndices(selectedItem);
                    var grabPositionEdge  = ObjectSpace.GetEdgePosition(selectedItem, otherSide);
                    var stretchDirection  = (ObjectSpace.GetEdgePosition(selectedItem, hit) - grabPositionEdge).GetNormal();
                    var deltaAlongStretch = stretchDirection.Dot(delta);

                    // scale it
                    var newSize = scaleController.InitialState.Diameters[diameterIndex];
                    newSize += deltaAlongStretch * 2;
                    newSize  = Math.Max(Math.Max(newSize, .001), Object3DControlContext.SnapGridDistance);

                    if (Object3DControlContext.SnapGridDistance > 0)
                    {
                        // snap this position to the grid
                        double snapGridDistance = Object3DControlContext.SnapGridDistance;

                        // snap this position to the grid
                        newSize = ((int)((newSize / snapGridDistance) + .5)) * snapGridDistance;
                    }

                    scaleController.ScaleDiameter(newSize, diameterIndex);

                    await selectedItem.Rebuild();

                    // and keep the locked edge in place
                    Vector3 newBottomCenter = ObjectSpace.GetCenterPosition(selectedItem, placement);

                    selectedItem.Matrix *= Matrix4X4.CreateTranslation(lockedBottomCenter - newBottomCenter);

                    Invalidate();
                }
            }

            base.OnMouseMove(mouseEvent3D, mouseIsOver);
        }
コード例 #11
0
        public override void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
        {
            var selectedItem = RootSelection;

            ActiveSelectedItem = selectedItem;

            if (mouseEvent3D.MouseEvent2D.Button == MouseButtons.Left &&
                mouseEvent3D.info != null &&
                selectedItem != null)
            {
                hadClickOnControl = true;

                diameterValueDisplayInfo.Visible = true;

                var(edge, otherSide) = GetHitPosition(selectedItem);

                var upNormal    = (edge - otherSide).GetNormal();
                var sideNormal  = upNormal.Cross(mouseEvent3D.MouseRay.directionNormal).GetNormal();
                var planeNormal = upNormal.Cross(sideNormal).GetNormal();
                hitPlane = new PlaneShape(new Plane(planeNormal, mouseEvent3D.info.HitPosition), null);

                initialHitPosition = mouseEvent3D.info.HitPosition;

                scaleController = new ScaleController(Object3DControlContext, null, null, null, null, getHeight, setHeight, getDiameters, setDiameters);

                Object3DControlContext.Scene.ShowSelectionShadow = false;
            }

            base.OnMouseDown(mouseEvent3D);
        }
コード例 #12
0
        public override async void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
        {
            var selectedItem = RootSelection;

            activeSelectedItem = selectedItem;
            if (MouseIsOver)
            {
                heightValueDisplayInfo.Visible = true;
            }
            else if (!hadClickOnControl)
            {
                heightValueDisplayInfo.Visible = false;
            }

            if (MouseDownOnControl)
            {
                IntersectInfo info = hitPlane.GetClosestIntersection(mouseEvent3D.MouseRay);

                if (info != null &&
                    selectedItem != null)
                {
                    var delta = info.HitPosition - initialHitPosition;

                    var bottom = GetBottomPosition(selectedItem);
                    var top    = GetTopPosition(selectedItem);

                    var up = top - bottom;

                    var newPosition = originalPointToMove + delta;

                    var    newSize          = (newPosition - bottom).Length;
                    double snapGridDistance = Object3DControlContext.SnapGridDistance;
                    // if we are about to scale the object to less than 0
                    if (up.Dot(info.HitPosition - bottom) < 0)
                    {
                        newSize = .001;
                    }

                    if (snapGridDistance > 0)
                    {
                        newSize = System.Math.Max(newSize, snapGridDistance);
                        // snap this position to the grid
                        newSize = ((int)((newSize / snapGridDistance) + .5)) * snapGridDistance;
                    }

                    scaleController.ScaleHeight(newSize);

                    await selectedItem.Rebuild();

                    var postScaleBottom = GetBottomPosition(selectedItem);

                    selectedItem.Translate(bottom - postScaleBottom);

                    Invalidate();
                }
            }

            base.OnMouseMove(mouseEvent3D, mouseIsOver);
        }
コード例 #13
0
        private void ModelEventSource3DOnMouseMove(object sender, Mouse3DEventArgs mouse3DEventArgs)
        {
            var modelHit = mouse3DEventArgs.RayHitResult.ModelHit as GeometryModel3D;

            //((GeometryModel3D)modelHit).Material = new DiffuseMaterial(Brushes.Red);

            SelectObject(modelHit);
        }
コード例 #14
0
 public void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
 {
     DownOnControl = true;
     ApplicationController.Instance.UiHint = UiHint;
     mouseDownPosition = getPosition();
     // Make sure we always get a new hit plane
     ResetHitPlane();
 }
コード例 #15
0
        public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)
        {
            if (activeSelectedItem is IObjectWithHeight heightObject)
            {
                SetHeightUndo(heightObject.Height);
            }

            base.OnMouseUp(mouseEvent3D);
        }
コード例 #16
0
        private void OnDuckMouseEnter(object sender, Mouse3DEventArgs e)
        {
            var hitVisual3D = e.HitObject as ModelVisual3D;

            if (_duckModels.Contains(hitVisual3D))
            {
                HighlightDuckVisual3D(hitVisual3D);
            }
        }
コード例 #17
0
 public void OnMouseUp(Mouse3DEventArgs mouseEvent3D)
 {
     if (DownOnControl)
     {
         DownOnControl = false;
         editComplete(mouseDownPosition);
         ApplicationController.Instance.UiHint = "";
     }
 }
コード例 #18
0
        public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)
        {
            if (hadClickOnControl)
            {
                Object3DControlContext.Scene.AddTransformSnapshot(transformOnMouseDown);
            }

            base.OnMouseUp(mouseEvent3D);
        }
コード例 #19
0
        public override async void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
        {
            var selectedItem = RootSelection;

            activeSelectedItem = selectedItem;
            if (MouseIsOver)
            {
                zValueDisplayInfo.Visible = true;
            }
            else if (!hadClickOnControl)
            {
                zValueDisplayInfo.Visible = false;
            }

            if (MouseDownOnControl)
            {
                IntersectInfo info = hitPlane.GetClosestIntersection(mouseEvent3D.MouseRay);

                if (info != null &&
                    selectedItem != null)
                {
                    var delta = info.HitPosition - initialHitPosition;

                    var newPosition = originalPointToMove + delta;

                    var lockedBottom = GetBottomPosition(selectedItem);

                    var newSize = (newPosition - lockedBottom).Length;

                    if (Object3DControlContext.SnapGridDistance > 0)
                    {
                        // snap this position to the grid
                        double snapGridDistance = Object3DControlContext.SnapGridDistance;

                        // snap this position to the grid
                        newSize = ((int)((newSize / snapGridDistance) + .5)) * snapGridDistance;
                    }

                    if (selectedItem is IObjectWithHeight heightObject)
                    {
                        heightObject.Height = newSize;
                        selectedItem.Invalidate(new InvalidateArgs(selectedItem, InvalidateType.DisplayValues));
                    }

                    await selectedItem.Rebuild();

                    var postScaleBottom = GetBottomPosition(selectedItem);

                    selectedItem.Translate(lockedBottom - postScaleBottom);

                    Invalidate();
                }
            }

            base.OnMouseMove(mouseEvent3D, mouseIsOver);
        }
コード例 #20
0
 private void eventSource3D_MouseMove(object sender, Mouse3DEventArgs e)
 {
     if (e.RayHitResult == null)
     {
         HitPositionTextBlock.Text = null;
     }
     else
     {
         HitPositionTextBlock.Text = string.Format("Hit pos: {0:0}", e.RayHitResult.HitPosition);
     }
 }
コード例 #21
0
        public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)
        {
            if (MouseDownOnControl)
            {
                scaleController.EditComplete();
                scaleController = new ScaleController(Object3DControlContext, getWidth, setWidth, getDepth, setDepth, getHeight, setHeight, getDiameters, setDiameters);

                Object3DControlContext.Scene.ShowSelectionShadow = true;
            }

            base.OnMouseUp(mouseEvent3D);
        }
コード例 #22
0
        public void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
        {
            if (mouseOver != mouseIsOver)
            {
                mouseOver = mouseIsOver;
                context.GuiSurface.Invalidate();
            }

            if (DownOnControl)
            {
                UpdatePosition(mouseEvent3D.MouseEvent2D.Position);
            }
        }
コード例 #23
0
        private void BoxOnMouseEnter(object sender, Mouse3DEventArgs mouse3DEventArgs)
        {
            var boxVisual3D = mouse3DEventArgs.HitObject as Ab3d.Visuals.BoxVisual3D;

            if (boxVisual3D == null)
            {
                return; // This should not happen
            }
            // Set _isSelectedBoxClicked to true if the selected box is clicked (red) - this will be used on MouseLeave
            _isSelectedBoxClicked = ReferenceEquals(boxVisual3D.Material, _clickedMaterial);

            boxVisual3D.Material = _selectedMaterial;
        }
コード例 #24
0
        public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)
        {
            if (hadClickOnControl)
            {
                if (getDiameters[diameterIndex]() != scaleController.InitialState.Diameters[diameterIndex])
                {
                    scaleController.EditComplete();
                    scaleController = new ScaleController(Object3DControlContext, null, null, null, null, getHeight, setHeight, getDiameters, setDiameters);
                }
                Object3DControlContext.Scene.ShowSelectionShadow = true;
            }

            base.OnMouseUp(mouseEvent3D);
        }
コード例 #25
0
        public override void OnMouseMove(Mouse3DEventArgs mouseEvent3D, bool mouseIsOver)
        {
            var selectedItem = RootSelection;

            ActiveSelectedItem = selectedItem;
            if (MouseIsOver)
            {
                zHeightDisplayInfo.Visible = true;
            }
            else if (!hadClickOnControl)
            {
                zHeightDisplayInfo.Visible = false;
            }

            if (MouseDownOnControl)
            {
                IntersectInfo info = hitPlane.GetClosestIntersection(mouseEvent3D.MouseRay);

                if (info != null &&
                    selectedItem != null &&
                    mouseDownSelectedBounds != null)
                {
                    var delta = info.HitPosition.Z - initialHitPosition.Z;

                    double newZPosition = mouseDownSelectedBounds.MinXYZ.Z + delta;

                    if (Object3DControlContext.SnapGridDistance > 0)
                    {
                        // snap this position to the grid
                        double snapGridDistance = Object3DControlContext.SnapGridDistance;

                        // snap this position to the grid
                        newZPosition = ((int)((newZPosition / snapGridDistance) + .5)) * snapGridDistance;
                    }

                    AxisAlignedBoundingBox originalSelectedBounds = selectedItem.GetAxisAlignedBoundingBox();
                    var moveAmount = newZPosition - originalSelectedBounds.MinXYZ.Z;

                    if (moveAmount != 0)
                    {
                        selectedItem.Matrix *= Matrix4X4.CreateTranslation(0, 0, moveAmount);
                        Invalidate();
                    }
                }
            }

            base.OnMouseMove(mouseEvent3D, mouseIsOver);
        }
コード例 #26
0
        public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)
        {
            if (hadClickOnControl)
            {
                if (getWidth() != scaleController.InitialState.Width ||
                    getDepth() != scaleController.InitialState.Depth)
                {
                    scaleController.EditComplete();
                    // make a new controller so we will have new undo data
                    scaleController = new ScaleController(Object3DControlContext, getWidth, setWidth, getDepth, setDepth, getHeight, setHeight);
                }
                Object3DControlContext.Scene.ShowSelectionShadow = true;
            }

            base.OnMouseUp(mouseEvent3D);
        }
コード例 #27
0
        public override void OnMouseUp(Mouse3DEventArgs mouseEvent3D)
        {
            Object3DControlContext.Scene.DrawSelection = true;
            // if we rotated it
            if (mouseDownInfo != null)
            {
                // put in the start transform so we can go back to it if we have to
                Object3DControlContext.Scene.AddTransformSnapshot(mouseDownInfo.SelectedObjectTransform);
            }

            if (mouseDownInfo != null)
            {
                Object3DControlContext.Scene.ShowSelectionShadow = true;
            }

            base.OnMouseUp(mouseEvent3D);
        }
コード例 #28
0
        private void BoxOnMouseLeave(object sender, Mouse3DEventArgs mouse3DEventArgs)
        {
            var boxVisual3D = mouse3DEventArgs.HitObject as Ab3d.Visuals.BoxVisual3D;

            if (boxVisual3D == null)
            {
                return; // This should not happen
            }
            if (_isSelectedBoxClicked)
            {
                boxVisual3D.Material = _clickedMaterial;
            }
            else
            {
                boxVisual3D.Material = _normalMaterial;
            }
        }
コード例 #29
0
        public override void OnMouseDown(Mouse3DEventArgs mouseEvent3D)
        {
            Object3DControlContext.Scene.DrawSelection = false;

            IObject3D selectedItem = RootSelection;

            if (mouseEvent3D.info != null && selectedItem != null)
            {
                selectedItemOnMouseDown = selectedItem;

                angleTextControl.Visible = true;

                var selectedObject = selectedItemOnMouseDown;
                AxisAlignedBoundingBox currentSelectedBounds = selectedObject.GetAxisAlignedBoundingBox();

                var selectedObjectRotationCenter = currentSelectedBounds.Center;
                var cornerForAxis = GetCornerPosition(selectedObject);
                // move the rotation center to the correct side of the bounding box
                selectedObjectRotationCenter[RotationAxis] = cornerForAxis[RotationAxis];

                mouseDownInfo = new Mouse3DInfo(
                    mouseEvent3D.info.HitPosition,
                    selectedObject.Matrix,
                    selectedObjectRotationCenter,
                    GetControlCenter(selectedObject),
                    RotationAxis);

                // Get move data updated
                lastSnappedRotation  = 0;
                SnappedRotationAngle = 0;
                RotatingCW           = true;
                mouseMoveInfo        = mouseDownInfo;
                Object3DControlContext.Scene.ShowSelectionShadow = false;

                mouseMoveInfo = new Mouse3DInfo(
                    mouseEvent3D.info.HitPosition,
                    selectedObject.Matrix,
                    selectedObjectRotationCenter,
                    GetControlCenter(selectedObject),
                    RotationAxis);
            }

            base.OnMouseDown(mouseEvent3D);
        }
コード例 #30
0
        public override void OnMouseMove(MouseEventArgs mouseEvent)
        {
            base.OnMouseMove(mouseEvent);

            if (SuppressUiVolumes ||
                !this.PositionWithinLocalBounds(mouseEvent.X, mouseEvent.Y))
            {
                return;
            }

            Ray           ray          = this.World.GetRayForLocalBounds(mouseEvent.Position);
            IntersectInfo info         = null;
            var           mouseEvent3D = new Mouse3DEventArgs(mouseEvent, ray, info);

            if (MouseDownOnInteractionVolume && mouseDownIAVolume != null)
            {
                mouseDownIAVolume.OnMouseMove(mouseEvent3D);
            }
            else
            {
                this.FindInteractionVolumeHit(ray, out InteractionVolume hitIAVolume, out info);

                var iaVolumes = this.InteractionVolumes;

                foreach (var iaVolume in iaVolumes.OfType <InteractionVolume>())
                {
                    if (hitIAVolume == iaVolume)
                    {
                        iaVolume.MouseOver       = true;
                        iaVolume.MouseMoveInfo   = info;
                        HoveredInteractionVolume = iaVolume;
                    }
                    else
                    {
                        iaVolume.MouseOver     = false;
                        iaVolume.MouseMoveInfo = null;
                    }

                    // TODO: Why do non-hit volumes get mouse move?
                    iaVolume.OnMouseMove(mouseEvent3D);
                }
            }
        }