geojson2obj
Advanced tools
Comparing version 2.0.0 to 2.0.1
78
index.js
@@ -21,4 +21,10 @@ var extend = require('extend'), | ||
transforms = { | ||
'LineString': function(f, options) { | ||
return buffer(f, options.lineWidth(f) / 2, 'meters'); | ||
'LineString': function(f, options, cb) { | ||
options.lineWidth(f, function(err, width) { | ||
if (err) { | ||
cb(err); | ||
return; | ||
} | ||
cb(undefined, buffer(f, width / 2, 'meters')); | ||
}); | ||
} | ||
@@ -57,11 +63,7 @@ }, | ||
function featureToGeoJson(f, stream, nIndices, options, cb) { | ||
var transform = transforms[f.geometry.type], | ||
geom = transform ? transform(f, options).geometry : f.geometry; | ||
var transformFunc = transforms[f.geometry.type] || function(f, options, cb) { | ||
cb(undefined, f); | ||
}; | ||
async.parallel([ | ||
function(cb) { options.featureBase(f, cb); }, | ||
function(cb) { options.featureHeight(f, cb); }, | ||
function(cb) { options.featureMaterial(f, cb); }, | ||
function(cb) { options.featureName(f, cb); } | ||
], function(err, data) { | ||
transformFunc(f, options, function(err, transform) { | ||
if (err) { | ||
@@ -72,28 +74,42 @@ cb(err); | ||
var baseZ = data[0], | ||
topZ = baseZ + data[1], | ||
materialName = data[2], | ||
vertices = verticesFunc[geom.type](geom.coordinates).map(options.coordToPoint), | ||
surfaces = surfacesFunc[geom.type](geom.coordinates, vertices, nIndices), | ||
name = data[3]; | ||
var geom = transform.geometry; | ||
if (name) { | ||
stream.write('g ' + name + '\n'); | ||
} | ||
async.parallel([ | ||
function(cb) { options.featureBase(f, cb); }, | ||
function(cb) { options.featureHeight(f, cb); }, | ||
function(cb) { options.featureMaterial(f, cb); }, | ||
function(cb) { options.featureName(f, cb); } | ||
], function(err, data) { | ||
if (err) { | ||
cb(err); | ||
return; | ||
} | ||
if (materialName) { | ||
stream.write('usemtl ' + materialName + '\n'); | ||
} | ||
var baseZ = data[0], | ||
topZ = baseZ + data[1], | ||
materialName = data[2], | ||
vertices = verticesFunc[geom.type](geom.coordinates).map(options.coordToPoint), | ||
surfaces = surfacesFunc[geom.type](geom.coordinates, vertices, nIndices), | ||
name = data[3]; | ||
vertices.forEach(function(v) { | ||
stream.write('v ' + v[1] + ' ' + baseZ + ' ' + v[0] + '\n'); | ||
stream.write('v ' + v[1] + ' ' + topZ + ' ' + v[0] + '\n'); | ||
}); | ||
if (name) { | ||
stream.write('g ' + name + '\n'); | ||
} | ||
surfaces.forEach(function(s) { | ||
stream.write('f ' + s.join(' ') + '\n'); | ||
if (materialName) { | ||
stream.write('usemtl ' + materialName + '\n'); | ||
} | ||
vertices.forEach(function(v) { | ||
stream.write('v ' + v[1] + ' ' + baseZ + ' ' + v[0] + '\n'); | ||
stream.write('v ' + v[1] + ' ' + topZ + ' ' + v[0] + '\n'); | ||
}); | ||
surfaces.forEach(function(s) { | ||
stream.write('f ' + s.join(' ') + '\n'); | ||
}); | ||
stream.write('\n'); | ||
cb(undefined, vertices.length * 2); | ||
}); | ||
stream.write('\n'); | ||
cb(undefined, vertices.length * 2); | ||
}); | ||
@@ -100,0 +116,0 @@ } |
{ | ||
"name": "geojson2obj", | ||
"version": "2.0.0", | ||
"version": "2.0.1", | ||
"description": "Convert GeoJSON into Wavefront OBJ format", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
38005094
22329