Orthographic projection mode with dynamic near/far.
This commit is contained in:
parent
0834aff9f4
commit
e7947a2fd2
70 changed files with 2548 additions and 244 deletions
|
|
@ -0,0 +1,75 @@
|
|||
using MatterHackers.Agg;
|
||||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.PolygonMesh;
|
||||
using MatterHackers.RenderOpenGl;
|
||||
using MatterHackers.RenderOpenGl.OpenGl;
|
||||
using MatterHackers.VectorMath;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||
{
|
||||
public class Object3DControlBoundingBoxesDrawable : IDrawable
|
||||
{
|
||||
string IDrawable.Title => "Object3DControlsLayer bounding boxes";
|
||||
|
||||
string IDrawable.Description => "When enabled, show all the bounding boxes reported by Object3DControlsLayer.";
|
||||
|
||||
bool IDrawable.Enabled { get; set; }
|
||||
|
||||
DrawStage IDrawable.DrawStage => DrawStage.TransparentContent;
|
||||
|
||||
void IDrawable.Draw(GuiWidget sender, DrawEventArgs e, Matrix4X4 itemMaxtrix, WorldView world)
|
||||
{
|
||||
if (!(sender is Object3DControlsLayer layer))
|
||||
return;
|
||||
|
||||
GLHelper.PrepareFor3DLineRender(false);
|
||||
|
||||
var frustum = world.GetClippingFrustum();
|
||||
|
||||
Color color = Color.White;
|
||||
|
||||
List<AxisAlignedBoundingBox> aabbs = layer.MakeListOfObjectControlBoundingBoxes();
|
||||
aabbs.Add(layer.GetPrinterNozzleAABB());
|
||||
|
||||
foreach (var box in aabbs)
|
||||
{
|
||||
if (box.XSize < 0)
|
||||
continue;
|
||||
|
||||
Vector3[] v = box.GetCorners();
|
||||
|
||||
Tuple<Vector3, Vector3>[] lines = new Tuple<Vector3, Vector3>[]{
|
||||
new Tuple<Vector3, Vector3>(v[0], v[1]),
|
||||
new Tuple<Vector3, Vector3>(v[2], v[3]),
|
||||
new Tuple<Vector3, Vector3>(v[0], v[3]),
|
||||
new Tuple<Vector3, Vector3>(v[1], v[2]),
|
||||
new Tuple<Vector3, Vector3>(v[4 + 0], v[4 + 1]),
|
||||
new Tuple<Vector3, Vector3>(v[4 + 2], v[4 + 3]),
|
||||
new Tuple<Vector3, Vector3>(v[4 + 0], v[4 + 3]),
|
||||
new Tuple<Vector3, Vector3>(v[4 + 1], v[4 + 2]),
|
||||
new Tuple<Vector3, Vector3>(v[0], v[4 + 0]),
|
||||
new Tuple<Vector3, Vector3>(v[1], v[4 + 1]),
|
||||
new Tuple<Vector3, Vector3>(v[2], v[4 + 2]),
|
||||
new Tuple<Vector3, Vector3>(v[3], v[4 + 3]),
|
||||
};
|
||||
|
||||
foreach (var (start, end) in lines)
|
||||
{
|
||||
world.Render3DLineNoPrep(frustum, start, end, color);
|
||||
//e.Graphics2D.DrawLine(color, world.GetScreenPosition(start), world.GetScreenPosition(end));
|
||||
}
|
||||
}
|
||||
|
||||
GL.Enable(EnableCap.Lighting);
|
||||
GL.Enable(EnableCap.DepthTest);
|
||||
}
|
||||
|
||||
AxisAlignedBoundingBox IDrawable.GetWorldspaceAABB()
|
||||
{
|
||||
// Let's not recurse on this...
|
||||
return AxisAlignedBoundingBox.Empty();
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue