Skip to content

Commit

Permalink
Add a helper function to get a vector on a triangle edge
Browse files Browse the repository at this point in the history
  • Loading branch information
marian42 committed Feb 10, 2024
1 parent cd3b7cc commit 88c73ca
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 23 deletions.
44 changes: 22 additions & 22 deletions src/export/STLExporter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,45 +95,45 @@ class STLExporter {

for (var i = 0; i < edge1Hits.length - 1; i++) {
result.push(new Triangle(
Vector3.interpolate(triangle.v1, triangle.v2, edge1Hits[i]),
Vector3.interpolate(triangle.v1, triangle.v2, edge1Hits[i + 1]),
Vector3.interpolate(triangle.v3, triangle.v1, edge3Hits[edge3Hits.length - 1])
triangle.getOnEdge1(edge1Hits[i]),
triangle.getOnEdge1(edge1Hits[i + 1]),
triangle.getOnEdge3(edge3Hits[edge3Hits.length - 1])
));
}
for (var i = 0; i < edge2Hits.length - 1; i++) {
result.push(new Triangle(
Vector3.interpolate(triangle.v2, triangle.v3, edge2Hits[i]),
Vector3.interpolate(triangle.v2, triangle.v3, edge2Hits[i + 1]),
Vector3.interpolate(triangle.v1, triangle.v2, edge1Hits[edge1Hits.length - 1])
triangle.getOnEdge2(edge2Hits[i]),
triangle.getOnEdge2(edge2Hits[i + 1]),
triangle.getOnEdge1(edge1Hits[edge1Hits.length - 1])
));
}
for (var i = 0; i < edge3Hits.length - 1; i++) {
result.push(new Triangle(
Vector3.interpolate(triangle.v3, triangle.v1, edge3Hits[i]),
Vector3.interpolate(triangle.v3, triangle.v1, edge3Hits[i + 1]),
Vector3.interpolate(triangle.v2, triangle.v3, edge2Hits[edge2Hits.length - 1])
))
triangle.getOnEdge3(edge3Hits[i]),
triangle.getOnEdge3(edge3Hits[i + 1]),
triangle.getOnEdge2(edge2Hits[edge2Hits.length - 1])
));
}
if (edge1Hits.length > 1 && edge2Hits.length == 1) {
result.push(new Triangle(
Vector3.interpolate(triangle.v1, triangle.v2, edge1Hits[edge1Hits.length - 1]),
Vector3.interpolate(triangle.v2, triangle.v3, edge2Hits[0]),
Vector3.interpolate(triangle.v3, triangle.v1, edge3Hits[edge3Hits.length - 1]),
))
triangle.getOnEdge1(edge1Hits[edge1Hits.length - 1]),
triangle.getOnEdge2(edge2Hits[0]),
triangle.getOnEdge3(edge3Hits[edge3Hits.length - 1])
));
}
else if (edge2Hits.length > 1 && edge3Hits.length == 1) {
result.push(new Triangle(
Vector3.interpolate(triangle.v2, triangle.v3, edge2Hits[edge2Hits.length - 1]),
Vector3.interpolate(triangle.v3, triangle.v1, edge3Hits[0]),
Vector3.interpolate(triangle.v1, triangle.v2, edge1Hits[edge1Hits.length - 1]),
))
triangle.getOnEdge2(edge2Hits[edge2Hits.length - 1]),
triangle.getOnEdge3(edge3Hits[0]),
triangle.getOnEdge1(edge1Hits[edge1Hits.length - 1])
));
}
else if (edge3Hits.length > 1 && edge1Hits.length == 1) {
result.push(new Triangle(
Vector3.interpolate(triangle.v3, triangle.v1, edge3Hits[edge3Hits.length - 1]),
Vector3.interpolate(triangle.v1, triangle.v2, edge1Hits[0]),
Vector3.interpolate(triangle.v2, triangle.v3, edge2Hits[edge2Hits.length - 1]),
))
triangle.getOnEdge3(edge3Hits[edge3Hits.length - 1]),
triangle.getOnEdge1(edge1Hits[0]),
triangle.getOnEdge2(edge2Hits[edge2Hits.length - 1])
));
}
}

Expand Down
14 changes: 13 additions & 1 deletion src/geometry/Triangle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,19 @@ class Triangle {
}
}

normal(): Vector3 {
public normal(): Vector3 {
return this.v3.minus(this.v1).cross(this.v2.minus(this.v1)).normalized();
}

public getOnEdge1(progress: number): Vector3 {
return Vector3.interpolate(this.v1, this.v2, progress);
}

public getOnEdge2(progress: number): Vector3 {
return Vector3.interpolate(this.v2, this.v3, progress);
}

public getOnEdge3(progress: number): Vector3 {
return Vector3.interpolate(this.v3, this.v1, progress);
}
}

0 comments on commit 88c73ca

Please sign in to comment.