mirror of
https://github.com/JustinSDK/dotSCAD.git
synced 2025-08-13 10:14:41 +02:00
fix join-miter error
This commit is contained in:
@@ -34,8 +34,8 @@ module polyline2d(points, width = 1, startingStyle = "CAP_SQUARE", endingStyle =
|
|||||||
p1Style = p1Style, p2Style = p2Style);
|
p1Style = p1Style, p2Style = p2Style);
|
||||||
}
|
}
|
||||||
|
|
||||||
module joins(line, radius, i_end, i) {
|
module joins(line, radius, i_end, j) {
|
||||||
if(i < i_end) {
|
for(i = [j:i_end - 1]) {
|
||||||
p1 = line[i];
|
p1 = line[i];
|
||||||
p2 = line[i + 1];
|
p2 = line[i + 1];
|
||||||
p3 = line[i + 2];
|
p3 = line[i + 2];
|
||||||
@@ -46,25 +46,28 @@ module polyline2d(points, width = 1, startingStyle = "CAP_SQUARE", endingStyle =
|
|||||||
normv1xv2 = sqrt(v1 * v1 * v2 * v2);
|
normv1xv2 = sqrt(v1 * v1 * v2 * v2);
|
||||||
cosa = (v1 * v2) / normv1xv2;
|
cosa = (v1 * v2) / normv1xv2;
|
||||||
sina = -c / normv1xv2;
|
sina = -c / normv1xv2;
|
||||||
|
|
||||||
|
a = acos(cosa);
|
||||||
|
|
||||||
translate(p2)
|
translate(p2)
|
||||||
rotate(atan2(v1.y, v1.x) + (c > 0 ? -90 : asin(cosa))) {
|
rotate(90 + atan2(v1.y, v1.x))
|
||||||
|
{
|
||||||
if(joinStyle == "JOIN_ROUND") {
|
if(joinStyle == "JOIN_ROUND") {
|
||||||
a = acos(cosa);
|
rotate(c > 0 ? 180 : -a)
|
||||||
pie(
|
pie(
|
||||||
radius = radius,
|
radius = radius,
|
||||||
angle = [0, a],
|
angle = [0, a],
|
||||||
$fn = fn * 360 / a
|
$fn = fn * 360 / a
|
||||||
);
|
);
|
||||||
} else if(joinStyle == "JOIN_MITER") {
|
} else {
|
||||||
tana2 = sina / (1 + cosa); // tan(a / 2)
|
rotate(c > 0 ? 180 + a : -a)
|
||||||
polygon(radius * [[0, 0], [1, 0], [1, tana2], [cosa, sina]]);
|
if(joinStyle == "JOIN_MITER") {
|
||||||
} else { // "JOIN_BEVEL"
|
polygon(radius * [[0, 0], [1, 0], [1, sina / (1 + cosa)], [cosa, sina]]);
|
||||||
polygon(radius * [[0, 0], [1, 0], [cosa, sina]]);
|
} else { // "JOIN_BEVEL"
|
||||||
|
polygon(radius * [[0, 0], [1, 0], [cosa, sina]]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
joins(line, radius, i_end, i + 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user