Example #1
0
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            AxisAlignedBoundingBox selectedBounds = selectedItem.GetAxisAlignedBoundingBox();
            Vector3 boundsCenter = selectedBounds.Center;

            TotalTransform = Matrix4X4.CreateTranslation(new Vector3(boundsCenter.X, boundsCenter.Y, 0.1));
        }
Example #2
0
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            AxisAlignedBoundingBox selectedBounds = selectedItem.GetAxisAlignedBoundingBox();

            Vector3 topPosition    = GetTopPosition(selectedItem);
            var     bottomPosition = new Vector3(topPosition.X, topPosition.Y, selectedBounds.MinXYZ.Z);
            double  distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(topPosition);

            Vector3 boxCenter = topPosition;

            boxCenter.Z += (10 * GuiWidget.DeviceScale + upArrowSize / 2) * distBetweenPixelsWorldSpace;

            var centerMatrix = Matrix4X4.CreateTranslation(boxCenter);

            TotalTransform = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace * GuiWidget.DeviceScale) * centerMatrix;

            lines.Clear();
            // left lines
            // the lines on the bed
            var bedPosition = new Vector3(topPosition.X, topPosition.Y, 0);

            lines.Add(Object3DControlContext.World.GetScreenPosition(bedPosition + new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0)));
            lines.Add(new Vector2(lines[0].X + lineLength, lines[0].Y));

            lines.Add(Object3DControlContext.World.GetScreenPosition(bottomPosition + new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0)));
            lines.Add(new Vector2(lines[2].X + lineLength, lines[2].Y));
        }
Example #3
0
 public SnappingIndicators(IInteractionVolumeContext context, MeshSelectInfo currentSelectInfo)
     : base(context)
 {
     this.DrawOnTop      = true;
     this.meshSelectInfo = currentSelectInfo;
     InteractionContext.GuiSurface.AfterDraw += InteractionLayer_AfterDraw;
 }
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            var(hitPos, _) = GetHitPosition(selectedItem);

            double distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(hitPos);

            var centerMatrix = Matrix4X4.CreateTranslation(hitPos);

            centerMatrix   = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * centerMatrix;
            TotalTransform = centerMatrix;
        }
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            var    topPosition = GetTopPosition(selectedItem);
            double distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(topPosition);

            Vector3 arrowCenter = topPosition;

            arrowCenter.Z += arrowSize / 2 * distBetweenPixelsWorldSpace;

            var rotation = Matrix4X4.CreateRotation(new Quaternion(selectedItem.Matrix));

            TotalTransform = rotation * Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * Matrix4X4.CreateTranslation(arrowCenter);
        }
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            AxisAlignedBoundingBox selectedBounds = selectedItem.GetAxisAlignedBoundingBox();

            var    topPosition = GetTopPosition(selectedItem);
            double distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(topPosition);

            Vector3 arrowCenter = topPosition;

            arrowCenter.Z += arrowSize / 2 * distBetweenPixelsWorldSpace;

            var centerMatrix = Matrix4X4.CreateTranslation(arrowCenter);

            centerMatrix   = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * centerMatrix;
            TotalTransform = centerMatrix;
        }
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            var    boxCenter = GetControlCenter(selectedItem);
            double distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(boxCenter);

            GetCornerPosition(selectedItem, out int cornerIndexOut);

            Matrix4X4 centerMatrix = Matrix4X4.Identity;

            switch (RotationAxis)
            {
            case 0:
                if (cornerIndexOut == 1 || cornerIndexOut == 3)
                {
                    centerMatrix *= Matrix4X4.CreateRotationX(MathHelper.DegreesToRadians(90));
                }
                else
                {
                    centerMatrix *= Matrix4X4.CreateRotationY(MathHelper.DegreesToRadians(-90));
                }

                centerMatrix *= Matrix4X4.CreateRotationZ(MathHelper.DegreesToRadians(90) * cornerIndexOut);
                break;

            case 1:
                if (cornerIndexOut == 1 || cornerIndexOut == 3)
                {
                    centerMatrix *= Matrix4X4.CreateRotationY(MathHelper.DegreesToRadians(-90));
                }
                else
                {
                    centerMatrix *= Matrix4X4.CreateRotationX(MathHelper.DegreesToRadians(90));
                }

                centerMatrix *= Matrix4X4.CreateRotationZ(MathHelper.DegreesToRadians(90) * cornerIndexOut);
                break;

            case 2:
                centerMatrix *= Matrix4X4.CreateRotationZ(MathHelper.DegreesToRadians(90) * cornerIndexOut);
                break;
            }

            centerMatrix  *= Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * Matrix4X4.CreateTranslation(boxCenter);
            TotalTransform = centerMatrix;
        }
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            // create the transform for the box
            Vector3 cornerPosition = ObjectSpace.GetCornerPosition(selectedItem, quadrantIndex);

            Vector3 boxCenter = cornerPosition;

            double distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(cornerPosition);

            switch (quadrantIndex)
            {
            case 0:
                boxCenter.X += selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                boxCenter.Y += selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;

            case 1:
                boxCenter.X -= selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                boxCenter.Y += selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;

            case 2:
                boxCenter.X -= selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                boxCenter.Y -= selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;

            case 3:
                boxCenter.X += selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                boxCenter.Y -= selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;
            }

            boxCenter.Z += selectCubeSize / 2 * distBetweenPixelsWorldSpace;

            var rotation = Matrix4X4.CreateRotation(new Quaternion(selectedItem.Matrix));

            var centerMatrix = Matrix4X4.CreateTranslation(boxCenter);

            centerMatrix   = rotation * Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * centerMatrix;
            TotalTransform = centerMatrix;
        }
