Add more advanced math nodes (#1383)

Added nodes for the following operations:

* Floor
* Ceil
* Round
* Absolute Value
* Logarithm
* Natural Logarithm
* sin
* cos
* tan
This commit is contained in:
isiko
2023-08-14 13:43:17 +00:00
committed by GitHub
parent 2412a3def6
commit 7558088727
4 changed files with 176 additions and 0 deletions
@@ -1758,6 +1758,90 @@ fn static_nodes() -> Vec<DocumentNodeType> {
properties: node_properties::exponent_properties,
..Default::default()
},
DocumentNodeType {
name: "Floor",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::FloorNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Ceil",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::CeilNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Round",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::RoundNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Absolute Value",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::AbsoluteNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Logarithm",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::LogParameterNode<_>"),
inputs: vec![
DocumentInputType::value("Primary", TaggedValue::F32(0.), true),
DocumentInputType::value("Base", TaggedValue::F32(0.), true),
],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::log_properties,
..Default::default()
},
DocumentNodeType {
name: "Natural Logarithm",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::NaturalLogNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Sine",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::SineNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Cosine",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::CosineNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Tangent",
category: "Math",
identifier: NodeImplementation::proto("graphene_core::ops::TangentNode"),
inputs: vec![DocumentInputType::value("Primary", TaggedValue::F32(0.), true)],
outputs: vec![DocumentOutputType::new("Output", FrontendGraphDataType::Number)],
properties: node_properties::no_properties,
..Default::default()
},
DocumentNodeType {
name: "Max",
category: "Math",
@@ -1055,6 +1055,15 @@ pub fn exponent_properties(document_node: &DocumentNode, node_id: NodeId, _conte
vec![operand("Power", 1)]
}
pub fn log_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let operand = |name: &str, index| {
let widgets = number_widget(document_node, node_id, index, name, NumberInput::default(), true);
LayoutGroup::Row { widgets }
};
vec![operand("Base", 1)]
}
pub fn max_properties(document_node: &DocumentNode, node_id: NodeId, _context: &mut NodePropertiesContext) -> Vec<LayoutGroup> {
let operand = |name: &str, index| {
let widgets = number_widget(document_node, node_id, index, name, NumberInput::default(), true);