Merge pull request #2384 from larsbrubaker/design_tools
Better selection rendering
This commit is contained in:
commit
acd53dc114
5 changed files with 41 additions and 12 deletions
|
|
@ -122,7 +122,7 @@ namespace MatterHackers.MatterControl
|
|||
{
|
||||
foreach (Face face in printerBed.Faces)
|
||||
{
|
||||
if (face.normal.z > 0)
|
||||
if (face.Normal.z > 0)
|
||||
{
|
||||
face.SetTexture(0, bedplateImage);
|
||||
foreach (FaceEdge faceEdge in face.FaceEdges())
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ using MatterHackers.Agg;
|
|||
using MatterHackers.Agg.UI;
|
||||
using MatterHackers.DataConverters3D;
|
||||
using MatterHackers.Localizations;
|
||||
using MatterHackers.PolygonMesh;
|
||||
|
||||
namespace MatterHackers.MatterControl.PartPreviewWindow
|
||||
{
|
||||
|
|
@ -91,6 +92,11 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
holeBehaviorButton.Click += (s, e) =>
|
||||
{
|
||||
item.OutputType = PrintOutputTypes.Hole;
|
||||
if(item.Mesh != null)
|
||||
{
|
||||
item.Mesh.FaceBspTree = FaceBspTree.Create(item.Mesh);
|
||||
}
|
||||
|
||||
view3DWidget.Invalidate();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -413,25 +413,48 @@ namespace MatterHackers.MeshVisualizer
|
|||
FaceEdge firstFaceEdge = meshEdge.firstFaceEdge;
|
||||
FaceEdge nextFaceEdge = meshEdge.firstFaceEdge.radialNextFaceEdge;
|
||||
// find out if one face is facing the camera and one is facing away
|
||||
var vertexPosition = World.GetScreenSpace(Vector3.Transform(firstFaceEdge.FirstVertex.Position, renderData.Matrix));
|
||||
var firstNormal = World.GetScreenSpace(Vector3.Transform(firstFaceEdge.FirstVertex.Position + firstFaceEdge.ContainingFace.normal, renderData.Matrix));
|
||||
var nextNormal = World.GetScreenSpace(Vector3.Transform(firstFaceEdge.FirstVertex.Position + nextFaceEdge.ContainingFace.normal, renderData.Matrix));
|
||||
var worldVertexPosition = Vector3.Transform(firstFaceEdge.FirstVertex.Position, renderData.Matrix);
|
||||
var worldFirstNormal = Vector3.TransformNormal(firstFaceEdge.ContainingFace.Normal, renderData.Matrix).GetNormal();
|
||||
var worldNextNormal = Vector3.TransformNormal(nextFaceEdge.ContainingFace.Normal, renderData.Matrix).GetNormal();
|
||||
|
||||
var firstTowards = (firstNormal - vertexPosition).z < 0;
|
||||
var nextTowards = (nextNormal - vertexPosition).z < 0;
|
||||
var screenVertexPosition = World.GetScreenSpace(worldVertexPosition);
|
||||
var screenFirstNormalEnd = World.GetScreenSpace(worldVertexPosition + worldFirstNormal);
|
||||
var screenNextNormalEnd = World.GetScreenSpace(worldVertexPosition + worldNextNormal);
|
||||
|
||||
var firstTowards = (screenFirstNormalEnd - screenVertexPosition).z < 0;
|
||||
var nextTowards = (screenNextNormalEnd - screenVertexPosition).z < 0;
|
||||
|
||||
if (firstTowards != nextTowards)
|
||||
{
|
||||
var transformed1 = Vector3.Transform(meshEdge.VertexOnEnd[0].Position, renderData.Matrix);
|
||||
var transformed2 = Vector3.Transform(meshEdge.VertexOnEnd[1].Position, renderData.Matrix);
|
||||
|
||||
for (int i = 0; i < 3; i++)
|
||||
{
|
||||
GLHelper.Render3DLineNoPrep(frustum, World, transformed1, transformed2, RGBA_Bytes.White, selectionHighlightWidth);
|
||||
}
|
||||
GLHelper.Render3DLineNoPrep(frustum, World, transformed1, transformed2, RGBA_Bytes.White, selectionHighlightWidth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// render debug normals
|
||||
bool renderNormal = false;
|
||||
if (renderNormal)
|
||||
{
|
||||
foreach (var face in renderData.Mesh.Faces)
|
||||
{
|
||||
int vertexCount = 0;
|
||||
Vector3 faceCenter = Vector3.Zero;
|
||||
foreach (var vertex in face.Vertices())
|
||||
{
|
||||
faceCenter += vertex.Position;
|
||||
vertexCount++;
|
||||
}
|
||||
faceCenter /= vertexCount;
|
||||
|
||||
var transformed1 = Vector3.Transform(faceCenter, renderData.Matrix);
|
||||
var normal = Vector3.TransformNormal(face.Normal, renderData.Matrix).GetNormal();
|
||||
|
||||
GLHelper.Render3DLineNoPrep(frustum, World, transformed1, transformed1 + normal, RGBA_Bytes.Red, selectionHighlightWidth);
|
||||
}
|
||||
}
|
||||
}
|
||||
else // just render the bounding box
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2557,7 +2557,7 @@ namespace MatterHackers.MatterControl.PartPreviewWindow
|
|||
// change the color to be the right thing
|
||||
GLMeshTrianglePlugin glMeshPlugin = GLMeshTrianglePlugin.Get(meshRenderData.Mesh, (faceEdge) =>
|
||||
{
|
||||
Vector3 normal = faceEdge.ContainingFace.normal;
|
||||
Vector3 normal = faceEdge.ContainingFace.Normal;
|
||||
normal = Vector3.TransformVector(normal, meshRenderData.Matrix).GetNormal();
|
||||
VertexColorData colorData = new VertexColorData();
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 85e2df1ab9985343453f3e0753c1e1fa3f3e19cc
|
||||
Subproject commit 09c71c0d02dfa3af6871fe18f57c4fd07a104e61
|
||||
Loading…
Add table
Add a link
Reference in a new issue