You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
1.5 KiB
103 lines
1.5 KiB
2 years ago
|
import { LabelElement } from '../../libs/flow.module.js';
|
||
|
import { Object3DEditor } from './Object3DEditor.js';
|
||
|
import { Mesh } from 'three';
|
||
|
|
||
|
export class MeshEditor extends Object3DEditor {
|
||
|
|
||
|
constructor( mesh = null ) {
|
||
|
|
||
|
if ( mesh === null ) {
|
||
|
|
||
|
mesh = new Mesh();
|
||
|
|
||
|
}
|
||
|
|
||
|
super( mesh, 'Mesh' );
|
||
|
|
||
|
this.material = null;
|
||
|
|
||
|
this.meshMaterial = null;
|
||
|
this.defaultMeshMaterial = null;
|
||
|
|
||
|
this._initMaterial();
|
||
|
|
||
|
this.updateDefault();
|
||
|
this.restoreDefault();
|
||
|
this.update();
|
||
|
|
||
|
}
|
||
|
|
||
|
get mesh() {
|
||
|
|
||
|
return this.value;
|
||
|
|
||
|
}
|
||
|
|
||
|
_initMaterial() {
|
||
|
|
||
|
const material = new LabelElement( 'Material' ).setInputColor( 'forestgreen' ).setInput( 1 );
|
||
|
|
||
|
material.onValid( ( source, target, stage ) => {
|
||
|
|
||
|
const object = target.getObject();
|
||
|
|
||
|
if ( object && object.isMaterial !== true ) {
|
||
|
|
||
|
if ( stage === 'dragged' ) {
|
||
|
|
||
|
const name = target.node.getName();
|
||
|
|
||
|
this.editor.tips.error( `"${name}" is not a Material.` );
|
||
|
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
|
||
|
}
|
||
|
|
||
|
} ).onConnect( () => {
|
||
|
|
||
|
this.meshMaterial = material.getLinkedObject() || this.defaultMeshMaterial;
|
||
|
|
||
|
this.update();
|
||
|
|
||
|
} );
|
||
|
|
||
|
this.add( material );
|
||
|
|
||
|
this.material = material;
|
||
|
|
||
|
}
|
||
|
|
||
|
update() {
|
||
|
|
||
|
super.update();
|
||
|
|
||
|
const mesh = this.mesh;
|
||
|
|
||
|
if ( mesh ) {
|
||
|
|
||
|
mesh.material = this.meshMaterial || this.defaultMeshMaterial;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
updateDefault() {
|
||
|
|
||
|
super.updateDefault();
|
||
|
|
||
|
this.defaultMeshMaterial = this.mesh.material;
|
||
|
|
||
|
}
|
||
|
|
||
|
restoreDefault() {
|
||
|
|
||
|
super.restoreDefault();
|
||
|
|
||
|
this.mesh.material = this.defaultMeshMaterial;
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|