Merge pull request #2672 from larsbrubaker/design_tools

Made objects off bed show as transparent
This commit is contained in:
johnlewin 2017-11-16 16:29:38 -08:00 committed by GitHub
commit 93d7e07e35
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 54 additions and 10 deletions

View file

@ -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;
}
}

View file

@ -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)

View file

@ -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)
{