@@ -54,36 +54,46 @@ const writeLines = (lines) => {
54
54
} ;
55
55
56
56
const writePoints = ( pts , normals , tcoords ) => {
57
- let outputData = '' ;
57
+ const outputData = [ ] ;
58
58
const nbPts = pts . getNumberOfPoints ( ) ;
59
59
60
60
let p ;
61
61
62
62
// Positions
63
63
for ( let i = 0 ; i < nbPts ; i ++ ) {
64
64
p = pts . getPoint ( i , p ) ;
65
- outputData += `v ${ p [ 0 ] } ${ p [ 1 ] } ${ p [ 2 ] } \n` ;
65
+ outputData . push [ `v ${ p [ 0 ] } ${ p [ 1 ] } ${ p [ 2 ] } ` ] ;
66
66
}
67
67
68
68
// Normals
69
69
if ( normals ) {
70
70
for ( let i = 0 ; i < nbPts ; i ++ ) {
71
71
p = normals . getTuple ( i , p ) ;
72
- outputData += `vn ${ p [ 0 ] } ${ p [ 1 ] } ${ p [ 2 ] } \n` ;
72
+ outputData . push [ `vn ${ p [ 0 ] } ${ p [ 1 ] } ${ p [ 2 ] } ` ] ;
73
73
}
74
74
}
75
75
76
76
// Textures
77
77
if ( tcoords ) {
78
78
for ( let i = 0 ; i < nbPts ; i ++ ) {
79
79
p = tcoords . getTuple ( i , p ) ;
80
- outputData += `vt ${ p [ 0 ] } ${ p [ 1 ] } \n` ;
80
+ outputData . push [ `vt ${ p [ 0 ] } ${ p [ 1 ] } ` ] ;
81
81
}
82
82
}
83
- return outputData ;
83
+ return outputData . join ( '/n' ) ;
84
84
} ;
85
85
86
- const writeOBJ = ( polyData ) => {
86
+ const writeMtl = ( baseName , textureFileName ) => {
87
+ const outputData = [ ] ;
88
+ // set material
89
+ const mtlName = 'material_0' ;
90
+ outputData . push [ `newmtl ${ mtlName } ` ] ;
91
+ outputData . push [ `map_Kd ${ textureFileName } ` ] ;
92
+ return outputData . join ( '/n' ) ;
93
+ } ;
94
+
95
+
96
+ const writeOBJ = ( polyData , textureFileName ) => {
87
97
let outputData = '# VTK.js generated OBJ File\n' ;
88
98
const pts = polyData . getPoints ( ) ;
89
99
const polys = polyData . getPolys ( ) ;
@@ -139,13 +149,20 @@ function vtkOBJWriter(publicAPI, model) {
139
149
140
150
publicAPI . requestData = ( inData , outData ) => {
141
151
const input = inData [ 0 ] ;
152
+ const inputTexture = inData [ 1 ] ;
142
153
143
154
if ( ! input || ! input . isA ( 'vtkPolyData' ) ) {
144
155
vtkErrorMacro ( 'Invalid or missing input' ) ;
145
156
return ;
146
157
}
147
158
159
+ if ( ! inputTexture || ! input . isA ( 'vtkTexture' ) ) {
160
+ vtkErrorMacro ( 'Invalid or missing input' ) ;
161
+ return ;
162
+ }
163
+
148
164
outData [ 0 ] = writeOBJ ( input ) ;
165
+ outData [ 1 ] , outData [ 2 ] = writeMtl ( input ) ;
149
166
} ;
150
167
}
151
168
@@ -164,7 +181,7 @@ export function extend(publicAPI, model, initialValues = {}) {
164
181
macro . obj ( publicAPI , model ) ;
165
182
166
183
// Also make it an algorithm with one input and one output
167
- macro . algo ( publicAPI , model , 1 , 1 ) ;
184
+ macro . algo ( publicAPI , model , 2 , 2 ) ;
168
185
169
186
// Object specific methods
170
187
vtkOBJWriter ( publicAPI , model ) ;
0 commit comments