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)); }
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)); }
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; }
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; }
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))); } } }
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; } } }