From 4a3191a0e7f8dd34312de56d23e7d6bb0a92d7a8 Mon Sep 17 00:00:00 2001 From: stephane Huart Date: Sat, 28 Oct 2023 21:45:49 +0200 Subject: [PATCH] add basics of data comparaison nodes --- .../evaluator_nodes_templates.js | 4 + .../templates/data_read_attribute.js | 74 +++++++++++ .../templates/math_data_compare.js | 118 ++++++++++++++++++ .../templates/node_filter.js | 12 +- src/js/vendor/stellae/stellae_nodes.js | 39 +++++- 5 files changed, 239 insertions(+), 8 deletions(-) create mode 100644 src/js/modules/common_evaluators/templates/data_read_attribute.js create mode 100644 src/js/modules/common_evaluators/templates/math_data_compare.js diff --git a/src/js/modules/common_evaluators/evaluator_nodes_templates.js b/src/js/modules/common_evaluators/evaluator_nodes_templates.js index 9c5e503..61fbf6c 100644 --- a/src/js/modules/common_evaluators/evaluator_nodes_templates.js +++ b/src/js/modules/common_evaluators/evaluator_nodes_templates.js @@ -8,6 +8,8 @@ import createAttributeManagement from "../common_project_management/attributes_m import state_manager from "../common_state/state_manager.js"; import { filter } from "./templates/node_filter.js"; +import { readAttribute } from "./templates/data_read_attribute.js"; +import { mathDataCompare } from "./templates/math_data_compare.js"; import { settingsNodeColors as nodeColors} from "./templates/settings_node_colors.js"; @@ -25,6 +27,8 @@ var evaluatorTemplates = {} evaluatorTemplates.filter = filter +evaluatorTemplates.readAttribute = readAttribute +evaluatorTemplates.mathDataCompare = mathDataCompare // baseTemplates.input_number = { // templateName : "input_number", diff --git a/src/js/modules/common_evaluators/templates/data_read_attribute.js b/src/js/modules/common_evaluators/templates/data_read_attribute.js new file mode 100644 index 0000000..4c6d7f9 --- /dev/null +++ b/src/js/modules/common_evaluators/templates/data_read_attribute.js @@ -0,0 +1,74 @@ +import { settingsNodeColors as nodeColors } from "./settings_node_colors.js" +import createAttributeManagement from "../../common_project_management/attributes_management.js"; + +export var readAttribute = { + templateName : "read_attribute", + name : "Read Attribute", + category:"data", + props :[ + {id:"output", label:"output", type:"hidden", editable:false, socket:"output", value:"output"}, + // {id:"id", label:"prop id", type:"hidden", editable:false, socket:"output", value:false}, + // {id:"method", label:"A", type:"text", editable:true, socket:"input", value:"0"}, + {id:"method", label:"Attribute", type:"select", options:[ + {id:"None", value:"..."}, + ],editable:true, socket:"none", value:"....."}, + // {id:"a", label:"Field", type:"text", editable:true, socket:"input", value:"0"}, + ], + methods:{ + }, + event:{ + onEvaluate:(props) =>{ + // var entityRepo = createEntityManagement() + // console.log(entityRepo.getAll()); + + // props.method.setOptions(props.a.get().map(function (e) { + // var currentKey = e.parameters.keys + // return {id:e.uuid, value:e.name} + // })) + + // if (props.a.get()[0] && props.a.get()[0].properties) { + // props.method.setOptions(Object.keys(props.a.get()[0].properties).map(function (e) { + // return {id:e, value:e} + // })) + // // props.output.set("undefined") + // if (props.method.get()) { + // props.output.set(props.a.get().map(function (e) { + // console.log(e.properties); + // return {[props.method.get()]:e.properties[props.method.get()]} + // })) + // props.id.set(props.method.getOptionId()) + // } + // }else{ + // props.output.set("undefined") + // } + + + var func = (data)=>{ + var value = props.method.get() + if (value != ".....") { + if (value == "name") { + return data.name + }else{ + return data.properties[value] + } + }else{ + return "undefined" + } + } + + props.output.set(func) + + + }, + onInit:(props) =>{ + var attributeRepo = createAttributeManagement() + console.log(attributeRepo.getAll()); + var options=attributeRepo.getAll().map(function (e) { + return {id:e.uuid, value:e.name} + }) + options.push({id:"name2", value:"name"}) + props.method.setOptions(options) + + }, + }, +} \ No newline at end of file diff --git a/src/js/modules/common_evaluators/templates/math_data_compare.js b/src/js/modules/common_evaluators/templates/math_data_compare.js new file mode 100644 index 0000000..38ec915 --- /dev/null +++ b/src/js/modules/common_evaluators/templates/math_data_compare.js @@ -0,0 +1,118 @@ +import { settingsNodeColors as nodeColors } from "./settings_node_colors.js" + + +function containsOnlyNumbers(str) { + return /^[+-]?[0-9]+$/.test(str); +} +function containsOnlyFloat(str) { + return /^[+-]?[0-9]+\.[0-9]+$/.test(str); +} + +function checkForNumbers(str){ + if (containsOnlyNumbers(str)) { + return parseInt(str) + }else if(containsOnlyFloat(str)){ + return parseFloat(str) + }else{ + return str + } +} + + +export var mathDataCompare = { + templateName : "math_data_compare", + name : "Data Compare", + category:"Mathematics", + props :[ + {id:"output", label:"output", type:"hidden", editable:false, socket:"output", value:"output"}, + // {id:"method", label:"A", type:"text", editable:true, socket:"input", value:"0"}, + {id:"method", label:"", type:"select", options:[ + {id:"Greater_Than", value:"Greater Than"}, + {id:"Greater_Than_Or_Equal", value:"Greater Than or Equal"}, + {id:"Less_Than", value:"Less Than"}, + {id:"Less_Than_Or_Equal", value:"Less Than or Equal"}, + {id:"Equal", value:"Equal"}, + {id:"Not Equal", value:"Not Equal"}, + ],editable:true, socket:"none", value:"Greater Than"}, + {id:"a", label:"A", type:"text", editable:true, socket:"input", value:"0"}, + {id:"b", label:"B", type:"text", editable:true, socket:"input", value:"0"}, + ], + methods:{ + }, + event:{ + onEvaluate:(props) =>{ + var condition = undefined + + if (props.method.get() == "Greater Than") { + condition=(A,B)=> A > B + }else if (props.method.get() == "Greater Than or Equal") { + condition=(A,B)=> A >= B + }else if (props.method.get() == "Less Than") { + condition=(A,B)=> A < B + }else if (props.method.get() == "Less Than or Equal") { + condition=(A,B)=> A <= B + }else if (props.method.get() == "Equal") { + condition=(A,B)=> A == B + }else if (props.method.get() == "Not Equal") { + condition=(A,B)=> A != B + } + + // if (props.method.get() == "Greater Than") { + var func = function(data){ + var A = props.a.get(data) + var B = props.b.get(data) + console.log(A, B); + console.log(condition(A,B)); + if (condition(A,B)) { + return 1 + } else { + return 0 + } + } + props.output.set(func) + // } + + // if (props.method.get() == "Equal") { + // var func = function(data){ + // var A = props.a.get(data) + // var B = props.b.get(data) + // console.log(A, B); + // console.log(A == B); + // if (A == B) { + // return 1 + // } else { + // return 0 + // } + // } + // props.output.set(func) + // } + + // else if (props.method.get() == "Less Than"){ + // if (parseInt(props.a.get()) < parseInt(props.b.get())) { + // props.output.set(1) + // } else { + // props.output.set(0) + // } + // }else if (props.method.get() == "Equal"){ + // if (parseInt(props.a.get()) == parseInt(props.b.get())) { + // props.output.set(1) + // } else { + // props.output.set(0) + // } + // }else if (props.method.get() == "Greater Than or Equal"){ + // if (parseInt(props.a.get()) >= parseInt(props.b.get())) { + // props.output.set(1) + // } else { + // props.output.set(0) + // } + // }else if (props.method.get() == "Less Than or Equal"){ + // if (parseInt(props.a.get()) <= parseInt(props.b.get())) { + // props.output.set(1) + // } else { + // props.output.set(0) + // } + // } + + }, + }, +} \ No newline at end of file diff --git a/src/js/modules/common_evaluators/templates/node_filter.js b/src/js/modules/common_evaluators/templates/node_filter.js index 4dc1152..3ffb566 100644 --- a/src/js/modules/common_evaluators/templates/node_filter.js +++ b/src/js/modules/common_evaluators/templates/node_filter.js @@ -9,10 +9,11 @@ export var filter = { category:"data", props :[ - {id:"output", expect:"text", label:"output", type:"hidden", editable:false, socket:"output", value:"output"}, - {id:"paramName", expect:"text", label:"Param Name", type:"text", editable:true, socket:"input", value:"...."}, - {id:"paramIndex", expect:"text", label:"Param Name", type:"text", editable:true, socket:"input", value:"...."}, + {id:"output", expect:"data", label:"output", type:"hidden", editable:false, socket:"output", value:"output"}, + // {id:"paramName", expect:"text", label:"Param Name", type:"text", editable:true, socket:"input", value:"...."}, + // {id:"paramIndex", expect:"text", label:"Param Name", type:"text", editable:true, socket:"input", value:"...."}, {id:"a", expect:"data", label:"Data", type:"text", editable:true, socket:"input", value:"0"}, + {id:"selection", expect:"array", label:"Selection", type:"hidden", editable:false, socket:"input", value:"...."}, ], methods:{ }, @@ -41,7 +42,10 @@ export var filter = { var newDataSet = [] for (let i = 0; i < oldDataSet.length; i++) { const element = oldDataSet[i]; - if (i<2) { + var condition = props.selection.get(element) + console.log(condition); + // alert("eee") + if (condition == 1) { newDataSet.push(element) } } diff --git a/src/js/vendor/stellae/stellae_nodes.js b/src/js/vendor/stellae/stellae_nodes.js index 6c4f295..a082f0d 100644 --- a/src/js/vendor/stellae/stellae_nodes.js +++ b/src/js/vendor/stellae/stellae_nodes.js @@ -122,14 +122,45 @@ var createNode= function({ element.valueFromInput = element.value //save Default and set input for when no nodes } interactivePropsObject[element.id] = { - get:function () { + // get:function () { + // if (element.valueFromLink != undefined) { + // return element.valueFromLink + // }else{ + // return element.value + // } + + // }, + get:function(data){ + + function containsOnlyNumbers(str) { + return /^[+-]?[0-9]+$/.test(str); + } + function containsOnlyFloat(str) { + return /^[+-]?[0-9]+\.[0-9]+$/.test(str); + } + + function checkForNumbers(str){ //check if the string is an int or a float, and switch if needed + if (containsOnlyNumbers(str)) { + return parseInt(str) + }else if(containsOnlyFloat(str)){ + return parseFloat(str) + }else{ + return str + } + } + var valuePassed = undefined if (element.valueFromLink != undefined) { - return element.valueFromLink + valuePassed = element.valueFromLink }else{ - return element.value + valuePassed = element.value + } + + if (data && valuePassed instanceof Function) { + return valuePassed(data) + }else{ + return checkForNumbers(valuePassed) } - }, _getFromInput:function () { // return element.valueFromInput || element.value