Materializr
오픈소스 파라메트릭 3D CAD로 제약 스케치·솔리드 모델·나사·SVG·텍스트 조각·STL/STEP 내보내기를 지원합니다
실제 센티미터 단위로 구조·롤러·케이블·추를 설계하고, 기계 동작을 시뮬레이션하며, 안드로이드·윈도우에서 인체 마네킹으로 검증합니다
Diseña estructuras, roldanas, cables y contrapesos en centímetros reales, simula su mecánica y comprueba con un maniquí de cuerpo físico si tu máquina le sirve a una persona. Para Android y Windows.
디자인TypeScript · JavaScriptGitHub @amaturanas-sys온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Sitio del proyecto: (español e inglés, según la preferencia del navegador; también /es y /en). Ahí están la presentación, las capturas y la descarga. El código de esa página vive en sitio-web/ y su despliegue está documentado en docs/DESPLIEGUE-TIENDA.md. Plataforma de diseño 3D y simulación de físicas para prototipar máquinas de gimnasio. Editor estilo SketchUp / NomadSculpt con medidas exactas en centímetros, librería de componentes mecánicos y (próximamente) simulación de palancas, poleas y pesos.README 전문 보기 ↗
Sitio del proyecto: https://exersuite-3-d.vercel.app (español e inglés,
según la preferencia del navegador; también /es y /en). Ahí están la
presentación, las capturas y la descarga. El código de esa página vive en
sitio-web/ y su despliegue está documentado en
docs/DESPLIEGUE-TIENDA.md.
Plataforma de diseño 3D y simulación de físicas para prototipar máquinas de gimnasio. Editor estilo SketchUp / NomadSculpt con medidas exactas en centímetros, librería de componentes mecánicos y (próximamente) simulación de palancas, poleas y pesos.
La identidad de marca (placa olímpica + compás de dibujo, monocroma) se integra
en la interfaz, el favicon y los iconos nativos. Los assets están en
public/brand/ y se regeneran con
scripts/make-brand-assets.py.
Objetivo multiplataforma desde un único código web:
npm install
npm run dev # servidor de desarrollo en http://localhost:5173
npm run build # typecheck + bundle de producción en dist/
npm run preview # sirve el build de producción
npm run typecheck # solo comprobación de tipos
63 pruebas de extremo a extremo sobre el build real (Playwright + Chromium): manejan la aplicación como lo haría una persona y miden la escena de three.js desde dentro de la página, en centímetros y grados.
npm run build
npx vite preview --port 4174 --strictPort &
bash pruebas/correr-todo.sh # ~35 min; resumen en pruebas/salidas/
Los requisitos, los rojos conocidos y cómo están escritas —incluida la regla de
comprobar la propiedad y no el número— están en
pruebas/LEEME.md.
El mismo bundle web (dist/, con base: "./" para cargarse desde file://)
alimenta ambos empaquetados.
Requisitos: Android Studio + Android SDK y JDK 17. La configuración
está en capacitor.config.ts (appId: com.exersuite.app,
webDir: dist) y el proyecto nativo vive en android/.
npm run android:sync # build web + copia a android/ y sincroniza plugins
npm run android:open # abre Android Studio para compilar/firmar el APK
npm run android:apk # alternativa CLI: genera app-debug.apk con Gradle
# (si clonas en limpio y falta android/: npm run android:add)
El APK de depuración queda en android/app/build/outputs/apk/debug/. Para una
APK/AAB de publicación, configura la firma en Android Studio (Build > Generate
Signed Bundle/APK).
Requisitos: Rust (stable, target x86_64-pc-windows-msvc), Microsoft C++
Build Tools y WebView2 (incluido en Windows 10/11). El crate de escritorio
está en src-tauri/ (identifier: com.exersuite.app).
npm run tauri:dev # ejecuta la app de escritorio en modo desarrollo
npm run tauri:build # genera el .exe + instaladores (NSIS / MSI) en
# src-tauri/target/release/bundle/
El binario de Windows debe compilarse en Windows (o cruzado con el toolchain MSVC). En Linux, Tauri requiere además
webkit2gtk-4.1para correr en local.
El workflow .github/workflows/build.yml compila
ambos binarios sin máquina local: el APK en un runner Linux con el Android
SDK y el .exe + instaladores en un runner Windows con Rust. Se dispara a
mano (workflow_dispatch), en cada push a la rama de trabajo y al publicar un
tag v*. Los binarios quedan como artifacts de la ejecución
(exersuite3d-android-debug y exersuite3d-windows).
Publicación automática (Release): al empujar un tag v* se ejecuta además
el job release, que adjunta el APK, el .exe y los instaladores NSIS/MSI a una
GitHub Release (con notas autogeneradas). Por ejemplo:
git tag v0.1.0
git push origin v0.1.0 # compila y publica la Release con los binarios
El historial de cambios versión a versión está en
CHANGELOG.md. El ejecutable de Windows se publica como
EXERSUITE3D.exe (junto al instalador NSIS y el .msi).
La carpeta godot/ contiene un proyecto Godot 4 funcional que
abre los mismos proyectos .json y los simula con física nativa (kit de
migración: piezas, articulaciones, cables, cuerdas, maniquí, mano interactiva
y cámara). La guía paso a paso — instalación, modelos .glb, exportar a
Windows/Android y hoja de ruta para completar el editor — está en
docs/MIGRACION-GODOT.md.
Al abrir la aplicación se muestra una landing ligera que no inicializa el motor 3D (WebGL/física) hasta que eliges una acción, para ahorrar recursos:
.json) / Continuar sesión
anterior (autoguardado).Desde un proyecto, el botón ⌂ Home vuelve a la pantalla de inicio (sugiriendo guardar si hay cambios) y libera el editor, de modo que se puede trabajar en varios proyectos de forma secuencial sin reiniciar la app. El botón Rendimiento abre las opciones de calidad (presets Alto/Medio/Bajo, resolución de render, sombras, reflejos y antialias) para diseñar con fluidez en equipos o tablets con poca potencia.
public/dedicatoria.txt
(se muestra tal cual; las líneas en blanco separan párrafos).| Acción | Atajo / interacción |
|---|---|
| Orbitar cámara | Arrastrar con el ratón / un dedo |
| Pan / Zoom | Click derecho-arrastrar / rueda / pinch |
| Seleccionar objeto | Click sobre el objeto |
| Mover | W o G |
| Rotar | E o R |
| Escalar | S |
| Duplicar selección | Ctrl + D |
| Eliminar selección | Supr / Backspace |
| Deseleccionar | Esc |
| Simular / detener | Espacio o botón Simular. Al simular se oculta la UI de edición y aparece la barra de simulación |
| Modo Simulador | Pantalla de inicio → selector ▶ Simulador: abre un proyecto solo para correr su física (sin herramientas de edición) |
| Herramientas de simulación | Barra inferior: perspectivas (Frontal/Lateral/Superior/Isométrica), zoom +/-, arrastrar el maniquí para situarlo, y mano interactiva: arrastra una pieza móvil y un resorte físico tira de ella (como una persona usando agarres y barras) |
| Guardar / cargar | Botones Guardar / Cargar (proyecto a archivo .json) |
| Nuevo proyecto | Botón Nuevo: vacía la escena y descarta el autoguardado |
| Autoguardado | Automático en el navegador (localStorage); se restaura al reabrir. Indicador Guardado ✓ en la barra |
| Biblioteca de modelos | Botón Biblioteca: sustituye la primitiva de cualquier componente por un modelo 3D (.glb/.gltf/.obj) de SketchUp/Nomad; se aplica a todas sus piezas y persiste en el navegador |
| Exportar / importar | Botones Exportar (.glb) / Importar (.glb/.gltf/.obj) para intercambiar modelos 3D |
| Crear articulación | + Bisagra / + Corredera, luego clic en pieza A y pieza B |
src/
core/ # unidades (cm), bus de eventos, Editor (orquestador + simulación), snapping
scene/ # SceneManager: escena, cámara, luces, grid en cm, entorno PBR
objects/ # SceneObject, geometrías, librería de componentes, materiales, figura humana
physics/ # PhysicsWorld (Rapier), joints (bisagra/corredera) y cables
ui/ # paleta, toolbar, inspector, conexiones, HUD de medidas
main.ts # punto de entrada y ensamblado
El esqueleto humano de referencia (public/models/overview-skeleton.glb) es una
conversión del modelo Open3DModel de O. Paul Gobée y col. (Dept. de Anatomía,
LUMC; vía caskanatomy.info / AnatomyTOOL), bajo Creative Commons
Attribution-ShareAlike (CC BY-SA). La app muestra el crédito al activar el
esqueleto. Detalles en public/models/ATTRIBUTION.md.
La cláusula ShareAlike aplica al modelo y sus derivados (la malla), no al resto
del código de EXERSUITE3D.
1 unidad de mundo de Three.js = 1 cm. La rejilla usa celdas de 10 cm con
divisiones mayores cada metro. Todas las dimensiones del inspector se editan y
muestran en centímetros.
Agrupada por categoría: estructural (pilares, bases, soportes, montante de rack, brazos/correas de seguridad, barras de dominadas y fondos, landmine), movimiento (guías, rieles, fulcros, pivotes, pop-pin, carro de cable), transmisión (poleas, roldanas, engranajes, cables, cadenas, listones de Kevlar, resortes, leva de resistencia variable), peso (bloques, discos, contrapesos, barra olímpica, pila de pesos, cuerno de carga, micro-disco) y ergonómico (agarraderas, asientos, respaldos, D-handle, cuerda de tríceps, barra de jalón, correa de tobillo). Cada componente lleva un material PBR y atributos físicos editables (masa en kg, anclaje).
Cada componente se dibuja por defecto con una primitiva paramétrica, pero desde
la Biblioteca (botón en la barra) puedes sustituir esa primitiva por un
modelo 3D detallado diseñado en SketchUp o Nomad (.glb, .gltf u
.obj): el modelo se fusiona, se escala a cm (heurística metros→cm), se centra y
se aplica a todas las instancias de ese componente (presentes y futuras). El
modelo se guarda en el navegador (IndexedDB) y se restaura al reabrir; con
Restablecer se vuelve a la primitiva.
Para ajustes sin usar la app ni código, también puedes reemplazar modelos por
fichero: coloca tu .glb/.gltf/.obj en
public/models/components/ y anótalo en su
manifest.json (id de componente → nombre de fichero). Se cargan al arrancar;
los modelos puestos desde la Biblioteca tienen prioridad. Ver
public/models/components/LEEME.md.
Para mantener el repertorio entre dispositivos, la biblioteca (en la Home) permite Exportar ZIP (todos los modelos con su fecha) e Importar ZIP: al importar, un diálogo compara cada modelo entrante con el local y lo clasifica (nuevo / más reciente / más antiguo / sin cambios); por defecto aplica los nuevos y los más recientes y no sobrescribe tus ediciones con versiones más antiguas.
El diseño de los componentes, mecanismos, paletas de color y cinemática se
documenta en docs/REFERENCIAS.md, una síntesis de
referencias de REP, Rogue, Titan, Hammer Strength, Cybex y Obelix.
.json y la reconstruye.
Además, autoguardado en el navegador (localStorage): los cambios se
vuelcan de forma diferida y se restauran al reabrir la app..glb, con materiales) e importar modelos externos ✔ (.glb/.gltf con
Draco u .obj): la malla se fusiona en una sola pieza, se aplica una
heurística metros→cm y el objeto importado se centra y apoya en el suelo
(no es paramétrico y no se reserializa al guardar el proyecto). Pendiente:
preservar la jerarquía multicomponente al importar.capacitor.config.ts + proyecto nativo en ,
scripts ) y Windows con ( con
y crate Rust, scripts ). La compilación
final del APK/ se hace en un host con Android SDK / toolchain de
Windows; ver «Empaquetado» arriba.| Trazar cable | + Cable → línea recta entre dos anclas: clic en el 1.er anclaje y en el 2.º (se ajusta al punto de conexión más cercano, con previsualización). Para reenviar, clic en una roldana/polea antes del 2.º anclaje (solo esas superficies deslizan); Enter/Finalizar cierra un cable con reenvíos |
| Cadena/correa de seguridad | Clic en la pieza de la paleta → línea: clic en el extremo de inicio y en el final (se anclan a piezas/superficie). Cuelgan en catenaria; ajusta la tensión en Conexiones. Sus segmentos (eslabón/listón) se reemplazan desde la biblioteca |
| Pilar / travesaño (línea) | Paleta → Pilar / travesaño (línea): elige perfil 1:1/1:2/1:3, medida nominal, extremos (plano/diagonal) y pinholes (⌀ y distancia) → clic en inicio y fin, como la línea recta de Paint. Aim assist: imán a extremos/nodos/puntos medios de otras piezas. Encadena varias; ESC para salir |
| Tubo de acero (línea) | Paleta → Tubo de acero (línea): elige el ⌀ nominal → clic en inicio y fin, con el mismo aim assist |
| Doblar por nodos (bending) | Selecciona un pilar/travesaño o tubo → Inspector → ✎ Doblar (nodos): arrastra los nodos de la trayectoria para dar forma (curva suave estilo Photoshop). Clic fuera o ESC para terminar |
| Encaje magnético | Botón Imán: al mover una pieza, encaja en puntos de anclaje (centro/extremos/caras) de otras |
| Agrupar piezas | Shift+clic para multiseleccionar → Agrupar; grupo: nombrar/duplicar/desagrupar/eliminar en el inspector |
| Voltear (espejo) | Inspector → Voltear X/Y/Z sobre la pieza seleccionada |
| Modelado avanzado | Inspector → Doblar °, Torcer ° (todas) y Bisel cm (cajas) |
| Ángulo de articulación | Selecciona un miembro del maniquí → campos X/Y/Z (grados) en el panel Posturas |
| Figura humana | Botón Figura; tipo Maniquí / Esqueleto y altura en cm |
| Segmentos del maniquí | Biblioteca (Home) → pestaña Maniquí: sustituye cada parte del cuerpo por un modelo 3D (se ajusta al hueco de la parte) |
| Posar figura | Clic en un miembro del maniquí → arrastrar el eje articular gira el segmento en torno a la articulación, solo en sus ejes naturales y dentro de rangos anatómicos |
| Editar/crear postura | Posa a mano y Actualizar (sobrescribe) o Guardar como… (nueva); editables y persistentes |
| Apoyar mano (IK) | Panel Posturas → Apoyar mano → clic en una mano y luego en un agarre; la mano se fija y lo sigue |
android/android:sync/open/apksrc-tauri/tauri.conf.jsontauri:dev/build.exe