Example #9
0
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            Vector3 cornerPosition = GetCornerPosition(selectedItem, quadrantIndex);
            double  distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(cornerPosition);

            // figure out which way the corner is relative to the bounds
            Vector3 otherSideDelta = GetDeltaToOtherSideXy(selectedItem, quadrantIndex);

            double xSign = otherSideDelta.X > 0 ? 1 : -1;
            double ySign = otherSideDelta.Y > 0 ? 1 : -1;

            Vector3 boxCenter = cornerPosition;

            boxCenter.X -= xSign * selectCubeSize / 2 * distBetweenPixelsWorldSpace;
            boxCenter.Y -= ySign * selectCubeSize / 2 * distBetweenPixelsWorldSpace;
            boxCenter.Z += selectCubeSize / 2 * distBetweenPixelsWorldSpace;

            var centerMatrix = Matrix4X4.CreateTranslation(boxCenter);

            centerMatrix   = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * centerMatrix;
            TotalTransform = centerMatrix;

            var xOtherSide = new Vector3(cornerPosition.X + otherSideDelta.X, cornerPosition.Y, cornerPosition.Z);
            var yOtherSide = new Vector3(cornerPosition.X, cornerPosition.Y + otherSideDelta.Y, cornerPosition.Z);

            lines.Clear();
            // left lines
            lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(xSign * DistToStart * distBetweenPixelsWorldSpace, 0, 0)));
            lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(xSign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0, 0)));

            lines.Add(Object3DControlContext.World.GetScreenPosition(yOtherSide - new Vector3(xSign * DistToStart * distBetweenPixelsWorldSpace, 0, 0)));
            lines.Add(Object3DControlContext.World.GetScreenPosition(yOtherSide - new Vector3(xSign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0, 0)));

            // bottom lines
            lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(0, ySign * DistToStart * distBetweenPixelsWorldSpace, 0)));
            lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(0, ySign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0)));

            lines.Add(Object3DControlContext.World.GetScreenPosition(xOtherSide - new Vector3(0, ySign * DistToStart * distBetweenPixelsWorldSpace, 0)));
            lines.Add(Object3DControlContext.World.GetScreenPosition(xOtherSide - new Vector3(0, ySign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0)));
        }
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            Vector3 cornerPosition = GetCornerPosition(selectedItem, quadrantIndex);
            double  distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(cornerPosition);

            // figure out which way the corner is relative to the bounds
            Vector3 otherSideDelta = GetDeltaToOtherSideXy(selectedItem, quadrantIndex);

            double xSign = otherSideDelta.X > 0 ? 1 : -1;
            double ySign = otherSideDelta.Y > 0 ? 1 : -1;

            Vector3 boxCenter = cornerPosition;

            boxCenter.X -= xSign * selectCubeSize / 2 * distBetweenPixelsWorldSpace;
            boxCenter.Y -= ySign * selectCubeSize / 2 * distBetweenPixelsWorldSpace;
            boxCenter.Z += selectCubeSize / 2 * distBetweenPixelsWorldSpace;

            var centerMatrix = Matrix4X4.CreateTranslation(boxCenter);

            centerMatrix   = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * centerMatrix;
            TotalTransform = centerMatrix;
        }
