Move TrackballTumble and GCode viewer

This commit is contained in:
John Lewin 2017-07-10 14:00:27 -07:00
parent a50e8acc2a
commit ae93fedc46
7 changed files with 119 additions and 113 deletions

View file

@ -84,6 +84,8 @@ namespace MatterHackers.MatterControl
}
}
public WorldView World { get; } = new WorldView(0, 0);
// TODO: Make assignment private, wire up post slicing initialization here
public GCodeRenderer GCodeRenderer { get; set; }

View file

@ -30,6 +30,7 @@ either expressed or implied, of the FreeBSD Project.
using System;
using System.Linq;
using MatterHackers.Agg;
using MatterHackers.Agg.OpenGlGui;
using MatterHackers.Agg.UI;
using MatterHackers.GCodeVisualizer;
using MatterHackers.Localizations;
@ -45,8 +46,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
public class PrinterTabPage : GuiWidget
{
private View3DWidget modelViewer;
internal ViewGcodeBasic gcodeViewer;
internal View3DWidget modelViewer;
internal GCode2DWidget gcode2DWidget;
private PrintItemWrapper printItem;
@ -121,12 +121,12 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
else if (modelViewer.Visible)
{
modelViewer.meshViewerWidget.ResetView();
this.modelViewer.ResetView();
}
};
viewControls3D.OverflowButton.DynamicPopupContent = () =>
{
if (gcodeViewer.Visible)
if (modelViewer.gcodeViewer.Visible)
{
return this.ShowGCodeOverflowMenu();
}
@ -198,8 +198,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ApplicationController.Instance.Theme,
View3DWidget.OpenMode.Editing);
modelViewer.meshViewerWidget.TrackballTumbleWidget.DrawGlContent += TrackballTumbleWidget_DrawGlContent;
modelViewer.BoundsChanged += (s, e) =>
{
SetSliderSizes();
@ -225,16 +223,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
leftToRight.AddChild(view3DContainer);
// The slice layers view
gcodeViewer = new ViewGcodeBasic(
new Vector3(activeSettings.GetValue<Vector2>(SettingsKey.bed_size), buildHeight),
activeSettings.GetValue<Vector2>(SettingsKey.print_center),
activeSettings.GetValue<BedShape>(SettingsKey.bed_shape),
viewControls3D);
gcodeViewer.AnchorAll();
this.gcodeViewer.Visible = false;
view3DContainer.AddChild(gcodeViewer);
view3DContainer.AddChild(layerRenderRatioSlider);
view3DContainer.AddChild(selectLayerSlider);
view3DContainer.AddChild(layerCountText);
@ -266,7 +254,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
if (ApplicationController.Instance.PartPreviewState.RotationMatrix == Matrix4X4.Identity)
{
modelViewer.meshViewerWidget.ResetView();
this.modelViewer.ResetView();
ApplicationController.Instance.PartPreviewState.RotationMatrix = modelViewer.meshViewerWidget.World.RotationMatrix;
ApplicationController.Instance.PartPreviewState.TranslationMatrix = modelViewer.meshViewerWidget.World.TranslationMatrix;
@ -406,7 +394,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
set
{
showSliceLayers = value;
gcodeViewer.Visible = value;
modelViewer.gcodeViewer.Visible = value;
modelViewer.meshViewerWidget.IsActive = !value;
@ -489,7 +477,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void Parent_KeyDown(object sender, KeyEventArgs keyEvent)
{
if (gcodeViewer.Visible)
if (modelViewer.gcodeViewer.Visible)
{
switch (keyEvent.KeyCode)
{
@ -508,7 +496,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
bool printerIsRunningPrint = PrinterConnection.Instance.PrinterIsPaused || PrinterConnection.Instance.PrinterIsPrinting;
if (gcodeOptions.SyncToPrint
&& printerIsRunningPrint
&& gcodeViewer.Visible)
&& modelViewer.gcodeViewer.Visible)
{
SetAnimationPosition();
this.Invalidate();
@ -524,11 +512,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ApplicationController.Instance.PartPreviewState.RotationMatrix = visibleWidget.World.RotationMatrix;
ApplicationController.Instance.PartPreviewState.TranslationMatrix = visibleWidget.World.TranslationMatrix;
if (modelViewer?.meshViewerWidget != null)
{
modelViewer.meshViewerWidget.TrackballTumbleWidget.DrawGlContent -= TrackballTumbleWidget_DrawGlContent;
}
// Find and unhook the parent system window KeyDown event
if (parentSystemWindow != null)
{
@ -544,16 +527,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
base.OnClosed(e);
}
private void TrackballTumbleWidget_DrawGlContent(object sender, EventArgs e)
{
if (loadedGCode == null || printer.BedPlate.GCodeRenderer == null || !gcodeViewer.Visible)
{
return;
}
printer.BedPlate.Render3DLayerFeatures();
}
internal GuiWidget ShowGCodeOverflowMenu()
{
var textColor = RGBA_Bytes.Black;

View file

@ -87,11 +87,9 @@ namespace MatterHackers.MeshVisualizer
public double SnapGridDistance { get; set; } = 1;
private TrackballTumbleWidget trackballTumbleWidget;
private int volumeIndexWithMouseDown = -1;
public MeshViewerWidget(Vector3 displayVolume, Vector2 bedCenter, BedShape bedShape, string startingTextMessage = "")
public MeshViewerWidget(Vector3 displayVolume, Vector2 bedCenter, BedShape bedShape, TrackballTumbleWidget trackballTumbleWidget, WorldView worldView, string startingTextMessage = "")
{
Scene.SelectionChanged += (sender, e) =>
{
@ -104,17 +102,8 @@ namespace MatterHackers.MeshVisualizer
BedColor = new RGBA_Floats(.8, .8, .8, .7).GetAsRGBA_Bytes();
BuildVolumeColor = new RGBA_Floats(.2, .8, .3, .2).GetAsRGBA_Bytes();
trackballTumbleWidget = new TrackballTumbleWidget(this.World);
trackballTumbleWidget.DrawRotationHelperCircle = false;
trackballTumbleWidget.DrawGlContent += trackballTumbleWidget_DrawGlContent;
trackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
AddChild(trackballTumbleWidget);
CreatePrintBed(displayVolume, bedCenter, bedShape);
trackballTumbleWidget.AnchorAll();
partProcessingInfo = new PartProcessingInfo(startingTextMessage);
GuiWidget labelContainer = new GuiWidget();
@ -125,9 +114,14 @@ namespace MatterHackers.MeshVisualizer
SetMaterialColor(1, ActiveTheme.Instance.PrimaryAccentColor);
this.AddChild(labelContainer);
this.trackballTumbleWidget = trackballTumbleWidget;
this.trackballTumbleWidget.DrawGlContent += this.trackballTumbleWidget_DrawGlContent;
this.World = worldView;
}
public WorldView World { get; } = new WorldView(0, 0);
public WorldView World { get; }
public event EventHandler LoadDone;
@ -256,14 +250,6 @@ namespace MatterHackers.MeshVisualizer
}
}
public TrackballTumbleWidget TrackballTumbleWidget
{
get
{
return trackballTumbleWidget;
}
}
public static void AssertDebugNotDefined()
{
#if DEBUG
@ -492,14 +478,6 @@ namespace MatterHackers.MeshVisualizer
{
base.OnMouseDown(mouseEvent);
if (trackballTumbleWidget.MouseCaptured)
{
if (trackballTumbleWidget.TransformState == TrackBallController.MouseDownType.Rotation || mouseEvent.Button == MouseButtons.Right)
{
trackballTumbleWidget.DrawRotationHelperCircle = true;
}
}
int volumeHitIndex;
Ray ray = this.World.GetRayForLocalBounds(mouseEvent.Position);
IntersectInfo info;
@ -563,7 +541,6 @@ namespace MatterHackers.MeshVisualizer
public override void OnMouseUp(MouseEventArgs mouseEvent)
{
trackballTumbleWidget.DrawRotationHelperCircle = false;
Invalidate();
if(SuppressUiVolumes)
@ -598,17 +575,6 @@ namespace MatterHackers.MeshVisualizer
base.OnMouseUp(mouseEvent);
}
public void ResetView()
{
trackballTumbleWidget.ZeroVelocity();
this.World.Reset();
this.World.Scale = .03;
this.World.Translate(-new Vector3(BedCenter));
this.World.Rotate(Quaternion.FromEulerAngles(new Vector3(0, 0, MathHelper.Tau / 16)));
this.World.Rotate(Quaternion.FromEulerAngles(new Vector3(-MathHelper.Tau * .19, 0, 0)));
}
private void CreateCircularBedGridImage(int linesInX, int linesInY, int increment = 1)
{
Vector2 bedImageCentimeters = new Vector2(linesInX, linesInY);
@ -736,6 +702,7 @@ namespace MatterHackers.MeshVisualizer
}
private string progressReportingPrimaryTask = "";
private TrackballTumbleWidget trackballTumbleWidget;
public void BeginProgressReporting(string taskDescription)
{

View file

@ -118,13 +118,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
await SlicingQueue.SliceFileAsync(printItem, sliceProgressReporter);
ApplicationController.Instance.Printer.BedPlate.LoadGCode(printItem.GetGCodePathAndFileName(), printerTabPage.gcodeViewer.LoadProgress_Changed);
ApplicationController.Instance.Printer.BedPlate.LoadGCode(printItem.GetGCodePathAndFileName(), printerTabPage.modelViewer.gcodeViewer.LoadProgress_Changed);
sliceProgressReporter.EndReporting();
printerTabPage.ViewMode = PartViewMode.Layers3D;
// HACK: directly fire method which previously ran on SlicingDone event on PrintItemWrapper
UiThread.RunOnIdle(printerTabPage.gcodeViewer.CreateAndAddChildren);
UiThread.RunOnIdle(printerTabPage.modelViewer.gcodeViewer.CreateAndAddChildren);
}
catch (Exception ex)
{

View file

@ -39,6 +39,7 @@ using System.Threading.Tasks;
using MatterHackers.Agg;
using MatterHackers.Agg.Image;
using MatterHackers.Agg.ImageProcessing;
using MatterHackers.Agg.OpenGlGui;
using MatterHackers.Agg.PlatformAbstract;
using MatterHackers.Agg.Transform;
using MatterHackers.Agg.UI;
@ -129,7 +130,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private void View3DWidget_AfterDraw(object sender, DrawEventArgs e)
{
if (view3DWidget?.meshViewerWidget?.TrackballTumbleWidget != null)
if (view3DWidget?.HasBeenClosed == false)
{
AxisAlignedBoundingBox bounds = trackingObject.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
Vector3 renderPosition = bounds.Center;
@ -233,22 +234,38 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
private ThemeConfig theme;
private PrinterConfig printer;
// TODO: Make dynamic
public WorldView World { get; } = ApplicationController.Instance.Printer.BedPlate.World;
public TrackballTumbleWidget TrackballTumbleWidget { get; }
private Vector2 bedCenter;
internal ViewGcodeBasic gcodeViewer;
public View3DWidget(PrintItemWrapper printItemWrapper, Vector3 viewerVolume, Vector2 bedCenter, BedShape bedShape, WindowMode windowType, AutoRotate autoRotate, ViewControls3D viewControls3D, ThemeConfig theme, OpenMode openMode = OpenMode.Viewing)
{
this.printer = ApplicationController.Instance.Printer;
this.bedCenter = bedCenter;
this.TrackballTumbleWidget = new TrackballTumbleWidget(ApplicationController.Instance.Printer.BedPlate.World)
{
DrawRotationHelperCircle = false,
TransformState = TrackBallController.MouseDownType.Rotation
};
this.TrackballTumbleWidget.AnchorAll();
this.viewControls3D = viewControls3D;
this.theme = theme;
this.openMode = openMode;
allowAutoRotate = (autoRotate == AutoRotate.Enabled);
meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape);
meshViewerWidget = new MeshViewerWidget(viewerVolume, bedCenter, bedShape, this.TrackballTumbleWidget, this.World);
this.printItemWrapper = printItemWrapper;
ActiveSliceSettings.SettingChanged.RegisterEvent(CheckSettingChanged, ref unregisterEvents);
ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent(CheckSettingChanged, ref unregisterEvents);
}
public override void Initialize()
{
base.Initialize();
this.windowType = windowType;
autoRotating = allowAutoRotate;
@ -265,9 +282,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
VAnchor = VAnchor.Max_FitToChildren_ParentHeight
};
var centerPartPreviewAndControls = new FlowLayoutWidget(FlowDirection.LeftToRight)
var centerPartPreviewAndControls = new GuiWidget()
{
Name = "centerPartPreviewAndControls"
Name = "centerPartPreviewAndControls",
};
centerPartPreviewAndControls.AnchorAll();
@ -278,6 +295,18 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
meshViewerWidget.AnchorAll();
centerPartPreviewAndControls.AddChild(meshViewerWidget);
// The slice layers view
gcodeViewer = new ViewGcodeBasic(
viewerVolume,
bedCenter,
bedShape,
viewControls3D);
gcodeViewer.AnchorAll();
this.gcodeViewer.Visible = false;
centerPartPreviewAndControls.AddChild(gcodeViewer);
centerPartPreviewAndControls.AddChild(this.TrackballTumbleWidget);
mainContainerTopToBottom.AddChild(centerPartPreviewAndControls);
var buttonBottomPanel = new FlowLayoutWidget(FlowDirection.LeftToRight)
@ -449,7 +478,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
this.AnchorAll();
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
this.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
selectedObjectPanel = new SelectedObjectPanel()
{
@ -500,7 +529,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
meshViewerWidget.AfterDraw += AfterDraw3DContent;
meshViewerWidget.TrackballTumbleWidget.DrawGlContent += TrackballTumbleWidget_DrawGlContent;
this.TrackballTumbleWidget.DrawGlContent += TrackballTumbleWidget_DrawGlContent;
}
private void ViewControls3D_TransformStateChanged(object sender, TransformStateChangedEventArgs e)
@ -508,19 +537,19 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
switch (e.TransformMode)
{
case ViewControls3DButtons.Rotate:
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
this.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Rotation;
break;
case ViewControls3DButtons.Translate:
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation;
this.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Translation;
break;
case ViewControls3DButtons.Scale:
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale;
this.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.Scale;
break;
case ViewControls3DButtons.PartSelect:
meshViewerWidget.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None;
this.TrackballTumbleWidget.TransformState = TrackBallController.MouseDownType.None;
break;
}
}
@ -563,6 +592,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
// This shows the BVH as rects around the scene items
//Scene?.TraceData().RenderBvhRecursive(0, 3);
if (gcodeViewer?.loadedGCode == null || printer.BedPlate.GCodeRenderer == null || !gcodeViewer.Visible)
{
return;
}
printer.BedPlate.Render3DLayerFeatures();
}
public override void OnKeyDown(KeyEventArgs keyEvent)
@ -774,6 +810,8 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
meshViewerWidget.AfterDraw -= AfterDraw3DContent;
}
this.TrackballTumbleWidget.DrawGlContent -= TrackballTumbleWidget_DrawGlContent;
unregisterEvents?.Invoke(this, null);
base.OnClosed(e);
}
@ -1074,7 +1112,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
for (int i = 0; i < 3; i++)
{
Vector3 bottomStartPosition = Vector3.Transform(tri.GetVertex(i), x.TransformToWorld);
traceBottoms[i] = meshViewerWidget.World.GetScreenPosition(bottomStartPosition);
traceBottoms[i] = this.World.GetScreenPosition(bottomStartPosition);
}
for (int i = 0; i < 3; i++)
@ -1092,10 +1130,10 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
for (int i = 0; i < 4; i++)
{
Vector3 bottomStartPosition = Vector3.Transform(x.Bvh.GetAxisAlignedBoundingBox().GetBottomCorner(i), x.TransformToWorld);
traceBottoms[i] = meshViewerWidget.World.GetScreenPosition(bottomStartPosition);
traceBottoms[i] = this.World.GetScreenPosition(bottomStartPosition);
Vector3 topStartPosition = Vector3.Transform(x.Bvh.GetAxisAlignedBoundingBox().GetTopCorner(i), x.TransformToWorld);
traceTops[i] = meshViewerWidget.World.GetScreenPosition(topStartPosition);
traceTops[i] = this.World.GetScreenPosition(topStartPosition);
}
RectangleDouble.OutCode allPoints = RectangleDouble.OutCode.Inside;
@ -1132,16 +1170,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
for (int i = 0; i < 4; i++)
{
Vector3 bottomStartPosition = Vector3.Transform(x.Bvh.GetAxisAlignedBoundingBox().GetBottomCorner(i), x.TransformToWorld);
var bottomStartScreenPos = meshViewerWidget.World.GetScreenPosition(bottomStartPosition);
var bottomStartScreenPos = this.World.GetScreenPosition(bottomStartPosition);
Vector3 bottomEndPosition = Vector3.Transform(x.Bvh.GetAxisAlignedBoundingBox().GetBottomCorner((i + 1) % 4), x.TransformToWorld);
var bottomEndScreenPos = meshViewerWidget.World.GetScreenPosition(bottomEndPosition);
var bottomEndScreenPos = this.World.GetScreenPosition(bottomEndPosition);
Vector3 topStartPosition = Vector3.Transform(x.Bvh.GetAxisAlignedBoundingBox().GetTopCorner(i), x.TransformToWorld);
var topStartScreenPos = meshViewerWidget.World.GetScreenPosition(topStartPosition);
var topStartScreenPos = this.World.GetScreenPosition(topStartPosition);
Vector3 topEndPosition = Vector3.Transform(x.Bvh.GetAxisAlignedBoundingBox().GetTopCorner((i + 1) % 4), x.TransformToWorld);
var topEndScreenPos = meshViewerWidget.World.GetScreenPosition(topEndPosition);
var topEndScreenPos = this.World.GetScreenPosition(topEndPosition);
e.graphics2D.Line(bottomStartScreenPos, bottomEndScreenPos, RGBA_Bytes.Black);
e.graphics2D.Line(topStartScreenPos, topEndScreenPos, RGBA_Bytes.Black);
@ -1155,7 +1193,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
var vertexPos = tri.GetVertex(i);
var screenCenter = Vector3.Transform(vertexPos, x.TransformToWorld);
var screenPos = meshViewerWidget.World.GetScreenPosition(screenCenter);
var screenPos = this.World.GetScreenPosition(screenCenter);
e.graphics2D.Circle(screenPos, 3, RGBA_Bytes.Red);
}
@ -1164,7 +1202,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
var center = x.Bvh.GetCenter();
var worldCenter = Vector3.Transform(center, x.TransformToWorld);
var screenPos2 = meshViewerWidget.World.GetScreenPosition(worldCenter);
var screenPos2 = this.World.GetScreenPosition(worldCenter);
e.graphics2D.Circle(screenPos2, 3, RGBA_Bytes.Yellow);
e.graphics2D.DrawString($"{x.Depth},", screenPos2.x + 12 * x.Depth, screenPos2.y);
}
@ -1192,6 +1230,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public override void OnMouseDown(MouseEventArgs mouseEvent)
{
if (this.TrackballTumbleWidget.MouseCaptured)
{
if (TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.Rotation || mouseEvent.Button == MouseButtons.Right)
{
TrackballTumbleWidget.DrawRotationHelperCircle = true;
}
}
// Show transform override
if (activeButtonBeforeMouseOverride == null && mouseEvent.Button == MouseButtons.Right)
{
@ -1213,13 +1259,13 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
autoRotating = false;
base.OnMouseDown(mouseEvent);
if (meshViewerWidget.TrackballTumbleWidget.UnderMouseState == UnderMouseState.FirstUnderMouse)
if (this.TrackballTumbleWidget.UnderMouseState == UnderMouseState.FirstUnderMouse)
{
if (mouseEvent.Button == MouseButtons.Left
&&
(ModifierKeys == Keys.Shift || ModifierKeys == Keys.Control)
|| (
meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None
this.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None
&& ModifierKeys != Keys.Control
&& ModifierKeys != Keys.Alt))
{
@ -1333,7 +1379,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// Translate to local
Vector2 localPosition = this.TransformFromScreenSpace(screenSpacePosition);
Ray ray = meshViewerWidget.World.GetRayForLocalBounds(localPosition);
Ray ray = this.World.GetRayForLocalBounds(localPosition);
return CurrentSelectInfo.HitPlane.GetClosestIntersection(ray);
}
@ -1341,7 +1387,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
public void DragSelectedObject(Vector2 localMousePostion)
{
Vector2 meshViewerWidgetScreenPosition = meshViewerWidget.TransformFromParentSpace(this, localMousePostion);
Ray ray = meshViewerWidget.World.GetRayForLocalBounds(meshViewerWidgetScreenPosition);
Ray ray = this.World.GetRayForLocalBounds(meshViewerWidgetScreenPosition);
IntersectInfo info = CurrentSelectInfo.HitPlane.GetClosestIntersection(ray);
if (info != null)
@ -1425,7 +1471,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// AcceptDrop anytime a DropSource has been queued
mouseEvent.AcceptDrop = this.DragDropSource != null;
if (CurrentSelectInfo.DownOnPart && meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None)
if (CurrentSelectInfo.DownOnPart && this.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None)
{
DragSelectedObject(new Vector2(mouseEvent.X, mouseEvent.Y));
}
@ -1467,8 +1513,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
public void ResetView()
{
this.TrackballTumbleWidget.ZeroVelocity();
var world = this.World;
world.Reset();
world.Scale = .03;
world.Translate(-new Vector3(bedCenter));
world.Rotate(Quaternion.FromEulerAngles(new Vector3(0, 0, MathHelper.Tau / 16)));
world.Rotate(Quaternion.FromEulerAngles(new Vector3(-MathHelper.Tau * .19, 0, 0)));
}
public override void OnMouseUp(MouseEventArgs mouseEvent)
{
this.TrackballTumbleWidget.DrawRotationHelperCircle = false;
if (mouseEvent.DragFiles?.Count > 0)
{
if (AllowDragDrop() && mouseEvent.DragFiles.Count == 1)
@ -1488,7 +1549,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
if (meshViewerWidget.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None)
if (this.TrackballTumbleWidget.TransformState == TrackBallController.MouseDownType.None)
{
if (CurrentSelectInfo.DownOnPart
&& CurrentSelectInfo.LastMoveDelta != Vector3.Zero)
@ -1641,7 +1702,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Quaternion rotateAboutZ = Quaternion.FromEulerAngles(new Vector3(0, 0, .01));
rotateAboutZ = invertedRotation * rotateAboutZ * currentRotation;
meshViewerWidget.World.Rotate(rotateAboutZ);
this.World.Rotate(rotateAboutZ);
Invalidate();
}
}
@ -1802,7 +1863,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
Vector3 boundsCenter = selectedBounds.Center;
Vector3 centerTop = new Vector3(boundsCenter.x, boundsCenter.y, selectedBounds.maxXYZ.z);
Vector2 centerTopScreenPosition = meshViewerWidget.World.GetScreenPosition(centerTop);
Vector2 centerTopScreenPosition = this.World.GetScreenPosition(centerTop);
centerTopScreenPosition = meshViewerWidget.TransformToParentSpace(this, centerTopScreenPosition);
//graphics2D.Circle(screenPosition.x, screenPosition.y, 5, RGBA_Bytes.Cyan);
@ -2513,7 +2574,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
protected IObject3D FindHitObject3D(Vector2 screenPosition, ref IntersectInfo intersectionInfo)
{
Vector2 meshViewerWidgetScreenPosition = meshViewerWidget.TransformFromParentSpace(this, screenPosition);
Ray ray = meshViewerWidget.World.GetRayForLocalBounds(meshViewerWidgetScreenPosition);
Ray ray = this.World.GetRayForLocalBounds(meshViewerWidgetScreenPosition);
intersectionInfo = Scene.TraceData().GetClosestIntersection(ray);
if (intersectionInfo != null)

View file

@ -95,7 +95,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
ApplicationController.Instance.AdvancedControlsPanelReloading.RegisterEvent((s, e) => printer.BedPlate.GCodeRenderer?.Clear3DGCode(), ref unregisterEvents);
}
private GCodeFile loadedGCode => printer.BedPlate.LoadedGCode;
internal GCodeFile loadedGCode => printer.BedPlate.LoadedGCode;
internal void CreateAndAddChildren()
{
@ -174,7 +174,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
internal void LoadProgress_Changed((double progress0To1, string processingState) progress, CancellationTokenSource continueProcessing)
{
SetProcessingMessage(string.Format("{0} {1:0}%...", gcodeLoading, progress.progress0To1 * 100));

View file

@ -110,6 +110,10 @@
<Project>{74F6BB6C-9D02-4512-A59A-21940E35C532}</Project>
<Name>Gui</Name>
</ProjectReference>
<ProjectReference Include="..\..\Submodules\agg-sharp\OpenGlGui\OpenGlGui.csproj">
<Project>{C958F745-156E-4BDC-A24A-3721C7BE7B8A}</Project>
<Name>OpenGlGui</Name>
</ProjectReference>
<ProjectReference Include="..\..\Submodules\agg-sharp\PlatformAbstract\PlatformAbstract.csproj">
<Project>{3E4AABA8-D85F-4922-88C6-5C1B2D2308FB}</Project>
<Name>PlatformAbstract</Name>