diff --git a/xraysim/xraysim.run.js b/xraysim/xraysim.run.js new file mode 100644 index 0000000..c442fb7 --- /dev/null +++ b/xraysim/xraysim.run.js @@ -0,0 +1,171 @@ +var http = require('http'), + path = require('path'), + fs = require('fs'); +print=console.log + +var URL = 'localhost:6666' + +function POST(url, data, cb) { + var params,headers; + if (data && data.params && data.data != undefined) { + params=data.params; + headers=data.headers; + data=data.data; + } + var ishttps= url.match(/https:/); + url=url.replace(/http[s]?:\/\//,''); + var parts = url.split(':'), + path = parts[0].split('/').slice(1).join('/'), + host = parts[0].split('/')[0], + port = parts[1]||(ishttps?'443':'80'); + if (params) { + var o=params,sep=''; + params='/?'; + for(var p in o) { + params = params + sep + p + '='+o[p]; + sep='&'; + } + } else params=''; + var post_data = typeof data == 'string'?data:JSON.stringify(data); + var post_options = { + host: host, + port: port, + path: '/'+path+params, + method: 'POST', + keepAlive: true, + headers: headers || { + 'Content-Type': 'application/json', // ?? 'application/x-www-form-urlencoded', + // 'Content-Length': Buffer.byteLength(post_data) + 'Content-Length': post_data.length, + } + }; + // console.log('POST', post_options,post_data) + var post_req = (ishttps?https:http).request(post_options, function(res) { + res.setEncoding('utf8'); + + var data=''; + res.on('data', function (chunk) { + data += chunk; + // console.log('Response: ' + chunk); + }); + res.on('end', function () { + try { + var result=JSON.parse(data); + // console.log('POST: ',result); + } catch (e) { print(data); result=e; } + if (cb) cb(result); + }); + }); + post_req.on('error',function (err) { + if (cb) cb(err); else console.log(url,err) + }); + post_req.setNoDelay(); + // console.log('POST: ',post_data); + // post the data + post_req.write(post_data); + post_req.end(); +} + +function test() { + var req = { + command : 'sim1', + parts : [ + {name:'plate1metal',density:5,data:fs.readFileSync('../demo3/plate1_metal.stl','utf8') }, + {name:'plate1fibre',density:2,data:fs.readFileSync('../demo3/plate1_fibre.stl','utf8') }, + ], + arguments : { + energy : 0.1, + width : 1000, + height : 1000 + } + } + var body = JSON.stringify(req) + print(body.length) + POST(URL,body, function (result) { + if (result instanceof Error) return print(result); + var image = result.image + image.data=new Uint32Array(image.data); + print(image) + }) +} + +function savePGM(name, image, range) { + var header = 'P2\n'+image.width+' '+image.height+'\n'+range+'\n', + data = [], + min = image.min, + max = image.max, + scale = range/(image.max-image.min) + // auto scale + for (var i=0;i 1 && parts.length != densities.length) throw "Parts and densities have different lengths"; + for(var i=0;i