Convert View3DWidget event handler into IDrawable interface
This commit is contained in:
parent
a33a7e8924
commit
54b43faa2a
2 changed files with 49 additions and 47 deletions
|
|
@ -96,6 +96,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
}
|
||||
}
|
||||
|
||||
public void RegisterDrawable(IDrawable drawable)
|
||||
{
|
||||
this.drawables.Add(drawable);
|
||||
}
|
||||
|
||||
internal void SetRenderTarget(GuiWidget renderSource)
|
||||
{
|
||||
this.renderSource = renderSource;
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ using MatterHackers.VectorMath.TrackBall;
|
|||
|
||||
namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||
{
|
||||
public class View3DWidget : GuiWidget
|
||||
public class View3DWidget : GuiWidget, IDrawable
|
||||
{
|
||||
private bool deferEditorTillMouseUp = false;
|
||||
|
||||
|
|
@ -109,6 +109,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
};
|
||||
this.InteractionLayer.AnchorAll();
|
||||
|
||||
// Register ourself as an IDrawable
|
||||
this.InteractionLayer.RegisterDrawable(this);
|
||||
|
||||
this.viewControls3D = viewControls3D;
|
||||
this.printer = printer;
|
||||
this.theme = theme;
|
||||
|
|
@ -362,8 +365,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
viewControls3D.ActiveButton = ViewControls3DButtons.PartSelect;
|
||||
|
||||
this.InteractionLayer.DrawGlOpaqueContent += Draw_GlOpaqueContent;
|
||||
|
||||
sceneContext.SceneLoaded += SceneContext_SceneLoaded;
|
||||
|
||||
// Construct a dictionary of menu actions accessible at the workspace level
|
||||
|
|
@ -764,49 +765,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
Scene.SetSelection(Scene.Children.ToList());
|
||||
}
|
||||
|
||||
private void Draw_GlOpaqueContent(object sender, DrawEventArgs e)
|
||||
{
|
||||
if (CurrentSelectInfo.DownOnPart
|
||||
&& TrackballTumbleWidget.TransformState == TrackBallTransformType.None
|
||||
&& Keyboard.IsKeyDown(Keys.ShiftKey))
|
||||
{
|
||||
// draw marks on the bed to show that the part is constrained to x and y
|
||||
AxisAlignedBoundingBox selectedBounds = Scene.SelectedItem.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
|
||||
|
||||
var drawCenter = CurrentSelectInfo.PlaneDownHitPos;
|
||||
var drawColor = new Color(Color.Red, 20);
|
||||
bool zBuffer = false;
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
World.Render3DLine(
|
||||
drawCenter - new Vector3(-50, 0, 0),
|
||||
drawCenter - new Vector3(50, 0, 0), drawColor, zBuffer, 2);
|
||||
|
||||
World.Render3DLine(
|
||||
drawCenter - new Vector3(0, -50, 0),
|
||||
drawCenter - new Vector3(0, 50, 0), drawColor, zBuffer, 2);
|
||||
|
||||
drawColor = Color.Black;
|
||||
drawCenter.Z = 0;
|
||||
zBuffer = true;
|
||||
}
|
||||
|
||||
GL.Enable(EnableCap.Lighting);
|
||||
}
|
||||
|
||||
// Render 3D GCode if applicable
|
||||
if (sceneContext.LoadedGCode != null
|
||||
&& sceneContext.GCodeRenderer != null
|
||||
&& printerTabPage?.printer.ViewState.ViewMode == PartViewMode.Layers3D)
|
||||
{
|
||||
sceneContext.RenderGCode3D(e);
|
||||
}
|
||||
|
||||
// This shows the BVH as rects around the scene items
|
||||
//Scene?.TraceData().RenderBvhRecursive(0, 3);
|
||||
}
|
||||
|
||||
public void AddUndoOperation(IUndoRedoCommand operation)
|
||||
{
|
||||
Scene.UndoBuffer.Add(operation);
|
||||
|
|
@ -821,7 +779,6 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
// Release events
|
||||
this.Scene.SelectionChanged -= Scene_SelectionChanged;
|
||||
this.Scene.Invalidated -= Scene_Invalidated;
|
||||
this.InteractionLayer.DrawGlOpaqueContent -= Draw_GlOpaqueContent;
|
||||
|
||||
sceneContext.SceneLoaded -= SceneContext_SceneLoaded;
|
||||
modelViewSidePanel.Resized -= ModelViewSidePanel_Resized;
|
||||
|
|
@ -1938,6 +1895,46 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
ApplicationController.Instance.Tasks.Execute("Saving".Localize(), printer, sceneContext.SaveChanges);
|
||||
}
|
||||
|
||||
void IDrawable.Draw(GuiWidget sender, DrawEventArgs e, Matrix4X4 itemMaxtrix, WorldView world)
|
||||
{
|
||||
if (CurrentSelectInfo.DownOnPart
|
||||
&& TrackballTumbleWidget.TransformState == TrackBallTransformType.None
|
||||
&& Keyboard.IsKeyDown(Keys.ShiftKey))
|
||||
{
|
||||
// draw marks on the bed to show that the part is constrained to x and y
|
||||
AxisAlignedBoundingBox selectedBounds = Scene.SelectedItem.GetAxisAlignedBoundingBox(Matrix4X4.Identity);
|
||||
|
||||
var drawCenter = CurrentSelectInfo.PlaneDownHitPos;
|
||||
var drawColor = new Color(Color.Red, 20);
|
||||
bool zBuffer = false;
|
||||
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
World.Render3DLine(
|
||||
drawCenter - new Vector3(-50, 0, 0),
|
||||
drawCenter - new Vector3(50, 0, 0), drawColor, zBuffer, 2);
|
||||
|
||||
World.Render3DLine(
|
||||
drawCenter - new Vector3(0, -50, 0),
|
||||
drawCenter - new Vector3(0, 50, 0), drawColor, zBuffer, 2);
|
||||
|
||||
drawColor = Color.Black;
|
||||
drawCenter.Z = 0;
|
||||
zBuffer = true;
|
||||
}
|
||||
|
||||
GL.Enable(EnableCap.Lighting);
|
||||
}
|
||||
|
||||
// Render 3D GCode if applicable
|
||||
if (sceneContext.LoadedGCode != null
|
||||
&& sceneContext.GCodeRenderer != null
|
||||
&& printerTabPage?.printer.ViewState.ViewMode == PartViewMode.Layers3D)
|
||||
{
|
||||
sceneContext.RenderGCode3D(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum HitQuadrant { LB, LT, RB, RT }
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue