From ef16087f9664742bb1ba76fa067b0f416ded0d29 Mon Sep 17 00:00:00 2001 From: Lars Brubaker Date: Thu, 16 Nov 2017 16:12:33 -0800 Subject: [PATCH] Made objects off bed show as transparent Made build volume render --- ApplicationView/PrinterModels.cs | 10 ++-- PartPreviewWindow/View3D/BedMeshGenerator.cs | 6 +-- PartPreviewWindow/View3D/MeshViewerWidget.cs | 48 ++++++++++++++++++++ 3 files changed, 54 insertions(+), 10 deletions(-) diff --git a/ApplicationView/PrinterModels.cs b/ApplicationView/PrinterModels.cs index 1195963cd..81724b061 100644 --- a/ApplicationView/PrinterModels.cs +++ b/ApplicationView/PrinterModels.cs @@ -205,7 +205,9 @@ namespace MatterHackers.MatterControl bedGenerator = new BedMeshGenerator(); //Construct the thing - _bedMesh = bedGenerator.CreatePrintBed(Printer); + var bedAndVolume = bedGenerator.CreatePrintBedAndVolume(Printer); + _bedMesh = bedAndVolume.bed; + _buildVolumeMesh = bedAndVolume.volume; Task.Run(() => { @@ -264,12 +266,6 @@ namespace MatterHackers.MatterControl { get { - if (_buildVolumeMesh == null) - { - //Construct the thing - //_buildVolumeMesh = CreatePrintBed(printer); - } - return _buildVolumeMesh; } } diff --git a/PartPreviewWindow/View3D/BedMeshGenerator.cs b/PartPreviewWindow/View3D/BedMeshGenerator.cs index 7fefb8f2b..1ab8e7b3d 100644 --- a/PartPreviewWindow/View3D/BedMeshGenerator.cs +++ b/PartPreviewWindow/View3D/BedMeshGenerator.cs @@ -46,10 +46,10 @@ namespace MatterHackers.MatterControl private Color bedBaseColor = new Color(245, 245, 255); private Color bedMarkingsColor = Color.Black; - private Mesh printerBed = null; - public Mesh CreatePrintBed(PrinterConfig printer) + public (Mesh bed, Mesh volume) CreatePrintBedAndVolume(PrinterConfig printer) { + Mesh printerBed = null; Mesh buildVolume = null; Vector3 displayVolumeToBuild = Vector3.ComponentMax(printer.Bed.ViewerVolume, new Vector3(1, 1, 1)); @@ -144,7 +144,7 @@ namespace MatterHackers.MatterControl } } - return printerBed; + return (printerBed, buildVolume); } private ImageBuffer CreateCircularBedGridImage(int linesInX, int linesInY, int increment = 1) diff --git a/PartPreviewWindow/View3D/MeshViewerWidget.cs b/PartPreviewWindow/View3D/MeshViewerWidget.cs index a2af89e6c..10c40f3df 100644 --- a/PartPreviewWindow/View3D/MeshViewerWidget.cs +++ b/PartPreviewWindow/View3D/MeshViewerWidget.cs @@ -65,6 +65,45 @@ namespace MatterHackers.MeshVisualizer { return ColorF.FromHSL(Math.Max(materialIndex, 0) / 10.0, .99, .49).ToColor(); } + + public static bool InsideBuildVolume(this IObject3D item, PrinterConfig printerConfig) + { + if(item.Mesh == null) + { + return true; + } + + var worldMatrix = item.WorldMatrix(); + // probably need , true (require precision) + var aabb = item.Mesh.GetAxisAlignedBoundingBox(worldMatrix); + + var bed = printerConfig.Bed; + + if (aabb.maxXYZ.Z <= 0 + || aabb.maxXYZ.Z >= bed.BuildHeight) + { + // object completely below the bed or any part above the build volume + return false; + } + + switch(bed.BedShape) + { + case BedShape.Rectangular: + if(aabb.minXYZ.X < bed.BedCenter.X - bed.ViewerVolume.X/2 + || aabb.maxXYZ.X > bed.BedCenter.X + bed.ViewerVolume.X / 2 + || aabb.minXYZ.Y < bed.BedCenter.Y - bed.ViewerVolume.Y / 2 + || aabb.maxXYZ.Y > bed.BedCenter.Y + bed.ViewerVolume.Y / 2) + { + return false; + } + break; + + case BedShape.Circular: + break; + } + + return true; + } } public class MeshViewerWidget : GuiWidget @@ -409,6 +448,15 @@ namespace MatterHackers.MeshVisualizer drawColor = new Color(Color.Gray, 120); } + // If there is a printer - check if the object is within the bed volume (has no AABB outside the bed volume) + if(sceneContext.Printer != null) + { + if (!renderData.InsideBuildVolume(sceneContext.Printer)) + { + drawColor = new Color(drawColor, 65); + } + } + // check if we should be rendering materials (this overrides the other colors) if (this.RenderType == RenderTypes.Materials) {