commit
f08b220c1e
4 changed files with 107 additions and 9 deletions
|
|
@ -368,11 +368,17 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||||
void SetToSolid()
|
void SetToSolid()
|
||||||
{
|
{
|
||||||
// make sure the render mode is set to shaded or outline
|
// make sure the render mode is set to shaded or outline
|
||||||
if (sceneContext.ViewState.RenderType != RenderOpenGl.RenderTypes.Shaded
|
switch(sceneContext.ViewState.RenderType)
|
||||||
&& sceneContext.ViewState.RenderType != RenderOpenGl.RenderTypes.Outlines)
|
{
|
||||||
{
|
case RenderOpenGl.RenderTypes.Shaded:
|
||||||
// make sure the render mode is set to outline
|
case RenderOpenGl.RenderTypes.Outlines:
|
||||||
sceneContext.ViewState.RenderType = RenderOpenGl.RenderTypes.Outlines;
|
case RenderOpenGl.RenderTypes.Polygons:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
// make sure the render mode is set to outline
|
||||||
|
sceneContext.ViewState.RenderType = RenderOpenGl.RenderTypes.Outlines;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
var currentOutputType = selectedItem.WorldOutputType();
|
var currentOutputType = selectedItem.WorldOutputType();
|
||||||
|
|
|
||||||
|
|
@ -142,7 +142,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
resultsMesh = Object3D.CombineParticipanets(SourceContainer, participants, cancellationToken, reporter);
|
resultsMesh = Object3D.CombineParticipants(SourceContainer, participants, cancellationToken, reporter);
|
||||||
}
|
}
|
||||||
|
|
||||||
var resultsItem = new Object3D()
|
var resultsItem = new Object3D()
|
||||||
|
|
@ -152,7 +152,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
||||||
|
|
||||||
if (holes != null)
|
if (holes != null)
|
||||||
{
|
{
|
||||||
var holesMesh = CombineParticipanets(SourceContainer, holes, cancellationToken, null);
|
var holesMesh = CombineParticipants(SourceContainer, holes, cancellationToken, null);
|
||||||
if (holesMesh != null)
|
if (holesMesh != null)
|
||||||
{
|
{
|
||||||
var holesItem = new Object3D()
|
var holesItem = new Object3D()
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 8f4e9b969638d3c70ba81ac4f1a2d8faeda8c73b
|
Subproject commit b64bd80cccc97bd8c0f9971d72c5b953588f6fa8
|
||||||
|
|
@ -36,9 +36,12 @@ using MatterHackers.MatterControl.DesignTools;
|
||||||
using MatterHackers.MatterControl.DesignTools.Operations;
|
using MatterHackers.MatterControl.DesignTools.Operations;
|
||||||
using MatterHackers.MatterControl.PartPreviewWindow.View3D;
|
using MatterHackers.MatterControl.PartPreviewWindow.View3D;
|
||||||
using MatterHackers.MatterControl.Tests.Automation;
|
using MatterHackers.MatterControl.Tests.Automation;
|
||||||
|
using MatterHackers.PolygonMesh;
|
||||||
|
using MatterHackers.PolygonMesh.Processors;
|
||||||
using MatterHackers.VectorMath;
|
using MatterHackers.VectorMath;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace MatterControl.Tests.MatterControl
|
namespace MatterControl.Tests.MatterControl
|
||||||
|
|
@ -280,6 +283,8 @@ namespace MatterControl.Tests.MatterControl
|
||||||
[Test, Category("InteractiveScene")]
|
[Test, Category("InteractiveScene")]
|
||||||
public async Task SubtractTests()
|
public async Task SubtractTests()
|
||||||
{
|
{
|
||||||
|
StartupMC();
|
||||||
|
|
||||||
// Subtract has correct number of results
|
// Subtract has correct number of results
|
||||||
{
|
{
|
||||||
var root = new Object3D();
|
var root = new Object3D();
|
||||||
|
|
@ -287,7 +292,7 @@ namespace MatterControl.Tests.MatterControl
|
||||||
var cubeB = await CubeObject3D.Create(20, 20, 20);
|
var cubeB = await CubeObject3D.Create(20, 20, 20);
|
||||||
var offsetCubeB = new TranslateObject3D(cubeB, 10);
|
var offsetCubeB = new TranslateObject3D(cubeB, 10);
|
||||||
|
|
||||||
var subtract = new SubtractObject3D();
|
var subtract = new SubtractObject3D_2();
|
||||||
subtract.Children.Add(cubeA);
|
subtract.Children.Add(cubeA);
|
||||||
subtract.Children.Add(offsetCubeB);
|
subtract.Children.Add(offsetCubeB);
|
||||||
subtract.SelectedChildren.Add(offsetCubeB.ID);
|
subtract.SelectedChildren.Add(offsetCubeB.ID);
|
||||||
|
|
@ -564,6 +569,93 @@ namespace MatterControl.Tests.MatterControl
|
||||||
Assert.IsTrue(rootAabb.Equals(new AxisAlignedBoundingBox(new Vector3(-10, -10, -10), new Vector3(10, 10, 11)), .01));
|
Assert.IsTrue(rootAabb.Equals(new AxisAlignedBoundingBox(new Vector3(-10, -10, -10), new Vector3(10, 10, 11)), .01));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void CombineTests2()
|
||||||
|
{
|
||||||
|
// overlaping results in simple new mesh
|
||||||
|
{
|
||||||
|
var meshA = PlatonicSolids.CreateCube(10, 10, 10);
|
||||||
|
meshA.Translate(0, 0, 0);
|
||||||
|
var meshB = PlatonicSolids.CreateCube(10, 10, 10);
|
||||||
|
meshB.Translate(0, 5, 0);
|
||||||
|
var mesh = Object3D.CombineParticipants(null,
|
||||||
|
new IObject3D[]
|
||||||
|
{
|
||||||
|
new Object3D() { Mesh = meshA },
|
||||||
|
new Object3D() { Mesh = meshB },
|
||||||
|
},
|
||||||
|
new CancellationToken());
|
||||||
|
Assert.AreEqual(12, mesh.Faces.Count());
|
||||||
|
var aabb = mesh.GetAxisAlignedBoundingBox();
|
||||||
|
Assert.AreEqual(15, aabb.YSize, .001);
|
||||||
|
}
|
||||||
|
|
||||||
|
// multiple overlaping faces all combine
|
||||||
|
{
|
||||||
|
var meshA = PlatonicSolids.CreateCube(10, 10, 10);
|
||||||
|
meshA.Translate(0, 0, 0);
|
||||||
|
var meshB = PlatonicSolids.CreateCube(10, 10, 10);
|
||||||
|
meshB.Translate(0, -3, 0);
|
||||||
|
var meshC = PlatonicSolids.CreateCube(10, 10, 10);
|
||||||
|
meshC.Translate(0, 3, 0);
|
||||||
|
var mesh = Object3D.CombineParticipants(null,
|
||||||
|
new IObject3D[]
|
||||||
|
{
|
||||||
|
new Object3D() { Mesh = meshA },
|
||||||
|
new Object3D() { Mesh = meshB },
|
||||||
|
new Object3D() { Mesh = meshC },
|
||||||
|
},
|
||||||
|
new CancellationToken());
|
||||||
|
Assert.AreEqual(12, mesh.Faces.Count());
|
||||||
|
var aabb = mesh.GetAxisAlignedBoundingBox();
|
||||||
|
Assert.AreEqual(16, aabb.YSize, .001);
|
||||||
|
}
|
||||||
|
|
||||||
|
// a back face against a front face, both are removed
|
||||||
|
{
|
||||||
|
var meshA = PlatonicSolids.CreateCube(10, 10, 10);
|
||||||
|
meshA.Translate(0, -5, 0);
|
||||||
|
var meshB = PlatonicSolids.CreateCube(10, 10, 10);
|
||||||
|
meshB.Translate(0, 5, 0);
|
||||||
|
var mesh = Object3D.CombineParticipants(null,
|
||||||
|
new IObject3D[]
|
||||||
|
{
|
||||||
|
new Object3D() { Mesh = meshA },
|
||||||
|
new Object3D() { Mesh = meshB },
|
||||||
|
},
|
||||||
|
new CancellationToken());
|
||||||
|
Assert.AreEqual(12, mesh.Faces.Count());
|
||||||
|
var aabb = mesh.GetAxisAlignedBoundingBox();
|
||||||
|
Assert.AreEqual(20, aabb.YSize, .001);
|
||||||
|
}
|
||||||
|
|
||||||
|
// multiple overlaping faces all combine
|
||||||
|
{
|
||||||
|
// right side at 0
|
||||||
|
var meshA = PlatonicSolids.CreateCube(10, 5, 10);
|
||||||
|
meshA.Translate(-5, 0, 0);
|
||||||
|
// left side at -5
|
||||||
|
var meshB = PlatonicSolids.CreateCube(10, 5, 10);
|
||||||
|
meshB.Translate(0, 0, 0);
|
||||||
|
// right side at 0
|
||||||
|
var meshC = PlatonicSolids.CreateCube(5, 10, 10);
|
||||||
|
meshC.Translate(-2.5, 0, 0);
|
||||||
|
var mesh = Object3D.CombineParticipants(null,
|
||||||
|
new IObject3D[]
|
||||||
|
{
|
||||||
|
new Object3D() { Mesh = meshA },
|
||||||
|
new Object3D() { Mesh = meshB },
|
||||||
|
new Object3D() { Mesh = meshC },
|
||||||
|
},
|
||||||
|
new CancellationToken());
|
||||||
|
StlProcessing.Save(mesh, @"C:\temp\temp.stl", new CancellationToken());
|
||||||
|
Assert.AreEqual(20, mesh.Faces.Count());
|
||||||
|
var aabb = mesh.GetAxisAlignedBoundingBox();
|
||||||
|
Assert.AreEqual(16, aabb.YSize, .001);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
[Test, Category("InteractiveScene")]
|
[Test, Category("InteractiveScene")]
|
||||||
public async Task AlignObjectHasCorrectPositionsOnXAxis()
|
public async Task AlignObjectHasCorrectPositionsOnXAxis()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue