添加关照、全局等高线、修改图层问题
This commit is contained in:
96
static/sdk/three/jsm/nodes/code/FunctionCallNode.js
Normal file
96
static/sdk/three/jsm/nodes/code/FunctionCallNode.js
Normal file
@ -0,0 +1,96 @@
|
||||
import TempNode from '../core/TempNode.js';
|
||||
import { addNodeClass } from '../core/Node.js';
|
||||
import { addNodeElement, nodeArray, nodeObject, nodeObjects } from '../shadernode/ShaderNode.js';
|
||||
|
||||
class FunctionCallNode extends TempNode {
|
||||
|
||||
constructor( functionNode = null, parameters = {} ) {
|
||||
|
||||
super();
|
||||
|
||||
this.functionNode = functionNode;
|
||||
this.parameters = parameters;
|
||||
|
||||
}
|
||||
|
||||
setParameters( parameters ) {
|
||||
|
||||
this.parameters = parameters;
|
||||
|
||||
return this;
|
||||
|
||||
}
|
||||
|
||||
getParameters() {
|
||||
|
||||
return this.parameters;
|
||||
|
||||
}
|
||||
|
||||
getNodeType( builder ) {
|
||||
|
||||
return this.functionNode.getNodeType( builder );
|
||||
|
||||
}
|
||||
|
||||
generate( builder ) {
|
||||
|
||||
const params = [];
|
||||
|
||||
const functionNode = this.functionNode;
|
||||
|
||||
const inputs = functionNode.getInputs( builder );
|
||||
const parameters = this.parameters;
|
||||
|
||||
if ( Array.isArray( parameters ) ) {
|
||||
|
||||
for ( let i = 0; i < parameters.length; i ++ ) {
|
||||
|
||||
const inputNode = inputs[ i ];
|
||||
const node = parameters[ i ];
|
||||
|
||||
params.push( node.build( builder, inputNode.type ) );
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
for ( const inputNode of inputs ) {
|
||||
|
||||
const node = parameters[ inputNode.name ];
|
||||
|
||||
if ( node !== undefined ) {
|
||||
|
||||
params.push( node.build( builder, inputNode.type ) );
|
||||
|
||||
} else {
|
||||
|
||||
throw new Error( `FunctionCallNode: Input '${inputNode.name}' not found in FunctionNode.` );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const functionName = functionNode.build( builder, 'property' );
|
||||
|
||||
return `${functionName}( ${params.join( ', ' )} )`;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default FunctionCallNode;
|
||||
|
||||
export const call = ( func, ...params ) => {
|
||||
|
||||
params = params.length > 1 || ( params[ 0 ] && params[ 0 ].isNode === true ) ? nodeArray( params ) : nodeObjects( params[ 0 ] );
|
||||
|
||||
return nodeObject( new FunctionCallNode( nodeObject( func ), params ) );
|
||||
|
||||
};
|
||||
|
||||
addNodeElement( 'call', call );
|
||||
|
||||
addNodeClass( 'FunctionCallNode', FunctionCallNode );
|
Reference in New Issue
Block a user