Merge pull request #2672 from larsbrubaker/design_tools
Made objects off bed show as transparent
This commit is contained in:
commit
93d7e07e35
3 changed files with 54 additions and 10 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue