📄 BasicMaterialEditor.js
¶
📊 Analysis Summary¶
Metric | Count |
---|---|
🔧 Functions | 2 |
🧱 Classes | 1 |
📦 Imports | 6 |
📊 Variables & Constants | 3 |
📚 Table of Contents¶
🛠️ File Location:¶
📂 playground/editors/BasicMaterialEditor.js
📦 Imports¶
Name | Source |
---|---|
ColorInput |
flow |
SliderInput |
flow |
LabelElement |
flow |
MaterialEditor |
./MaterialEditor.js |
MeshBasicNodeMaterial |
three/webgpu |
setInputAestheticsFromType |
../DataTypeLib.js |
Variables & Constants¶
Name | Type | Kind | Value | Exported |
---|---|---|---|---|
material |
any |
let/var | new MeshBasicNodeMaterial() |
✗ |
transparent |
boolean |
let/var | opacity.getLinkedObject() \|\| material.opacity < 1 ? true : false |
✗ |
needsUpdate |
boolean |
let/var | transparent !== material.transparent |
✗ |
Functions¶
BasicMaterialEditor.update(): void
¶
Returns: void
Calls:
color.setEnabledInputs
color.getLinkedObject
opacity.setEnabledInputs
opacity.getLinkedObject
position.getLinkedObject
material.dispose
this.updateTransparent
Code
update() {
const { material, color, opacity, position } = this;
color.setEnabledInputs( ! color.getLinkedObject() );
opacity.setEnabledInputs( ! opacity.getLinkedObject() );
material.colorNode = color.getLinkedObject();
material.opacityNode = opacity.getLinkedObject() || null;
material.positionNode = position.getLinkedObject() || null;
material.dispose();
this.updateTransparent();
}
BasicMaterialEditor.updateTransparent(): void
¶
Returns: void
Calls:
opacity.getLinkedObject
opacity.setIcon
material.dispose
Code
updateTransparent() {
const { material, opacity } = this;
const transparent = opacity.getLinkedObject() || material.opacity < 1 ? true : false;
const needsUpdate = transparent !== material.transparent;
material.transparent = transparent;
opacity.setIcon( material.transparent ? 'ti ti-layers-intersect' : 'ti ti-layers-subtract' );
if ( needsUpdate === true ) material.dispose();
}
Classes¶
BasicMaterialEditor
¶
Class Code
export class BasicMaterialEditor extends MaterialEditor {
constructor() {
const material = new MeshBasicNodeMaterial();
super( 'Basic Material', material );
const color = setInputAestheticsFromType( new LabelElement( 'color' ), 'Color' );
const opacity = setInputAestheticsFromType( new LabelElement( 'opacity' ), 'Number' );
const position = setInputAestheticsFromType( new LabelElement( 'position' ), 'Vector3' );
color.add( new ColorInput( material.color.getHex() ).onChange( ( input ) => {
material.color.setHex( input.getValue() );
} ) );
opacity.add( new SliderInput( material.opacity, 0, 1 ).onChange( ( input ) => {
material.opacity = input.getValue();
this.updateTransparent();
} ) );
color.onConnect( () => this.update(), true );
opacity.onConnect( () => this.update(), true );
position.onConnect( () => this.update(), true );
this.add( color )
.add( opacity )
.add( position );
this.color = color;
this.opacity = opacity;
this.position = position;
this.update();
}
update() {
const { material, color, opacity, position } = this;
color.setEnabledInputs( ! color.getLinkedObject() );
opacity.setEnabledInputs( ! opacity.getLinkedObject() );
material.colorNode = color.getLinkedObject();
material.opacityNode = opacity.getLinkedObject() || null;
material.positionNode = position.getLinkedObject() || null;
material.dispose();
this.updateTransparent();
}
updateTransparent() {
const { material, opacity } = this;
const transparent = opacity.getLinkedObject() || material.opacity < 1 ? true : false;
const needsUpdate = transparent !== material.transparent;
material.transparent = transparent;
opacity.setIcon( material.transparent ? 'ti ti-layers-intersect' : 'ti ti-layers-subtract' );
if ( needsUpdate === true ) material.dispose();
}
}
Methods¶
update(): void
¶
Code
update() {
const { material, color, opacity, position } = this;
color.setEnabledInputs( ! color.getLinkedObject() );
opacity.setEnabledInputs( ! opacity.getLinkedObject() );
material.colorNode = color.getLinkedObject();
material.opacityNode = opacity.getLinkedObject() || null;
material.positionNode = position.getLinkedObject() || null;
material.dispose();
this.updateTransparent();
}
updateTransparent(): void
¶
Code
updateTransparent() {
const { material, opacity } = this;
const transparent = opacity.getLinkedObject() || material.opacity < 1 ? true : false;
const needsUpdate = transparent !== material.transparent;
material.transparent = transparent;
opacity.setIcon( material.transparent ? 'ti ti-layers-intersect' : 'ti ti-layers-subtract' );
if ( needsUpdate === true ) material.dispose();
}