|
@@ -16,6 +16,7 @@ import { Vector3Editor } from './inputs/Vector3Editor.js';
|
|
import { Vector4Editor } from './inputs/Vector4Editor.js';
|
|
import { Vector4Editor } from './inputs/Vector4Editor.js';
|
|
import { SliderEditor } from './inputs/SliderEditor.js';
|
|
import { SliderEditor } from './inputs/SliderEditor.js';
|
|
import { ColorEditor } from './inputs/ColorEditor.js';
|
|
import { ColorEditor } from './inputs/ColorEditor.js';
|
|
|
|
+import { TextureEditor } from './inputs/TextureEditor.js';
|
|
import { BlendEditor } from './display/BlendEditor.js';
|
|
import { BlendEditor } from './display/BlendEditor.js';
|
|
import { UVEditor } from './accessors/UVEditor.js';
|
|
import { UVEditor } from './accessors/UVEditor.js';
|
|
import { PositionEditor } from './accessors/PositionEditor.js';
|
|
import { PositionEditor } from './accessors/PositionEditor.js';
|
|
@@ -27,6 +28,7 @@ import { JoinEditor } from './utils/JoinEditor.js';
|
|
import { CheckerEditor } from './procedural/CheckerEditor.js';
|
|
import { CheckerEditor } from './procedural/CheckerEditor.js';
|
|
import { PointsEditor } from './scene/PointsEditor.js';
|
|
import { PointsEditor } from './scene/PointsEditor.js';
|
|
import { MeshEditor } from './scene/MeshEditor.js';
|
|
import { MeshEditor } from './scene/MeshEditor.js';
|
|
|
|
+import { FileEditor } from './core/FileEditor.js';
|
|
import { EventDispatcher } from 'three';
|
|
import { EventDispatcher } from 'three';
|
|
|
|
|
|
Styles.icons.unlink = 'ti ti-unlink';
|
|
Styles.icons.unlink = 'ti ti-unlink';
|
|
@@ -65,6 +67,11 @@ export const NodeList = [
|
|
name: 'Color',
|
|
name: 'Color',
|
|
icon: 'palette',
|
|
icon: 'palette',
|
|
nodeClass: ColorEditor
|
|
nodeClass: ColorEditor
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ name: 'Texture',
|
|
|
|
+ icon: 'photo',
|
|
|
|
+ nodeClass: TextureEditor
|
|
}
|
|
}
|
|
]
|
|
]
|
|
},
|
|
},
|
|
@@ -241,6 +248,7 @@ export const ClassLib = {
|
|
Vector4Editor,
|
|
Vector4Editor,
|
|
SliderEditor,
|
|
SliderEditor,
|
|
ColorEditor,
|
|
ColorEditor,
|
|
|
|
+ TextureEditor,
|
|
BlendEditor,
|
|
BlendEditor,
|
|
UVEditor,
|
|
UVEditor,
|
|
PositionEditor,
|
|
PositionEditor,
|
|
@@ -271,6 +279,7 @@ export class NodeEditor extends EventDispatcher {
|
|
this.nodesContext = null;
|
|
this.nodesContext = null;
|
|
this.examplesContext = null;
|
|
this.examplesContext = null;
|
|
|
|
|
|
|
|
+ this._initUpload();
|
|
this._initTips();
|
|
this._initTips();
|
|
this._initMenu();
|
|
this._initMenu();
|
|
this._initSearch();
|
|
this._initSearch();
|
|
@@ -333,11 +342,13 @@ export class NodeEditor extends EventDispatcher {
|
|
|
|
|
|
loadJSON( json ) {
|
|
loadJSON( json ) {
|
|
|
|
|
|
- this.canvas.clear();
|
|
|
|
|
|
+ const canvas = this.canvas;
|
|
|
|
+
|
|
|
|
+ canvas.clear();
|
|
|
|
|
|
- this.canvas.deserialize( json );
|
|
|
|
|
|
+ canvas.deserialize( json );
|
|
|
|
|
|
- for ( const node of this.canvas.nodes ) {
|
|
|
|
|
|
+ for ( const node of canvas.nodes ) {
|
|
|
|
|
|
this.add( node );
|
|
this.add( node );
|
|
|
|
|
|
@@ -347,6 +358,36 @@ export class NodeEditor extends EventDispatcher {
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ _initUpload() {
|
|
|
|
+
|
|
|
|
+ const canvas = this.canvas;
|
|
|
|
+
|
|
|
|
+ canvas.onDrop( () => {
|
|
|
|
+
|
|
|
|
+ for ( const item of canvas.droppedItems ) {
|
|
|
|
+
|
|
|
|
+ if ( /^image\//.test( item.type ) === true ) {
|
|
|
|
+
|
|
|
|
+ const { relativeClientX, relativeClientY } = canvas;
|
|
|
|
+
|
|
|
|
+ const file = item.getAsFile();
|
|
|
|
+ const fileEditor = new FileEditor( file );
|
|
|
|
+
|
|
|
|
+ fileEditor.setPosition(
|
|
|
|
+ relativeClientX - ( fileEditor.getWidth() / 2 ),
|
|
|
|
+ relativeClientY - 20
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ this.add( fileEditor );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } );
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+
|
|
_initTips() {
|
|
_initTips() {
|
|
|
|
|
|
this.tips = new Tips();
|
|
this.tips = new Tips();
|
|
@@ -622,8 +663,8 @@ export class NodeEditor extends EventDispatcher {
|
|
if ( isContext ) {
|
|
if ( isContext ) {
|
|
|
|
|
|
node.setPosition(
|
|
node.setPosition(
|
|
- contextPosition.x,
|
|
|
|
- contextPosition.y
|
|
|
|
|
|
+ Math.round( contextPosition.x ),
|
|
|
|
+ Math.round( contextPosition.y )
|
|
);
|
|
);
|
|
|
|
|
|
} else {
|
|
} else {
|
|
@@ -648,8 +689,8 @@ export class NodeEditor extends EventDispatcher {
|
|
|
|
|
|
const { relativeClientX, relativeClientY } = this.canvas;
|
|
const { relativeClientX, relativeClientY } = this.canvas;
|
|
|
|
|
|
- contextPosition.x = relativeClientX;
|
|
|
|
- contextPosition.y = relativeClientY;
|
|
|
|
|
|
+ contextPosition.x = Math.round( relativeClientX );
|
|
|
|
+ contextPosition.y = Math.round( relativeClientY );
|
|
|
|
|
|
} );
|
|
} );
|
|
|
|
|