Fix missing bed texture on single hotend printer

- Issue MatterHackers/MCCentral#5337
Bed grid does not render for single extrusion printer
This commit is contained in:
jlewin 2019-04-15 15:53:30 -07:00
parent d0d2317600
commit b0fc918edf

View file

@ -93,7 +93,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
// only render if we are above the bed
if (sceneContext.RendererOptions.RenderBed)
{
this.UpdateFloorImage(sceneContext.Scene.SelectedItem);
this.EnsureBedTexture(sceneContext.Scene.SelectedItem);
GLHelper.Render(
sceneContext.Mesh,
@ -164,34 +164,16 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
}
}
private void UpdateFloorImage(IObject3D selectedItem, bool clearToPlaceholderImage = true)
private void EnsureBedTexture(IObject3D selectedItem, bool clearToPlaceholderImage = true)
{
// Early exit for invalid cases
if (loadingTextures
|| printer == null
|| printer.Settings.Helpers.NumberOfHotends() != 2
|| printer.Bed.BedShape != BedShape.Rectangular)
|| printer == null)
{
return;
}
if (bedTextures != null)
{
int hotendIndex = GetActiveHotendIndex(selectedItem);
if (activeBedHotendClippingImage != hotendIndex)
{
// Clamp to the range that's currently supported
if (hotendIndex > 2)
{
hotendIndex = -1;
}
this.SetActiveTexture(bedTextures[hotendIndex + 1]);
activeBedHotendClippingImage = hotendIndex;
}
}
else
if (bedTextures == null)
{
loadingTextures = true;
@ -213,19 +195,32 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
{
var bedImage = BedMeshGenerator.CreatePrintBedImage(sceneContext.Printer);
bedTextures = new[]
if (printer.Settings.Helpers.NumberOfHotends() > 1)
{
bedImage, // No limits, basic themed bed
new ImageBuffer(bedImage), // T0 limits
new ImageBuffer(bedImage), // T1 limits
new ImageBuffer(bedImage) // Unioned T0 & T1 limits
};
bedTextures = new[]
{
bedImage, // No limits, basic themed bed
new ImageBuffer(bedImage), // T0 limits
new ImageBuffer(bedImage), // T1 limits
new ImageBuffer(bedImage) // Unioned T0 & T1 limits
};
GenerateNozzleLimitsTexture(printer, 0, bedTextures[1]);
GenerateNozzleLimitsTexture(printer, 1, bedTextures[2]);
GenerateNozzleLimitsTexture(printer, 0, bedTextures[1]);
GenerateNozzleLimitsTexture(printer, 1, bedTextures[2]);
// Special case for union of both hotends
GenerateNozzleLimitsTexture(printer, 2, bedTextures[3]);
// Special case for union of both hotends
GenerateNozzleLimitsTexture(printer, 2, bedTextures[3]);
}
else
{
bedTextures = new[]
{
bedImage, // No limits, basic themed bed
};
this.SetActiveTexture(bedTextures[0]);
activeBedHotendClippingImage = 0;
}
}
catch
{
@ -233,7 +228,23 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
loadingTextures = false;
});
}
else if (printer.Settings.Helpers.NumberOfHotends() > 1
&& printer.Bed.BedShape == BedShape.Rectangular)
{
int hotendIndex = GetActiveHotendIndex(selectedItem);
if (activeBedHotendClippingImage != hotendIndex)
{
// Clamp to the range that's currently supported
if (hotendIndex > 2)
{
hotendIndex = -1;
}
this.SetActiveTexture(bedTextures[hotendIndex + 1]);
activeBedHotendClippingImage = hotendIndex;
}
}
}