private ToolpathPreviewJoint GenerateRightBevel(Segment3d segBefore, Segment3d segAfter, TPrintVertex printVertex, ToolpathPreviewMesh mesh) { CreateFrames(segBefore, segAfter, out var frameMiter, out var frameSegBefore, out var frameSegAfter); var joint = new ToolpathPreviewJoint(); joint.InTop = joint.OutTop = mesh.AddVertex(vertexFactory(printVertex, frameMiter.FromFrameP(DiamondCrossSection.Top(printVertex.Dimensions)), brightnessMax)); if (CornerIsInsideTube(segBefore, segAfter, printVertex.Dimensions.x)) { AddLeftSquare(mesh, printVertex, ref frameSegBefore, ref frameSegAfter, joint); } else { AddLeftMiter(mesh, printVertex, ref frameMiter, ref frameSegBefore, joint); } joint.InBottom = joint.OutBottom = mesh.AddVertex(vertexFactory(printVertex, frameMiter.FromFrameP(DiamondCrossSection.Bottom(printVertex.Dimensions)), brightnessMax)); double bevelDistance = GetBevelDistance(ref segBefore, ref segAfter, printVertex.Dimensions); joint.InRight = mesh.AddVertex(vertexFactory(printVertex, frameSegBefore.FromFrameP(DiamondCrossSection.Right(printVertex.Dimensions, 1, bevelDistance)), brightnessMin)); joint.OutRight = mesh.AddVertex(vertexFactory(printVertex, frameSegAfter.FromFrameP(DiamondCrossSection.Right(printVertex.Dimensions, 1, -bevelDistance)), brightnessMin)); mesh.AddTriangle(joint.InRight, joint.OutRight, joint.InTop); mesh.AddTriangle(joint.InRight, joint.InBottom, joint.OutRight); return(joint); }
private void AddCapBeforeJoint(Vector3d segmentDirection, TPrintVertex printVertex, ToolpathPreviewJoint joint, ToolpathPreviewMesh mesh) { var frame = new Frame3f(printVertex.Position); frame.AlignAxis(1, ToVector3f(segmentDirection)); joint.InTop = mesh.AddVertex(vertexFactory(printVertex, frame.FromFrameP(DiamondCrossSection.Top(printVertex.Dimensions)), brightnessMax)); joint.InRight = mesh.AddVertex(vertexFactory(printVertex, frame.FromFrameP(DiamondCrossSection.Right(printVertex.Dimensions)), brightnessMin)); joint.InBottom = mesh.AddVertex(vertexFactory(printVertex, frame.FromFrameP(DiamondCrossSection.Bottom(printVertex.Dimensions)), brightnessMax)); joint.InLeft = mesh.AddVertex(vertexFactory(printVertex, frame.FromFrameP(DiamondCrossSection.Left(printVertex.Dimensions)), brightnessMin)); mesh.AddTriangle(joint.InBottom, joint.InLeft, joint.InTop); mesh.AddTriangle(joint.InBottom, joint.InTop, joint.InRight); }
protected virtual void AddEdges(ToolpathPreviewJoint[] joints, ToolpathPreviewMesh mesh) { for (int i = joints.Length - 2; i >= 0; i--) { var start = joints[i]; var end = joints[i + 1]; mesh.AddTriangle(start.OutRight, end.InRight, start.OutTop); mesh.AddTriangle(end.InRight, end.InTop, start.OutTop); mesh.AddTriangle(start.OutTop, end.InTop, start.OutLeft); mesh.AddTriangle(end.InTop, end.InLeft, start.OutLeft); mesh.AddTriangle(start.OutLeft, end.InLeft, start.OutBottom); mesh.AddTriangle(end.InLeft, end.InBottom, start.OutBottom); mesh.AddTriangle(start.OutBottom, end.InBottom, start.OutRight); mesh.AddTriangle(end.InBottom, end.InRight, start.OutRight); } }