Merge pull request #2565 from larsbrubaker/design_tools
Made difference use visible meshes
This commit is contained in:
commit
b4b3dfea9d
5 changed files with 38 additions and 38 deletions
|
|
@ -68,17 +68,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
{
|
||||
}
|
||||
|
||||
public DifferenceItem(IObject3D child, string ownerId, bool keep)
|
||||
public DifferenceItem(IObject3D child, string ownerId, bool makeHole)
|
||||
: base(child, ownerId)
|
||||
{
|
||||
this.Keep = keep;
|
||||
if (!keep)
|
||||
if (makeHole)
|
||||
{
|
||||
OutputType = PrintOutputTypes.Hole;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Keep { get; set; } = true;
|
||||
}
|
||||
|
||||
public class DifferenceGroup : Object3D
|
||||
|
|
@ -94,14 +91,14 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
});
|
||||
|
||||
bool first = true;
|
||||
// now wrap every decendant that has a mesh
|
||||
foreach (var child in this.Descendants().Where((o) => o.Mesh != null))
|
||||
// now wrap every first decendant that has a mesh
|
||||
foreach (var child in this.VisibleMeshes().Where((o) => o.Mesh != null))
|
||||
{
|
||||
// wrap the child in a DifferenceItem
|
||||
child.Parent.Children.Modify((list) =>
|
||||
{
|
||||
list.Remove(child);
|
||||
list.Add(new DifferenceItem(child, this.ID, first));
|
||||
list.Add(new DifferenceItem(child, this.ID, !first));
|
||||
first = false;
|
||||
});
|
||||
}
|
||||
|
|
@ -115,9 +112,9 @@ namespace MatterHackers.MatterControl.PartPreviewWindow.View3D
|
|||
await Task.Run(() =>
|
||||
{
|
||||
var container = this;
|
||||
var participants = this.Descendants().Where((obj) => obj.OwnerID == this.ID);
|
||||
var removeObjects = participants.Where((obj) => ((DifferenceItem)obj).Keep == false);
|
||||
var keepObjects = participants.Where((obj) => ((DifferenceItem)obj).Keep == true);
|
||||
var participants = this.VisibleMeshes().Where((obj) => obj.OwnerID == this.ID);
|
||||
var removeObjects = participants.Where((obj) => ((DifferenceItem)obj).OutputType == PrintOutputTypes.Hole);
|
||||
var keepObjects = participants.Where((obj) => ((DifferenceItem)obj).OutputType != PrintOutputTypes.Hole);
|
||||
|
||||
if (removeObjects.Any()
|
||||
&& keepObjects.Any())
|
||||
|
|
|
|||
|
|
@ -318,7 +318,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
|
||||
public bool IsActive { get; set; } = true;
|
||||
|
||||
private void DrawObject(IObject3D object3D, List<MeshRenderData> transparentMeshes, bool parentSelected, DrawEventArgs e)
|
||||
private void DrawObject(IObject3D object3D, List<IObject3D> transparentMeshes, bool parentSelected, DrawEventArgs e)
|
||||
{
|
||||
var totalVertices = 0;
|
||||
|
||||
|
|
@ -349,12 +349,12 @@ namespace MatterHackers.MeshVisualizer
|
|||
bool isSelected = parentSelected ||
|
||||
scene.HasSelection && (object3D == scene.SelectedItem || scene.SelectedItem.Children.Contains(object3D));
|
||||
|
||||
RGBA_Bytes drawColor = renderData.Color;
|
||||
if (renderData.OutputType == PrintOutputTypes.Support)
|
||||
RGBA_Bytes drawColor = renderData.WorldColor();
|
||||
if (renderData.WorldOutputType() == PrintOutputTypes.Support)
|
||||
{
|
||||
drawColor = new RGBA_Bytes(RGBA_Bytes.Yellow, 120);
|
||||
}
|
||||
else if (renderData.OutputType == PrintOutputTypes.Hole)
|
||||
else if (renderData.WorldOutputType() == PrintOutputTypes.Hole)
|
||||
{
|
||||
drawColor = new RGBA_Bytes(RGBA_Bytes.Gray, 120);
|
||||
}
|
||||
|
|
@ -362,20 +362,23 @@ namespace MatterHackers.MeshVisualizer
|
|||
// check if we should be rendering materials (this overrides the other colors)
|
||||
if (this.RenderType == RenderTypes.Materials)
|
||||
{
|
||||
drawColor = MatterialRendering.Color(renderData.MaterialIndex);
|
||||
drawColor = MatterialRendering.Color(renderData.WorldMaterialIndex());
|
||||
}
|
||||
|
||||
if (drawColor.alpha == 255)
|
||||
{
|
||||
GLHelper.Render(renderData.Mesh, drawColor, renderData.Matrix, RenderType, renderData.Matrix * World.ModelviewMatrix);
|
||||
GLHelper.Render(renderData.Mesh, drawColor, renderData.WorldMatrix(), RenderType, renderData.WorldMatrix() * World.ModelviewMatrix);
|
||||
}
|
||||
else
|
||||
{
|
||||
transparentMeshes.Add(new MeshRenderData(renderData.Mesh,
|
||||
renderData.Matrix,
|
||||
drawColor,
|
||||
renderData.MaterialIndex,
|
||||
renderData.OutputType));
|
||||
transparentMeshes.Add(new Object3D()
|
||||
{
|
||||
Mesh = renderData.Mesh,
|
||||
Matrix = renderData.WorldMatrix(),
|
||||
Color = drawColor,
|
||||
MaterialIndex = renderData.WorldMaterialIndex(),
|
||||
OutputType = renderData.WorldOutputType()
|
||||
});
|
||||
}
|
||||
|
||||
if (isSelected && !tooBigForComplexSelection)
|
||||
|
|
@ -390,7 +393,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
}
|
||||
}
|
||||
|
||||
private void RenderNormals(MeshRenderData renderData)
|
||||
private void RenderNormals(IObject3D renderData)
|
||||
{
|
||||
var frustum = World.GetClippingFrustum();
|
||||
|
||||
|
|
@ -412,7 +415,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
}
|
||||
}
|
||||
|
||||
private void RenderSelection(MeshRenderData renderData, Frustum frustum)
|
||||
private void RenderSelection(IObject3D renderData, Frustum frustum)
|
||||
{
|
||||
var screenPosition = new Vector3[3];
|
||||
GLHelper.PrepareFor3DLineRender(true);
|
||||
|
|
@ -423,7 +426,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
{
|
||||
if (meshEdge.GetNumFacesSharingEdge() == 2)
|
||||
{
|
||||
var meshToView = renderData.Matrix * World.ModelviewMatrix;
|
||||
var meshToView = renderData.WorldMatrix() * World.ModelviewMatrix;
|
||||
|
||||
FaceEdge firstFaceEdge = meshEdge.firstFaceEdge;
|
||||
FaceEdge nextFaceEdge = meshEdge.firstFaceEdge.radialNextFaceEdge;
|
||||
|
|
@ -438,8 +441,8 @@ namespace MatterHackers.MeshVisualizer
|
|||
|
||||
if (firstTowards != nextTowards)
|
||||
{
|
||||
var transformed1 = Vector3.Transform(meshEdge.VertexOnEnd[0].Position, renderData.Matrix);
|
||||
var transformed2 = Vector3.Transform(meshEdge.VertexOnEnd[1].Position, renderData.Matrix);
|
||||
var transformed1 = Vector3.Transform(meshEdge.VertexOnEnd[0].Position, renderData.WorldMatrix());
|
||||
var transformed2 = Vector3.Transform(meshEdge.VertexOnEnd[1].Position, renderData.WorldMatrix());
|
||||
|
||||
GLHelper.Render3DLineNoPrep(frustum, World, transformed1, transformed2, RGBA_Bytes.White, selectionHighlightWidth);
|
||||
}
|
||||
|
|
@ -448,7 +451,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
}
|
||||
else // just render the bounding box
|
||||
{
|
||||
RenderAABB(frustum, renderData.Mesh.GetAxisAlignedBoundingBox(), renderData.Matrix, RGBA_Bytes.White, selectionHighlightWidth);
|
||||
RenderAABB(frustum, renderData.Mesh.GetAxisAlignedBoundingBox(), renderData.WorldMatrix(), RGBA_Bytes.White, selectionHighlightWidth);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -471,7 +474,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
|
||||
public EditorType EditorMode { get; set; } = EditorType.Part;
|
||||
|
||||
private int BackToFrontXY(MeshRenderData a, MeshRenderData b)
|
||||
private int BackToFrontXY(IObject3D a, IObject3D b)
|
||||
{
|
||||
var aCenterWorld = Vector3.Transform(a.Mesh.GetAxisAlignedBoundingBox().Center, a.Matrix);
|
||||
aCenterWorld.z = 0; // we only want to look at the distance on xy in world space
|
||||
|
|
@ -486,7 +489,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
|
||||
private void Draw_GlOpaqueContent(object sender, DrawEventArgs e)
|
||||
{
|
||||
List<MeshRenderData> transparentMeshes = new List<MeshRenderData>();
|
||||
List<IObject3D> transparentMeshes = new List<IObject3D>();
|
||||
foreach (var object3D in scene.Children)
|
||||
{
|
||||
DrawObject(object3D, transparentMeshes, false, e);
|
||||
|
|
@ -495,7 +498,7 @@ namespace MatterHackers.MeshVisualizer
|
|||
|
||||
private void Draw_GlTransparentContent(object sender, DrawEventArgs e)
|
||||
{
|
||||
List<MeshRenderData> transparentMeshes = new List<MeshRenderData>();
|
||||
List<IObject3D> transparentMeshes = new List<IObject3D>();
|
||||
foreach (var object3D in scene.Children)
|
||||
{
|
||||
if (object3D.Visible)
|
||||
|
|
|
|||
|
|
@ -2020,7 +2020,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
|
||||
IVertex lowestVertex = null;
|
||||
Vector3 lowestVertexPosition = Vector3.Zero;
|
||||
MeshRenderData itemToLayFlat = null;
|
||||
IObject3D itemToLayFlat = null;
|
||||
|
||||
// Process each child, checking for the lowest vertex
|
||||
var objectsToCheck = objectToLayFlat.VisibleMeshes();
|
||||
|
|
@ -2030,7 +2030,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
for (int testIndex = 0; testIndex < itemToCheck.Mesh.Vertices.Count; testIndex++)
|
||||
{
|
||||
var vertex = itemToCheck.Mesh.Vertices[testIndex];
|
||||
Vector3 vertexPosition = Vector3.Transform(vertex.Position, itemToCheck.Matrix);
|
||||
Vector3 vertexPosition = Vector3.Transform(vertex.Position, itemToCheck.WorldMatrix());
|
||||
if(firstVertex)
|
||||
{
|
||||
lowestVertex = itemToCheck.Mesh.Vertices[testIndex];
|
||||
|
|
@ -2459,7 +2459,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
GLMeshTrianglePlugin glMeshPlugin = GLMeshTrianglePlugin.Get(meshRenderData.Mesh, (faceEdge) =>
|
||||
{
|
||||
Vector3 normal = faceEdge.ContainingFace.Normal;
|
||||
normal = Vector3.TransformVector(normal, meshRenderData.Matrix).GetNormal();
|
||||
normal = Vector3.TransformVector(normal, meshRenderData.WorldMatrix()).GetNormal();
|
||||
VertexColorData colorData = new VertexColorData();
|
||||
|
||||
double startColor = 223.0 / 360.0;
|
||||
|
|
|
|||
|
|
@ -138,11 +138,11 @@ namespace MatterHackers.MatterControl
|
|||
var loadedMeshGroups = object3D.VisibleMeshes().ToList();
|
||||
if (loadedMeshGroups?.Count > 0)
|
||||
{
|
||||
AxisAlignedBoundingBox aabb = loadedMeshGroups[0].Mesh.GetAxisAlignedBoundingBox(loadedMeshGroups[0].Matrix);
|
||||
AxisAlignedBoundingBox aabb = loadedMeshGroups[0].Mesh.GetAxisAlignedBoundingBox(loadedMeshGroups[0].WorldMatrix());
|
||||
|
||||
for (int i = 1; i < loadedMeshGroups.Count; i++)
|
||||
{
|
||||
aabb = AxisAlignedBoundingBox.Union(aabb, loadedMeshGroups[i].Mesh.GetAxisAlignedBoundingBox(loadedMeshGroups[i].Matrix));
|
||||
aabb = AxisAlignedBoundingBox.Union(aabb, loadedMeshGroups[i].Mesh.GetAxisAlignedBoundingBox(loadedMeshGroups[i].WorldMatrix()));
|
||||
}
|
||||
|
||||
RectangleDouble bounds2D = new RectangleDouble(aabb.minXYZ.x, aabb.minXYZ.y, aabb.maxXYZ.x, aabb.maxXYZ.y);
|
||||
|
|
@ -169,7 +169,7 @@ namespace MatterHackers.MatterControl
|
|||
|
||||
foreach (var meshGroup in loadedMeshGroups)
|
||||
{
|
||||
PolygonMesh.Rendering.OrthographicZProjection.DrawTo(partGraphics2D, meshGroup.Mesh, meshGroup.Matrix, new Vector2(-bounds2D.Left + PartMarginMM, -bounds2D.Bottom + textSpaceMM + PartMarginMM), PixelPerMM, RGBA_Bytes.Black);
|
||||
PolygonMesh.Rendering.OrthographicZProjection.DrawTo(partGraphics2D, meshGroup.Mesh, meshGroup.WorldMatrix(), new Vector2(-bounds2D.Left + PartMarginMM, -bounds2D.Bottom + textSpaceMM + PartMarginMM), PixelPerMM, RGBA_Bytes.Black);
|
||||
}
|
||||
partGraphics2D.Render(typeFacePrinter, RGBA_Bytes.Black);
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 0a95f55e75773792ee7d9e5be709d73e6a615b35
|
||||
Subproject commit 44f6c62951eee2cd1e6140c37b6a005fe08cd01b
|
||||
Loading…
Add table
Add a link
Reference in a new issue