Skip to content

⬅️ Back to Table of Contents

📄 CustomNodeEditor.js

📊 Analysis Summary

Metric Count
🔧 Functions 1
🧱 Classes 1
📦 Imports 9
📊 Variables & Constants 6

📚 Table of Contents

🛠️ File Location:

📂 playground/editors/CustomNodeEditor.js

📦 Imports

Name Source
LabelElement flow
Color three
Vector2 three
Vector3 three
Vector4 three
uniform three/tsl
BaseNodeEditor ../BaseNodeEditor.js
createInputLib ../NodeEditorUtils.js
setInputAestheticsFromType ../DataTypeLib.js

Variables & Constants

Name Type Kind Value Exported
typeToValue { color: any; vec2: any; vec3: any; v... let/var { 'color': Color, 'vec2': Vector2, 'vec3': Vector3, 'vec4': Vector4 }
nodeType any let/var property.nodeType
label any let/var property.label
shaderNode any let/var Nodes[ settings.shaderNode ]
node any let/var null
elements any[] let/var []

Functions

createElementFromProperty(node: any, property: any): any

Parameters:

  • node any
  • property any

Returns: any

Calls:

  • uniform (from three/tsl)
  • label.endsWith
  • label.slice
  • setInputAestheticsFromType (from ../DataTypeLib.js)
  • complex_call_1000
  • element.onConnect
  • elmt.setEnabledInputs
  • elmt.getLinkedObject
Code
( node, property ) => {

    const nodeType = property.nodeType;
    const defaultValue = uniform( typeToValue[ nodeType ] ? new typeToValue[ nodeType ]() : 0 );

    let label = property.label;

    if ( label === undefined ) {

        label = property.name;

        if ( label.endsWith( 'Node' ) === true ) {

            label = label.slice( 0, label.length - 4 );

        }

    }

    node[ property.name ] = defaultValue;

    const element = setInputAestheticsFromType( new LabelElement( label ), nodeType );

    if ( createInputLib[ nodeType ] !== undefined ) {

        createInputLib[ nodeType ]( defaultValue, element );

    }

    element.onConnect( ( elmt ) => {

        elmt.setEnabledInputs( ! elmt.getLinkedObject() );

        node[ property.name ] = elmt.getLinkedObject() || defaultValue;

    } );

    return element;

}

Classes

CustomNodeEditor

Class Code
export class CustomNodeEditor extends BaseNodeEditor {

    constructor( settings ) {

        const shaderNode = Nodes[ settings.shaderNode ];

        let node = null;

        const elements = [];

        if ( settings.properties !== undefined ) {

            node = shaderNode();

            for ( const property of settings.properties ) {

                elements.push( createElementFromProperty( node, property ) );

            }

        } else {

            node = shaderNode;

        }

        node.nodeType = node.nodeType || settings.nodeType;

        super( settings.name, node, 300 );

        this.title.setIcon( 'ti ti-' + settings.icon );

        for ( const element of elements ) {

            this.add( element );

        }

    }

}