Example #11
0
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
        {
            // create the transform for the box
            Vector3 edgePosition = GetEdgePosition(selectedItem, edgeIndex);

            Vector3 boxCenter = edgePosition;

            double distBetweenPixelsWorldSpace = Object3DControlContext.World.GetWorldUnitsPerScreenPixelAtPosition(edgePosition);

            switch (edgeIndex)
            {
            case 0:
                boxCenter.Y += selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;

            case 1:
                boxCenter.X -= selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;

            case 2:
                boxCenter.Y -= selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;

            case 3:
                boxCenter.X += selectCubeSize / 2 * distBetweenPixelsWorldSpace;
                break;
            }

            boxCenter.Z += selectCubeSize / 2 * distBetweenPixelsWorldSpace;

            var centerMatrix = Matrix4X4.CreateTranslation(boxCenter);

            centerMatrix   = Matrix4X4.CreateScale(distBetweenPixelsWorldSpace) * centerMatrix;
            TotalTransform = centerMatrix;

            // build the scaling lines
            lines.Clear();
            Vector3 otherSideDelta = GetDeltaToOtherSideXy(selectedItem, edgeIndex);
            var     cornerPosition = GetCornerPosition(selectedItem, edgeIndex);
            var     screen1        = Object3DControlContext.World.GetScreenSpace(cornerPosition);
            var     screen2        = Object3DControlContext.World.GetScreenSpace(GetCornerPosition(selectedItem, (edgeIndex + 1) % 4));

            if (screen1.Z < screen2.Z)
            {
                if (edgeIndex % 2 == 0)
                {
                    // left lines
                    double xSign      = otherSideDelta.X > 0 ? 1 : -1;
                    var    yOtherSide = new Vector3(cornerPosition.X, cornerPosition.Y + otherSideDelta.Y, cornerPosition.Z);
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(xSign * DistToStart * distBetweenPixelsWorldSpace, 0, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(xSign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0, 0)));

                    lines.Add(Object3DControlContext.World.GetScreenPosition(yOtherSide - new Vector3(xSign * DistToStart * distBetweenPixelsWorldSpace, 0, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(yOtherSide - new Vector3(xSign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0, 0)));
                }
                else
                {
                    // bottom lines
                    double ySign      = otherSideDelta.Y > 0 ? 1 : -1;
                    var    xOtherSide = new Vector3(cornerPosition.X + otherSideDelta.X, cornerPosition.Y, cornerPosition.Z);
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(0, ySign * DistToStart * distBetweenPixelsWorldSpace, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(0, ySign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0)));

                    lines.Add(Object3DControlContext.World.GetScreenPosition(xOtherSide - new Vector3(0, ySign * DistToStart * distBetweenPixelsWorldSpace, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(xOtherSide - new Vector3(0, ySign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0)));
                }
            }
            else
            {
                cornerPosition = GetCornerPosition(selectedItem, (edgeIndex + 2) % 4);
                if (edgeIndex % 2 == 0)
                {
                    // right lines
                    double xSign      = otherSideDelta.X < 0 ? 1 : -1;
                    var    yOtherSide = new Vector3(cornerPosition.X, cornerPosition.Y - otherSideDelta.Y, cornerPosition.Z);

                    // left lines
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(xSign * DistToStart * distBetweenPixelsWorldSpace, 0, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(xSign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0, 0)));

                    lines.Add(Object3DControlContext.World.GetScreenPosition(yOtherSide - new Vector3(xSign * DistToStart * distBetweenPixelsWorldSpace, 0, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(yOtherSide - new Vector3(xSign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0, 0)));
                }
                else
                {
                    // bottom lines
                    double ySign      = otherSideDelta.Y < 0 ? 1 : -1;
                    var    xOtherSide = new Vector3(cornerPosition.X - otherSideDelta.X, cornerPosition.Y, cornerPosition.Z);
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(0, ySign * DistToStart * distBetweenPixelsWorldSpace, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(cornerPosition - new Vector3(0, ySign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0)));

                    lines.Add(Object3DControlContext.World.GetScreenPosition(xOtherSide - new Vector3(0, ySign * DistToStart * distBetweenPixelsWorldSpace, 0)));
                    lines.Add(Object3DControlContext.World.GetScreenPosition(xOtherSide - new Vector3(0, ySign * (DistToStart + LineLength) * distBetweenPixelsWorldSpace, 0)));
                }
            }
        }
Example #12
0
        public override void SetPosition(IObject3D selectedItem, MeshSelectInfo meshSelectInfo)
        {
            this.meshSelectInfo = meshSelectInfo;

            // draw the hight from the bottom to the bed
            AxisAlignedBoundingBox selectedBounds = selectedItem.GetAxisAlignedBoundingBox();

            var world = Object3DControlContext.World;

            switch (meshSelectInfo.HitQuadrant)
            {
            case HitQuadrant.LB:
            {
                var    cornerPoint = new Vector3(selectedBounds.MinXYZ.X, selectedBounds.MinXYZ.Y, 0);
                double distBetweenPixelsWorldSpace = world.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                lines[0] = world.GetScreenPosition(cornerPoint - new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                lines[1] = world.GetScreenPosition(cornerPoint - new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                lines[2] = world.GetScreenPosition(cornerPoint - new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                lines[3] = world.GetScreenPosition(cornerPoint - new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
            }

            break;

            case HitQuadrant.LT:
            {
                var    cornerPoint = new Vector3(selectedBounds.MinXYZ.X, selectedBounds.MaxXYZ.Y, 0);
                double distBetweenPixelsWorldSpace = world.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                lines[0] = world.GetScreenPosition(cornerPoint - new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                lines[1] = world.GetScreenPosition(cornerPoint - new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                lines[2] = world.GetScreenPosition(cornerPoint + new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                lines[3] = world.GetScreenPosition(cornerPoint + new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
            }

            break;

            case HitQuadrant.RB:
            {
                var    cornerPoint = new Vector3(selectedBounds.MaxXYZ.X, selectedBounds.MinXYZ.Y, 0);
                double distBetweenPixelsWorldSpace = world.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                lines[0] = world.GetScreenPosition(cornerPoint + new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                lines[1] = world.GetScreenPosition(cornerPoint + new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                lines[2] = world.GetScreenPosition(cornerPoint - new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                lines[3] = world.GetScreenPosition(cornerPoint - new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
            }

            break;

            case HitQuadrant.RT:
            {
                var    cornerPoint = new Vector3(selectedBounds.MaxXYZ.X, selectedBounds.MaxXYZ.Y, 0);
                double distBetweenPixelsWorldSpace = world.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                lines[0] = world.GetScreenPosition(cornerPoint + new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                lines[1] = world.GetScreenPosition(cornerPoint + new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                lines[2] = world.GetScreenPosition(cornerPoint + new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                lines[3] = world.GetScreenPosition(cornerPoint + new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
            }

            break;
            }
        }
 public void SetPosition(IObject3D selectedItem, MeshSelectInfo selectInfo)
 {
 }
        public override void SetPosition()
        {
            if (MeshViewerToDrawWith.HaveSelection)
            {
                // draw the hight from the bottom to the bed
                AxisAlignedBoundingBox selectedBounds = MeshViewerToDrawWith.GetBoundsForSelection();

                MeshSelectInfo meshSelectInfo = view3DWidget.CurrentSelectInfo;

                switch (meshSelectInfo.HitQuadrant)
                {
                case HitQuadrant.LB:
                {
                    Vector3 cornerPoint = new Vector3(selectedBounds.minXYZ.x, selectedBounds.minXYZ.y, 0);
                    double  distBetweenPixelsWorldSpace = MeshViewerToDrawWith.TrackballTumbleWidget.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                    lines[0] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                    lines[1] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                    lines[2] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                    lines[3] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
                }
                break;

                case HitQuadrant.LT:
                {
                    Vector3 cornerPoint = new Vector3(selectedBounds.minXYZ.x, selectedBounds.maxXYZ.y, 0);
                    double  distBetweenPixelsWorldSpace = MeshViewerToDrawWith.TrackballTumbleWidget.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                    lines[0] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                    lines[1] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                    lines[2] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                    lines[3] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
                }
                break;

                case HitQuadrant.RB:
                {
                    Vector3 cornerPoint = new Vector3(selectedBounds.maxXYZ.x, selectedBounds.minXYZ.y, 0);
                    double  distBetweenPixelsWorldSpace = MeshViewerToDrawWith.TrackballTumbleWidget.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                    lines[0] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                    lines[1] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                    lines[2] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                    lines[3] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint - new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
                }
                break;

                case HitQuadrant.RT:
                {
                    Vector3 cornerPoint = new Vector3(selectedBounds.maxXYZ.x, selectedBounds.maxXYZ.y, 0);
                    double  distBetweenPixelsWorldSpace = MeshViewerToDrawWith.TrackballTumbleWidget.GetWorldUnitsPerScreenPixelAtPosition(cornerPoint);

                    lines[0] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3(distToStart * distBetweenPixelsWorldSpace, 0, 0));
                    lines[1] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3((distToStart + lineLength) * distBetweenPixelsWorldSpace, 0, 0));

                    lines[2] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3(0, distToStart * distBetweenPixelsWorldSpace, 0));
                    lines[3] = MeshViewerToDrawWith.TrackballTumbleWidget.GetScreenPosition(cornerPoint + new Vector3(0, (distToStart + lineLength) * distBetweenPixelsWorldSpace, 0));
                }
                break;
                }
            }
        }