Skip to content

Commit 9d12603

Browse files
authored
2D Editor support for 3D objects (#1142)
3D objects can now be drag-n-dropped from gallery onto 2D canvas, with support for scale, rotation and FOV changes. History is tracks so changes support undo/redo as well.
1 parent 8902f77 commit 9d12603

File tree

5 files changed

+859
-24
lines changed

5 files changed

+859
-24
lines changed

frontend/apps/artcraft/app/src/pages/PageDraw/Node.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { Model3DParams } from "./utilities/render3DModel";
2+
13
export type NodeType = 'rectangle' | 'circle' | 'triangle' | 'image';
24

35
export interface NodeProps {
@@ -22,6 +24,10 @@ export interface NodeProps {
2224
offsetY?: number;
2325
zIndex?: number;
2426
locked?: boolean;
27+
/** If set, this image node was rendered from a 3D model and can be re-edited in 3D. */
28+
modelUrl?: string;
29+
/** Last-used Three.js camera/fov/scale params for re-editing the 3D model. */
30+
model3dParams?: Model3DParams;
2531
}
2632

2733
export class Node {
@@ -46,7 +52,9 @@ export class Node {
4652
offsetY: number;
4753
zIndex: number;
4854
locked: boolean;
49-
55+
modelUrl?: string;
56+
model3dParams?: Model3DParams;
57+
5058
constructor({
5159
id,
5260
x,
@@ -68,7 +76,9 @@ export class Node {
6876
offsetX = 0,
6977
offsetY = 0,
7078
zIndex = 0,
71-
locked = false
79+
locked = false,
80+
modelUrl,
81+
model3dParams,
7282
}: NodeProps) {
7383
this.id = id;
7484
this.x = x;
@@ -91,6 +101,8 @@ export class Node {
91101
this.offsetY = offsetY;
92102
this.zIndex = zIndex;
93103
this.locked = locked;
104+
this.modelUrl = modelUrl;
105+
this.model3dParams = model3dParams;
94106
}
95107

96108
setPosition(x: number, y: number): void {

0 commit comments

Comments
 (0)