Better expose reusable components
- Move ActiveView3D reference to ApplicationController - Use ActivewView3D reference rather than ChildrenRecursive search - Reuse EditPrinter button on action bar to get more tests passing - Move IsContentFileType helper to LibraryConfig - Make PlatingHelpers operate on IEnumerable<IObject3D> versus Scene - Pass Scene.Children rather than Scene - When plating multiple items, pass the updated IEnumerable context
This commit is contained in:
parent
955373f4de
commit
55e217641a
15 changed files with 72 additions and 68 deletions
|
|
@ -213,7 +213,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
public override void OnLoad(EventArgs args)
|
||||
{
|
||||
MatterControlApplication.Instance.ActiveView3DWidget = modelViewer;
|
||||
ApplicationController.Instance.ActiveView3DWidget = modelViewer;
|
||||
LoadActivePrintItem();
|
||||
base.OnLoad(args);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -214,27 +214,27 @@ namespace MatterHackers.MatterControl
|
|||
meshTransforms[index] *= Matrix4X4.CreateTranslation(new Vector3(-boundsCenter.x + bounds.XSize / 2, -boundsCenter.y + bounds.YSize / 2, 0));
|
||||
}
|
||||
|
||||
public static void MoveToOpenPosition(IObject3D objectToAdd, IObject3D scene)
|
||||
public static void MoveToOpenPosition(IObject3D objectToAdd, IEnumerable<IObject3D> sceneItems)
|
||||
{
|
||||
if (objectToAdd == null || !scene.HasChildren)
|
||||
if (objectToAdd == null || !sceneItems.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// find the bounds of all items in the scene
|
||||
AxisAlignedBoundingBox allPlacedMeshBounds = scene.Children.GetUnionedAxisAlignedBoundingBox();
|
||||
AxisAlignedBoundingBox allPlacedMeshBounds = sceneItems.GetUnionedAxisAlignedBoundingBox();
|
||||
|
||||
// move the part to the total bounds lower left side
|
||||
Vector3 meshLowerLeft = objectToAdd.GetAxisAlignedBoundingBox(Matrix4X4.Identity).minXYZ;
|
||||
objectToAdd.Matrix *= Matrix4X4.CreateTranslation(-meshLowerLeft + allPlacedMeshBounds.minXYZ);
|
||||
|
||||
// keep moving the item until its in an open slot
|
||||
MoveToOpenPosition(objectToAdd, scene, allPlacedMeshBounds);
|
||||
MoveToOpenPosition(objectToAdd, sceneItems, allPlacedMeshBounds);
|
||||
|
||||
//PlaceMeshGroupOnBed(objectToAdd);
|
||||
}
|
||||
|
||||
public static void MoveToOpenPosition(IObject3D itemToMove, IObject3D scene, AxisAlignedBoundingBox allPlacedMeshBounds)
|
||||
public static void MoveToOpenPosition(IObject3D itemToMove, IEnumerable<IObject3D> sceneItems, AxisAlignedBoundingBox allPlacedMeshBounds)
|
||||
{
|
||||
double xStart = allPlacedMeshBounds.minXYZ.x;
|
||||
double yStart = allPlacedMeshBounds.minXYZ.y;
|
||||
|
|
@ -257,7 +257,7 @@ namespace MatterHackers.MatterControl
|
|||
// check far right edge
|
||||
for (yStep = 0; yStep < currentSize; yStep++)
|
||||
{
|
||||
partPlaced = CheckPosition(scene, itemToMove, itemToMoveBounds, yStep, xStep, ref transform);
|
||||
partPlaced = CheckPosition(sceneItems, itemToMove, itemToMoveBounds, yStep, xStep, ref transform);
|
||||
|
||||
if (partPlaced)
|
||||
{
|
||||
|
|
@ -271,7 +271,7 @@ namespace MatterHackers.MatterControl
|
|||
// check top edge
|
||||
for (xStep = 0; xStep < currentSize; xStep++)
|
||||
{
|
||||
partPlaced = CheckPosition(scene, itemToMove, itemToMoveBounds, yStep, xStep, ref transform);
|
||||
partPlaced = CheckPosition(sceneItems, itemToMove, itemToMoveBounds, yStep, xStep, ref transform);
|
||||
|
||||
if (partPlaced)
|
||||
{
|
||||
|
|
@ -283,7 +283,7 @@ namespace MatterHackers.MatterControl
|
|||
{
|
||||
xStep = currentSize;
|
||||
// check top right point
|
||||
partPlaced = CheckPosition(scene, itemToMove, itemToMoveBounds, yStep, xStep, ref transform);
|
||||
partPlaced = CheckPosition(sceneItems, itemToMove, itemToMoveBounds, yStep, xStep, ref transform);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -293,7 +293,7 @@ namespace MatterHackers.MatterControl
|
|||
itemToMove.Matrix *= transform;
|
||||
}
|
||||
|
||||
private static bool CheckPosition(IObject3D scene, IObject3D itemToMove, AxisAlignedBoundingBox meshToMoveBounds, int yStep, int xStep, ref Matrix4X4 transform)
|
||||
private static bool CheckPosition(IEnumerable<IObject3D> sceneItems, IObject3D itemToMove, AxisAlignedBoundingBox meshToMoveBounds, int yStep, int xStep, ref Matrix4X4 transform)
|
||||
{
|
||||
double xStepAmount = 5;
|
||||
double yStepAmount = 5;
|
||||
|
|
@ -305,7 +305,7 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
AxisAlignedBoundingBox testBounds = meshToMoveBounds.NewTransformed(transform);
|
||||
|
||||
foreach (IObject3D meshToTest in scene.Children)
|
||||
foreach (IObject3D meshToTest in sceneItems)
|
||||
{
|
||||
if (meshToTest != itemToMove)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -110,22 +110,25 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
redoButton.Enabled = undoBuffer.RedoCount > 0;
|
||||
};
|
||||
|
||||
var editPrinterButton = PrinterSelectEditDropdown.CreatePrinterEditButton();
|
||||
this.AddChild(editPrinterButton);
|
||||
|
||||
overflowDropdown = new OverflowDropdown(allowLightnessInvert: true)
|
||||
{
|
||||
AlignToRightEdge = true,
|
||||
};
|
||||
overflowDropdown.DynamicPopupContent = GeneratePopupContent;
|
||||
overflowDropdown.DynamicPopupContent = GeneratePrinterOverflowMenu;
|
||||
|
||||
// Deregister on close
|
||||
this.Closed += (s, e) =>
|
||||
{
|
||||
overflowDropdown.DynamicPopupContent = GeneratePopupContent;
|
||||
overflowDropdown.DynamicPopupContent = GeneratePrinterOverflowMenu;
|
||||
};
|
||||
|
||||
this.AddChild(overflowDropdown);
|
||||
}
|
||||
|
||||
private GuiWidget GeneratePopupContent()
|
||||
private GuiWidget GeneratePrinterOverflowMenu()
|
||||
{
|
||||
var widgetToPop = new FlowLayoutWidget()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
foreach (var sceneItem in Scene.Children)
|
||||
{
|
||||
PlatingHelper.MoveToOpenPosition(sceneItem, Scene);
|
||||
PlatingHelper.MoveToOpenPosition(sceneItem, Scene.Children);
|
||||
|
||||
arrangedScene.Children.Add(sceneItem);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
IObject3D newItem = await Task.Run(() =>
|
||||
{
|
||||
var clonedItem = Scene.SelectedItem.Clone();
|
||||
PlatingHelper.MoveToOpenPosition(clonedItem, Scene);
|
||||
PlatingHelper.MoveToOpenPosition(clonedItem, Scene.Children);
|
||||
|
||||
return clonedItem;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1970,7 +1970,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
{
|
||||
Scene.ModifyChildren(children => children.Add(contentResult.Object3D));
|
||||
|
||||
PlatingHelper.MoveToOpenPosition(contentResult.Object3D, this.Scene);
|
||||
PlatingHelper.MoveToOpenPosition(contentResult.Object3D, this.Scene.Children);
|
||||
|
||||
// TODO: There should be a batch insert so you can undo large 'add to scene' operations in one go
|
||||
//this.InsertNewItem(tempScene);
|
||||
|
|
@ -2531,7 +2531,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
if (renderTypeCheckBox.Checked)
|
||||
{
|
||||
// TODO: Determine if Scene is available in scope
|
||||
var scene = MatterControlApplication.Instance.ActiveView3DWidget.Scene;
|
||||
var scene = this.Scene;
|
||||
|
||||
meshViewerWidget.RenderType = RenderTypes.Overhang;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue