diff --git a/README.md b/README.md index bddf44b..3d90e8c 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,39 @@ See `tools/modly-cli/SKILL.md` for the agent workflow and output contract. Join the [Discord server](https://discord.gg/BvjDCvS3yr) to stay up to date with the latest news, report bugs, and share feedback. +Follow Modly and its development on X: + +- [Modly on X](https://x.com/modly3d) +- [Lightning Pixel on X](https://x.com/lightningpiixel) + +--- + +## Sponsors + +
+ Thanks to our early sponsors for believing in Modly and helping make local AI 3D generation more accessible. +
+ +
+
+
+
+ DrHepa
+
+
+
+
+
+ benjapenjamin
+
+
+
+
+
+ iammojogo-sudo
+
+
{selected - ? <>Click mesh to select • Delete to remove> + ? <>W/E/R move/rotate/scale • Esc exit • Delete remove> : 'Drag to rotate \u2022 Scroll to zoom' }
diff --git a/src/areas/generate/components/ViewerToolbar.tsx b/src/areas/generate/components/ViewerToolbar.tsx index c83d4f3..4b13e44 100644 --- a/src/areas/generate/components/ViewerToolbar.tsx +++ b/src/areas/generate/components/ViewerToolbar.tsx @@ -1,9 +1,11 @@ -import type { ViewMode } from '../models' -export type { ViewMode } +import type { ViewMode, GizmoMode } from '../models' +export type { ViewMode, GizmoMode } interface ViewerToolbarProps { viewMode: ViewMode autoRotate: boolean + gizmoMode: GizmoMode | null + gizmoBusy: boolean onViewMode: (mode: ViewMode) => void onAutoRotate: () => void onScreenshot: () => void @@ -67,9 +69,46 @@ const MODES: { mode: ViewMode; icon: React.ReactNode; label: string }[] = [ }, ] + +const GIZMOS: { mode: GizmoMode; key: string; label: string; icon: React.ReactNode }[] = [ + { + mode: 'translate', + key: 'W', + label: 'Move (W)', + icon: ( + + ), + }, + { + mode: 'rotate', + key: 'E', + label: 'Rotate (E)', + icon: ( + + ), + }, + { + mode: 'scale', + key: 'R', + label: 'Scale (R)', + icon: ( + + ), + }, +] + export function ViewerToolbar({ viewMode, autoRotate, + gizmoMode, + gizmoBusy, onViewMode, onAutoRotate, onScreenshot, @@ -86,6 +125,19 @@ export function ViewerToolbar({ > {icon} +))} + + + + {GIZMOS.map(({ mode, icon, label }) => ( +