Skip to content

Commit

Permalink
Add a function to export as a Studio part
Browse files Browse the repository at this point in the history
  • Loading branch information
marian42 committed Mar 26, 2021
1 parent d7f41a9 commit b5a60d7
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
6 changes: 5 additions & 1 deletion src/editor/Editor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ class Editor {
this.canvas.addEventListener("wheel", (event: MouseWheelEvent) => this.onScroll(event));
document.getElementById("clear").addEventListener("click", (event: MouseEvent) => this.clear());
document.getElementById("share").addEventListener("click", (event: MouseEvent) => this.share());
document.getElementById("save").addEventListener("click", (event: MouseEvent) => this.saveSTL());
document.getElementById("save").addEventListener("click", (event: MouseEvent) => this.saveStudioPart());
document.getElementById("remove").addEventListener("click", (event: MouseEvent) => this.remove());
document.getElementById("style").addEventListener("change", (event: MouseEvent) => this.setRenderStyle(parseInt((event.srcElement as HTMLSelectElement).value)));
window.addEventListener("resize", (e: Event) => this.camera.onResize());
Expand All @@ -100,6 +100,10 @@ class Editor {
new PartMeshGenerator(this.part, this.measurements).getMesh().saveSTLFile(this.measurements.technicUnit);
}

private saveStudioPart() {
new PartMeshGenerator(this.part, this.measurements).getMesh().savePartFile(this.part, "Test Part", "test.part");
}

private initializeEditor(elementId: string, onchange: (value: string) => void) {
var element = document.getElementById(elementId);
for (var i = 0; i < element.children.length; i++) {
Expand Down
43 changes: 43 additions & 0 deletions src/geometry/Mesh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,10 @@ class Mesh {
view.setInt16(offset + 48, 0, true);
}

private formatVector(vector: Vector3): string {
return (vector.x * 20).toFixed(4) + " " + (-vector.y * 20).toFixed(4) + " " + (-vector.z * 20).toFixed(4);
}

public saveSTLFile(scalingFactor: number, filename = "part.stl") {
let blob = new Blob([this.createSTLFile(scalingFactor)], { type: "application/octet-stream" });
let link = document.createElement('a');
Expand All @@ -123,6 +127,45 @@ class Mesh {
link.click();
}

private createPartFile(part: Part, name: string, filename: string): string {
var result: string = `0 FILE ` + filename + `
0 Description: part
0 Name:
0 Author:
0 BFC CERTIFY CCW
1 16 0.0000 -0.5000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 part.obj_grouped
0 NOFILE
0 FILE part.obj_grouped
0 Description: part.obj_grouped
0 Name:
0 Author:
0 ModelType: Part
0 BFC CERTIFY CCW
1 16 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 0.0000 0.0000 0.0000 1.0000 part.obj
0 NOFILE
0 FILE part.obj
0 Description: part.obj
0 Name:
0 Author:
0 BFC CERTIFY CCW
`;

for (var triangle of this.triangles) {
result += "3 16 " + this.formatVector(triangle.v1) + " " + this.formatVector(triangle.v2) + " " + this.formatVector(triangle.v3) + "\n";
}

result += "0 NOFILE\n";
return result;
}

public savePartFile(part: Part, name: string, filename = "part.part") {
var content = this.createPartFile(part, name, filename);
let link = document.createElement('a');
link.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(content);
link.download = filename;
link.click();
}

public getVertexCount(): number {
return this.triangles.length * 3;
}
Expand Down

0 comments on commit b5a60d7

Please sign in to comment.