На сайте Instructables.com (одно из подразделений Autodesk) мы столкнулись с той же проблемой с API производных; нам также нужны были миниатюры размером больше 400x400 изображений, предоставляемых Forge API.
Если вы используете Nodejs, вы можете использовать наш инструмент для создания миниатюр с открытым исходным кодом, который очень быстро создает миниатюры STL на стороне сервера:
https://www.npmjs.com/package/node-stl-thumbnailer
Подход здесь создает сцену threejs на стороне сервера, а затем визуализирует ее с помощью CanvasRenderer и node-canvas. Таким образом, он не зависит от веб-браузера, графического процессора или других интерфейсных технологий. Поскольку это не трассировщик лучей, он не требует дополнительных вычислений, как полная служба рендеринга, но также имеет ограничения. Помимо прочего, нет поддержки теней, освещения или материалов.
В демонстрационном проекте показано быстрое приложение ExpressJS, которое будет принимать URL-адрес для STL и синхронно возвращать миниатюру запрошенного размера.
Код выглядит следующим образом:
// index.js
var StlThumbnailer = require('node-stl-thumbnailer');
var app = require("express")();
app.get('/thumbnailer', function(req, res, next) {
var thumbnailer = new StlThumbnailer({
url: req.query.url,
requestThumbnails: [
{
width: 500,
height: 500,
}
]
})
.then(function(thumbnails){
// thumbnails is an array (in matching order to your requests) of Canvas objects
// you can write them to disk, return them to web users, etc
thumbnails[0].toBuffer(function(err, buf){
res.contentType('image/png');
res.send(buf)
})
})
.catch(function(err){
res.status(500);
res.send("Error thumbnailing: "+err);
});
});
app.listen(3000, function () {
console.log('Listening on port 3000\n')
});
А вот пример "рендеринга":
Образец вывода миниатюр
person
strandedcity
schedule
23.01.2017