diff --git a/files.html b/files.html index 36f0805869f2f111cefaa533dd8f835ef83010dc..4ee5049980503e5c784d972ffc9a0bf410482438 100644 --- a/files.html +++ b/files.html @@ -19,6 +19,7 @@ <a href='./js/files.js'>files.js</a><br> <a href='./js/mods.js'>mods.js</a><br> <a href='./js/modules.js'>modules.js</a><br> +<i> node_modules</i><br> <a href='./js/printserver.js'>printserver.js</a><br> <a href='./js/programs.js'>programs.js</a><br> <a href='./js/serialserver.js'>serialserver.js</a><br> @@ -57,6 +58,7 @@ <i> operators</i><br> <a href='./modules/frep/operators/add'>add</a><br> <a href='./modules/frep/operators/blend'>blend</a><br> + <a href='./modules/frep/operators/clearance'>clearance</a><br> <a href='./modules/frep/operators/intersect'>intersect</a><br> <a href='./modules/frep/operators/morph'>morph</a><br> <a href='./modules/frep/operators/subtract'>subtract</a><br> diff --git a/modules/frep/operators/clearance b/modules/frep/operators/clearance new file mode 100755 index 0000000000000000000000000000000000000000..2aa4e8e1dfedc8bcc386b07947af9c275fb73f1d --- /dev/null +++ b/modules/frep/operators/clearance @@ -0,0 +1,138 @@ +// +// frep clearance +// +// Neil Gershenfeld +// (c) Massachusetts Institute of Technology 2018 +// +// This work may be reproduced, modified, distributed, performed, and +// displayed for any purpose, but must acknowledge the mods +// project. Copyright is retained and must be preserved. The work is +// provided as is; no warranty is provided, and users accept all +// liability. +// +// closure +// +(function(){ +// +// module globals +// +var mod = {} +// +// name +// +var name = 'frep clearance' +// +// initialization +// +var init = function() { + mod.shape0 = null + mod.shape1 = null + mod.offset.value = 1 + mod.fn0.value = '' + mod.fn1.value = '' + } +// +// inputs +// +var inputs = { + shape0:{type:'',label:'shape 0', + event:function(evt){ + mod.shape0 = evt.detail + mod.fn0.value = evt.detail.function + outputs.shape.event() + }}, + shape1:{type:'',label:'shape 1', + event:function(evt){ + mod.shape1 = evt.detail + mod.fn1.value = evt.detail.function + outputs.shape.event() + }}, + clear:{type:'', + event:function(evt){ + mod.shape0 = null + mod.shape1 = null + mod.fn0.value = '' + mod.fn1.value = '' + }}} +// +// outputs +// +var outputs = { + shape:{type:'', + event:function(){ + if ((mod.shape0 != null) && (mod.shape1 != null)) { + var offset = parseFloat(mod.offset.value) + var fn = `Math.min(${mod.shape0.function},-(${offset}+${mod.shape1.function}))` + var fn = `Math.max(${fn},${mod.shape1.function})` + var variables = mod.shape0.variables + var type = mod.shape0.type + var limits = [] + for (var v = 0; v < mod.shape0.limits.length; ++v) { + limits[v] = [] + if (mod.shape0.limits[v][0] < mod.shape1.limits[v][0]) + limits[v][0] = mod.shape0.limits[v][0] + else + limits[v][0] = mod.shape1.limits[v][0] + if (mod.shape0.limits[v][1] > mod.shape1.limits[v][1]) + limits[v][1] = mod.shape0.limits[v][1] + else + limits[v][1] = mod.shape1.limits[v][1] + } + var shape = {function:fn,variables:variables,limits:limits,type:type} + mods.output(mod,'shape',shape)} + } + }} +// +// interface +// +var interface = function(div){ + mod.div = div + // + // offset + // + div.appendChild(document.createTextNode('offset: ')) + div.appendChild(document.createElement('br')) + var input = document.createElement('input') + input.type = 'text' + input.size = 6 + div.appendChild(input) + mod.offset = input + div.appendChild(document.createElement('br')) + // + // function 0 + // + div.appendChild(document.createTextNode('function 0: ')) + div.appendChild(document.createElement('br')) + var input = document.createElement('input') + input.type = 'text' + input.size = 10 + div.appendChild(input) + mod.fn0 = input + div.appendChild(document.createElement('br')) + // + // function 1 + // + div.appendChild(document.createTextNode('function 1: ')) + div.appendChild(document.createElement('br')) + var input = document.createElement('input') + input.type = 'text' + input.size = 10 + div.appendChild(input) + mod.fn1 = input + div.appendChild(document.createElement('br')) + } +// +// local functions +// +; +// +// return values +// +return ({ + name:name, + init:init, + inputs:inputs, + outputs:outputs, + interface:interface + }) +}()) diff --git a/modules/index.js b/modules/index.js index 017a630c3554fc1f564dc86198d753d3cb5741a0..0b3d100ec3fe5f049b746428e296bea144ce0c2a 100644 --- a/modules/index.js +++ b/modules/index.js @@ -28,6 +28,7 @@ module_label('frep') module_label(' operators') module_menu(' add','modules/frep/operators/add') module_menu(' blend','modules/frep/operators/blend') +module_menu(' clearance','modules/frep/operators/clearance') module_menu(' intersect','modules/frep/operators/intersect') module_menu(' morph','modules/frep/operators/morph') module_menu(' subtract','modules/frep/operators/subtract')