From 12ba1e8bb00aa747bfc13c6e99a8b8739aae7723 Mon Sep 17 00:00:00 2001 From: Adnane Belmadiaf Date: Mon, 26 Feb 2024 14:39:11 +0100 Subject: [PATCH] WIP --- Sources/IO/Misc/OBJWriter/example/index.js | 16 +++++------ Sources/IO/Misc/OBJWriter/index.js | 31 +++++++++++++++++----- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/Sources/IO/Misc/OBJWriter/example/index.js b/Sources/IO/Misc/OBJWriter/example/index.js index 13338b4cefb..5c01ab83bf4 100644 --- a/Sources/IO/Misc/OBJWriter/example/index.js +++ b/Sources/IO/Misc/OBJWriter/example/index.js @@ -1,15 +1,15 @@ -import 'vtk.js/Sources/favicon'; +import '@kitware/vtk.js/favicon'; // Load the rendering pieces we want to use (for both WebGL and WebGPU) -import 'vtk.js/Sources/Rendering/Profiles/Geometry'; +import '@kitware/vtk.js/Rendering/Profiles/Geometry'; -import vtkFullScreenRenderWindow from 'vtk.js/Sources/Rendering/Misc/FullScreenRenderWindow'; -import vtkActor from 'vtk.js/Sources/Rendering/Core/Actor'; -import vtkMapper from 'vtk.js/Sources/Rendering/Core/Mapper'; +import vtkFullScreenRenderWindow from '@kitware/vtk.js/Rendering/Misc/FullScreenRenderWindow'; +import vtkActor from '@kitware/vtk.js/Rendering/Core/Actor'; +import vtkMapper from '@kitware/vtk.js/Rendering/Core/Mapper'; -import vtkOBJWriter from 'vtk.js/Sources/IO/Misc/OBJWriter'; -import vtkOBJReader from 'vtk.js/Sources/IO/Misc/OBJReader'; -import vtkPolyDataReader from 'vtk.js/Sources/IO/Legacy/PolyDataReader'; +import vtkOBJWriter from '@kitware/vtk.js/IO/Misc/OBJWriter'; +import vtkOBJReader from '@kitware/vtk.js/IO/Misc/OBJReader'; +import vtkPolyDataReader from '@kitware/vtk.js/IO/Legacy/PolyDataReader'; // ---------------------------------------------------------------------------- // Standard rendering code setup // ---------------------------------------------------------------------------- diff --git a/Sources/IO/Misc/OBJWriter/index.js b/Sources/IO/Misc/OBJWriter/index.js index 633cf306526..50a3c45e5bf 100644 --- a/Sources/IO/Misc/OBJWriter/index.js +++ b/Sources/IO/Misc/OBJWriter/index.js @@ -54,7 +54,7 @@ const writeLines = (lines) => { }; const writePoints = (pts, normals, tcoords) => { - let outputData = ''; + const outputData = []; const nbPts = pts.getNumberOfPoints(); let p; @@ -62,14 +62,14 @@ const writePoints = (pts, normals, tcoords) => { // Positions for (let i = 0; i < nbPts; i++) { p = pts.getPoint(i, p); - outputData += `v ${p[0]} ${p[1]} ${p[2]}\n`; + outputData.push[`v ${p[0]} ${p[1]} ${p[2]}`]; } // Normals if (normals) { for (let i = 0; i < nbPts; i++) { p = normals.getTuple(i, p); - outputData += `vn ${p[0]} ${p[1]} ${p[2]}\n`; + outputData.push[`vn ${p[0]} ${p[1]} ${p[2]}`]; } } @@ -77,13 +77,23 @@ const writePoints = (pts, normals, tcoords) => { if (tcoords) { for (let i = 0; i < nbPts; i++) { p = tcoords.getTuple(i, p); - outputData += `vt ${p[0]} ${p[1]}\n`; + outputData.push[`vt ${p[0]} ${p[1]}`]; } } - return outputData; + return outputData.join('/n'); }; -const writeOBJ = (polyData) => { +const writeMtl = (baseName, textureFileName) => { + const outputData = []; + // set material + const mtlName = 'material_0'; + outputData.push[`newmtl ${mtlName}`]; + outputData.push[`map_Kd ${textureFileName}`]; + return outputData.join('/n'); +}; + + +const writeOBJ = (polyData, textureFileName) => { let outputData = '# VTK.js generated OBJ File\n'; const pts = polyData.getPoints(); const polys = polyData.getPolys(); @@ -139,13 +149,20 @@ function vtkOBJWriter(publicAPI, model) { publicAPI.requestData = (inData, outData) => { const input = inData[0]; + const inputTexture = inData[1]; if (!input || !input.isA('vtkPolyData')) { vtkErrorMacro('Invalid or missing input'); return; } + if (!inputTexture || !input.isA('vtkTexture')) { + vtkErrorMacro('Invalid or missing input'); + return; + } + outData[0] = writeOBJ(input); + outData[1], outData[2] = writeMtl(input); }; } @@ -164,7 +181,7 @@ export function extend(publicAPI, model, initialValues = {}) { macro.obj(publicAPI, model); // Also make it an algorithm with one input and one output - macro.algo(publicAPI, model, 1, 1); + macro.algo(publicAPI, model, 2, 2); // Object specific methods vtkOBJWriter(publicAPI, model);