#!/usr/bin/env python3 """ Convert to Percent Node This node takes two numerical inputs (A and B), computes (A / B) * 100, and outputs the result as a float formatted to 4 decimal places. If an error occurs, an error message is stored. The node's title is always "Convert to Percent". """ from NodeGraphQt import BaseNode from Qt import QtCore class ConvertToPercentNode(BaseNode): __identifier__ = 'io.github.nicole.convert' NODE_NAME = 'Convert to Percent' def __init__(self): super(ConvertToPercentNode, self).__init__() # Add two input ports for separate numerator and denominator. self.add_input("Numerator") self.add_input("Denominator") # Add one output port. self.add_output("Percent") # Initialize internal value. self.value = "No Input" # Set the node title to a static string. self.set_name(self.NODE_NAME) # Initialize a values dictionary so that connected Display nodes can read output. self.values = {} def process_input(self): numerator_input = self.input(0) denominator_input = self.input(1) numerator = self.get_connected_value(numerator_input) denominator = self.get_connected_value(denominator_input) try: numerator = float(numerator) denominator = float(denominator) if denominator == 0: raise ZeroDivisionError("Division by zero") percent = (numerator / denominator) * 100 formatted_percent = f"{percent:.4f}" self.value = formatted_percent except Exception as e: self.value = f"Error: {e}" # Always keep the title static. self.set_name(self.NODE_NAME) # Store the computed value in the values dictionary under the output port key. self.values["Percent"] = self.value def get_connected_value(self, input_port): """ Helper function to retrieve the value from a connected port. """ if input_port and input_port.connected_ports(): connected_output = input_port.connected_ports()[0] parent_node = connected_output.node() port_name = connected_output.name() if hasattr(parent_node, 'values') and isinstance(parent_node.values, dict): return parent_node.values.get(port_name, "0") return getattr(parent_node, 'value', "0") return "0"