Move world transforms outs of TrackballTumbleWidget

- Host on MeshViewer in MatterControl
This commit is contained in:
John Lewin 2017-06-01 18:19:37 -07:00
parent cf3a542ede
commit 5d55a3d83c
9 changed files with 86 additions and 58 deletions

View file

@ -134,7 +134,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
AxisAlignedBoundingBox bounds = trackingObject.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
Vector3 renderPosition = bounds.Center;
Vector2 cornerScreenSpace = view3DWidget.meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(renderPosition) - new Vector2(40, 20);
Vector2 cornerScreenSpace = view3DWidget.meshViewerWidget.World.GetScreenPosition(renderPosition) - new Vector2(40, 20);
e.graphics2D.PushTransform();
Affine currentGraphics2DTransform = e.graphics2D.GetTransform();
@ -259,12 +259,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
this.BackgroundColor = ApplicationController.Instance.Theme.TabBodyBackground;
viewControls3D.TransformStateChanged += ViewControls3D_TransformStateChanged;
FlowLayoutWidget mainContainerTopToBottom = new FlowLayoutWidget(FlowDirection.TopToBottom);
mainContainerTopToBottom.HAnchor = Agg.UI.HAnchor.Max_FitToChildren_ParentWidth;
mainContainerTopToBottom.VAnchor = Agg.UI.VAnchor.Max_FitToChildren_ParentHeight;
mainContainerTopToBottom.HAnchor = HAnchor.Max_FitToChildren_ParentWidth;
mainContainerTopToBottom.VAnchor = VAnchor.Max_FitToChildren_ParentHeight;
var centerPartPreviewAndControls = new FlowLayoutWidget(FlowDirection.LeftToRight);
centerPartPreviewAndControls.Name = "centerPartPreviewAndControls";
@ -320,9 +319,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
string progressFindPartsLabelFull = "{0}:".FormatWith(progressFindPartsLabel);
processingProgressControl = new ProgressControl(progressFindPartsLabelFull, ActiveTheme.Instance.PrimaryTextColor, ActiveTheme.Instance.PrimaryAccentColor);
processingProgressControl.VAnchor = Agg.UI.VAnchor.ParentCenter;
processingProgressControl.VAnchor = VAnchor.ParentCenter;
editToolBar.AddChild(processingProgressControl);
editToolBar.VAnchor |= Agg.UI.VAnchor.ParentCenter;
editToolBar.VAnchor |= VAnchor.ParentCenter;
processingProgressControl.Visible = false;
doEdittingButtonsContainer = new FlowLayoutWidget();
doEdittingButtonsContainer.Visible = false;
@ -559,8 +558,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
partHasBeenEdited = true;
};
meshViewerWidget.ResetView();
if (DoBooleanTest)
{
BeforeDraw += CreateBooleanTestGeometry;
@ -1114,16 +1111,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
for (int i = 0; i < 4; i++)
{
Vector3 bottomStartPosition = Vector3.Transform(subBvhIterator.Bvh.GetAxisAlignedBoundingBox().GetBottomCorner(i), subBvhIterator.TransformToWorld);
var bottomStartScreenPos = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(bottomStartPosition);
var bottomStartScreenPos = meshViewerWidget.World.GetScreenPosition(bottomStartPosition);
Vector3 bottomEndPosition = Vector3.Transform(subBvhIterator.Bvh.GetAxisAlignedBoundingBox().GetBottomCorner((i + 1) % 4), subBvhIterator.TransformToWorld);
var bottomEndScreenPos = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(bottomEndPosition);
var bottomEndScreenPos = meshViewerWidget.World.GetScreenPosition(bottomEndPosition);
Vector3 topStartPosition = Vector3.Transform(subBvhIterator.Bvh.GetAxisAlignedBoundingBox().GetTopCorner(i), subBvhIterator.TransformToWorld);
var topStartScreenPos = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(topStartPosition);
var topStartScreenPos = meshViewerWidget.World.GetScreenPosition(topStartPosition);
Vector3 topEndPosition = Vector3.Transform(subBvhIterator.Bvh.GetAxisAlignedBoundingBox().GetTopCorner((i + 1) % 4), subBvhIterator.TransformToWorld);
var topEndScreenPos = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(topEndPosition);
var topEndScreenPos = meshViewerWidget.World.GetScreenPosition(topEndPosition);
e.graphics2D.Line(bottomStartScreenPos, bottomEndScreenPos, RGBA_Bytes.Black);
e.graphics2D.Line(topStartScreenPos, topEndScreenPos, RGBA_Bytes.Black);
@ -1137,7 +1134,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
var vertexPos = tri.GetVertex(i);
var screenCenter = Vector3.Transform(vertexPos, subBvhIterator.TransformToWorld);
var screenPos = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(screenCenter);
var screenPos = meshViewerWidget.World.GetScreenPosition(screenCenter);
e.graphics2D.Circle(screenPos, 3, RGBA_Bytes.Red);
}
@ -1146,7 +1143,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
var center = subBvhIterator.Bvh.GetCenter();
var worldCenter = Vector3.Transform(center, subBvhIterator.TransformToWorld);
var screenPos2 = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(worldCenter);
var screenPos2 = meshViewerWidget.World.GetScreenPosition(worldCenter);
e.graphics2D.Circle(screenPos2, 3, RGBA_Bytes.Yellow);
e.graphics2D.DrawString($"{subBvhIterator.Depth},", screenPos2.x + 12 * subBvhIterator.Depth, screenPos2.y);
}
@ -1206,7 +1203,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
var center = subObject3DIterator.IObject3D.GetAxisAlignedBoundingBox(Matrix4X4.Identity).GetCenter();
var worldCenter = Vector3.Transform(center, Matrix4X4.Identity);
var screenPos2 = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(worldCenter);
e.graphics2D.Circle(screenPos2, 3, RGBA_Bytes.Yellow);
e.graphics2D.DrawString($"{subObject3DIterator.Depth},", screenPos2.x + 12 * subObject3DIterator.Depth, screenPos2.y);
}
@ -1250,7 +1246,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
autoRotating = false;
base.OnMouseDown(mouseEvent);
if (meshViewerWidget.TrackballTumbleWidget.UnderMouseState == Agg.UI.UnderMouseState.FirstUnderMouse)
if (meshViewerWidget.TrackballTumbleWidget.UnderMouseState == UnderMouseState.FirstUnderMouse)
{
if (mouseEvent.Button == MouseButtons.Left
&&
@ -1369,7 +1365,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// Translate to local
Vector2 localPosition = this.TransformFromScreenSpace(screenSpacePosition);
Ray ray = meshViewerWidget.TrackballTumbleWidget.GetRayForLocalBounds(localPosition);
Ray ray = meshViewerWidget.World.GetRayForLocalBounds(localPosition);
return CurrentSelectInfo.HitPlane.GetClosestIntersection(ray);
}
@ -1377,7 +1373,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public void DragSelectedObject(Vector2 localMousePostion)
{
Vector2 meshViewerWidgetScreenPosition = meshViewerWidget.TransformFromParentSpace(this, localMousePostion);
Ray ray = meshViewerWidget.TrackballTumbleWidget.GetRayForLocalBounds(meshViewerWidgetScreenPosition);
Ray ray = meshViewerWidget.World.GetRayForLocalBounds(meshViewerWidgetScreenPosition);
IntersectInfo info = CurrentSelectInfo.HitPlane.GetClosestIntersection(ray);
if (info != null)
@ -1673,12 +1669,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
hasDrawn = false;
timeSinceLastSpin.Restart();
Quaternion currentRotation = meshViewerWidget.TrackballTumbleWidget.TrackBallController.CurrentRotation.GetRotation();
Quaternion currentRotation = meshViewerWidget.World.RotationMatrix.GetRotation();
Quaternion invertedRotation = Quaternion.Invert(currentRotation);
Quaternion rotateAboutZ = Quaternion.FromEulerAngles(new Vector3(0, 0, .01));
rotateAboutZ = invertedRotation * rotateAboutZ * currentRotation;
meshViewerWidget.TrackballTumbleWidget.TrackBallController.Rotate(rotateAboutZ);
meshViewerWidget.World.Rotate(rotateAboutZ);
Invalidate();
}
}
@ -1860,7 +1856,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Vector3 boundsCenter = selectedBounds.Center;
Vector3 centerTop = new Vector3(boundsCenter.x, boundsCenter.y, selectedBounds.maxXYZ.z);
Vector2 centerTopScreenPosition = meshViewerWidget.TrackballTumbleWidget.GetScreenPosition(centerTop);
Vector2 centerTopScreenPosition = meshViewerWidget.World.GetScreenPosition(centerTop);
centerTopScreenPosition = meshViewerWidget.TransformToParentSpace(this, centerTopScreenPosition);
//graphics2D.Circle(screenPosition.x, screenPosition.y, 5, RGBA_Bytes.Cyan);