public string GetCoords(CsgFace face, Color strokeColor, Color fillColor, double lineWidth = 1) { Vector2 p1 = (new Vector2(face.v1.Position.X, -face.v1.Position.Y) + offset) * scale; Vector2 p2 = (new Vector2(face.v2.Position.X, -face.v2.Position.Y) + offset) * scale; Vector2 p3 = (new Vector2(face.v3.Position.X, -face.v3.Position.Y) + offset) * scale; string coords = $"{p1.X:0.0}, {p1.Y:0.0}"; coords += $", {p2.X:0.0}, {p2.Y:0.0}"; coords += $", {p3.X:0.0}, {p3.Y:0.0}"; return($"<polygon points=\"{coords}\" style=\"fill: {fillColor.Html}; stroke: {strokeColor}; stroke - width:.1\" />"); }
public static bool FaceAtHeight(CsgFace face, double height) { if (!AreEqual(face.v1.Position.Z, height)) { return(false); } if (!AreEqual(face.v2.Position.Z, height)) { return(false); } if (!AreEqual(face.v3.Position.Z, height)) { return(false); } return(true); }
public void Classify2(CsgFace face) { if (FaceAtHeight(face, EvaluateHeight)) { Color color = new Color(); switch (face.Status) { case FaceStatus.Unknown: color = Color.Cyan; break; case FaceStatus.Inside: color = Color.Green; break; case FaceStatus.Outside: color = Color.Red; break; case FaceStatus.Same: color = Color.Gray; break; case FaceStatus.Opposite: color = Color.Yellow; break; case FaceStatus.Boundary: color = Color.Indigo; break; default: throw new NotImplementedException(); } // make it transparent color = new Color(color, 100); classifiedFaces2.AppendLine(GetCoords(face, Color.Black, color)); } }
public void Split(CsgFace faceToSplit, CsgFace splitAtFace) { if (FaceAtHeight(faceToSplit, EvaluateHeight)) { allSplitPolygonDebug.AppendLine(GetCoords(faceToSplit)); if (currentIndex == 0) { htmlContent.AppendLine("<!DOCTYPE html>"); htmlContent.AppendLine("<html>"); htmlContent.AppendLine("<body>"); htmlContent.AppendLine("<br>Full</br>"); } currentIndex++; individualPolygonDebug.AppendLine($"<br>{currentIndex}</br>"); individualPolygonDebug.AppendLine($"<svg height='{svgHeight}' width='{svgWidth}'>"); individualPolygonDebug.AppendLine(GetCoords(faceToSplit)); individualPolygonDebug.AppendLine(GetCoords(splitAtFace)); individualPolygonDebug.AppendLine("</svg>"); } }
public string GetCoords(CsgFace face) { return(GetCoords(face, Color.Black, new Color(Color.Red, 100))); }