Move TrackballTumble and GCode viewer
This commit is contained in:
parent
a50e8acc2a
commit
ae93fedc46
7 changed files with 119 additions and 113 deletions
|
|
@ -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; }
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue