MCP 3D Printer Server

by DMontgomery40
Verified
import TextureNode from './TextureNode.js'; import { reflectVector, refractVector } from './ReflectVector.js'; import { nodeProxy, vec3 } from '../tsl/TSLBase.js'; import { CubeReflectionMapping, CubeRefractionMapping, WebGPUCoordinateSystem } from '../../constants.js'; /** @module CubeTextureNode **/ /** * This type of uniform node represents a cube texture. * * @augments module:TextureNode~TextureNode */ class CubeTextureNode extends TextureNode { static get type() { return 'CubeTextureNode'; } /** * Constructs a new cube texture node. * * @param {CubeTexture} value - The cube texture. * @param {Node<vec3>?} [uvNode=null] - The uv node. * @param {Node<int>?} [levelNode=null] - The level node. * @param {Node<float>?} [biasNode=null] - The bias node. */ constructor( value, uvNode = null, levelNode = null, biasNode = null ) { super( value, uvNode, levelNode, biasNode ); /** * This flag can be used for type testing. * * @type {Boolean} * @readonly * @default true */ this.isCubeTextureNode = true; } /** * Overwrites the default implementation to return a fixed value `'cubeTexture'`. * * @param {NodeBuilder} builder - The current node builder. * @return {String} The input type. */ getInputType( /*builder*/ ) { return 'cubeTexture'; } /** * Returns a default uvs based on the mapping type of the cube texture. * * @return {Node<vec3>} The default uv attribute. */ getDefaultUV() { const texture = this.value; if ( texture.mapping === CubeReflectionMapping ) { return reflectVector; } else if ( texture.mapping === CubeRefractionMapping ) { return refractVector; } else { console.error( 'THREE.CubeTextureNode: Mapping "%s" not supported.', texture.mapping ); return vec3( 0, 0, 0 ); } } /** * Overwritten with an empty implementation since the `updateMatrix` flag is ignored * for cube textures. The uv transformation matrix is not applied to cube textures. * * @param {Boolean} value - The update toggle. */ setUpdateMatrix( /*updateMatrix*/ ) { } // Ignore .updateMatrix for CubeTextureNode /** * Setups the uv node. Depending on the backend as well as the texture type, it might be necessary * to modify the uv node for correct sampling. * * @param {NodeBuilder} builder - The current node builder. * @param {Node} uvNode - The uv node to setup. * @return {Node} The updated uv node. */ setupUV( builder, uvNode ) { const texture = this.value; if ( builder.renderer.coordinateSystem === WebGPUCoordinateSystem || ! texture.isRenderTargetTexture ) { return vec3( uvNode.x.negate(), uvNode.yz ); } else { return uvNode; } } /** * Generates the uv code snippet. * * @param {NodeBuilder} builder - The current node builder. * @param {Node} cubeUV - The uv node to generate code for. * @return {String} The generated code snippet. */ generateUV( builder, cubeUV ) { return cubeUV.build( builder, 'vec3' ); } } export default CubeTextureNode; /** * TSL function for creating a cube texture node. * * @function * @param {CubeTexture} value - The cube texture. * @param {Node<vec3>?} [uvNode=null] - The uv node. * @param {Node<int>?} [levelNode=null] - The level node. * @param {Node<float>?} [biasNode=null] - The bias node. * @returns {CubeTextureNode} */ export const cubeTexture = /*@__PURE__*/ nodeProxy( CubeTextureNode );