Insertar Modelo 3D

:information_source: Resumen Insert Model 3D añade un botón de composición que simplifica la adición de modelos 3D a una publicación de Discourse.
:hammer_and_wrench: Repositorio https://github.com/Beholder-Vision/discourse-insert-model-3d
:open_book: ¿Nuevo en los temas de Discourse? Guía para principiantes sobre el uso de temas de Discourse

Instalar este componente de tema

Hola a todos,
Este componente permite a sus usuarios añadir modelos 3D a sus publicaciones utilizando el componente Google model viewer. Creé este componente para permitir a los usuarios de mi SaaS de fotogrametría Beholder compartir modelos que crean en nuestro flamante foro de Discourse y pensé en compartirlo aquí en caso de que sea útil para otras personas. No pude encontrar otro componente similar, pero solo hice una búsqueda muy rápida…

Las instrucciones y capturas de pantalla que muestran cómo usar el componente están a continuación.

Agradezco cualquier comentario o idea sobre este componente. El componente model viewer que utilizo para mostrar los modelos tiene bastante funcionalidad, por lo que es probable que haya un gran alcance para expandir este componente al exponer parte de esa funcionalidad a los usuarios. Creé este componente copiando, pegando y modificando los componentes insert video y mermaid, así que también agradecería mucho si alguien con más experiencia en la escritura de componentes de Discourse pudiera echar un vistazo al código y decirme qué errores he cometido. :slight_smile:

Saludos
Alan

Uso

Cuando el componente esté instalado, los usuarios podrán añadir modelos 3D a sus
publicaciones haciendo clic en el nuevo icono de cubo en el compositor.

composer_toolbar

Actualmente, el visor 3D no descargará ni mostrará el modelo 3D de inmediato, sino que mostrará un póster (que se puede personalizar) y solo cargará el modelo cuando el usuario haga clic en el botón ‘Cargar modelo 3D’. La idea detrás de esto es ayudar a los usuarios con ancho de banda limitado.

Configuración de administrador

Para que los usuarios puedan cargar modelos con este componente, deberá añadir .gltf y .glb a la lista de extensiones autorizadas.

También es probable que necesite aumentar el límite del tamaño máximo de archivo adjunto.

settings_max_attachment_size

Esta es probablemente la principal limitación para usar este componente en Discourse alojado, ya que allí, en los planes de suscripción más bajos, el tamaño máximo se limita a 30 MB. Para ser justos, sin embargo, probablemente no querrás que tus usuarios carguen archivos enormes y los archivos .glb y .gltf se pueden reducir considerablemente en tamaño si son generados por un programa que admite la compresión de malla Draco.

20 Me gusta

Gracias, funcionó durante unos días, pero ahora el botón de carga ya no funciona (probado en Firefox, Chrome y Firefox móvil)

2 Me gusta

¡Oh no! Esto no es bueno. Gracias por informarme.

Lo mismo había sucedido en mi foro. Al ver la publicación, creo que lo que sucedió es que después de unos días Discourse decidió que la imagen del póster subida y el modelo 3D ya no eran necesarios, por lo que los eliminó del servidor. :frowning:

He ‘arreglado’ esto temporalmente en mi sitio al volver a subir el modelo y el póster, pero ahora voy a leer la documentación de temas de Discourse para ver si puedo arreglarlo correctamente. Por el rápido escaneo que hice al escribir el componente del tema, vi que la documentación dice que mientras un activo sea referenciado por una publicación, se mantendrá en el servidor, pero obviamente las URL que este componente pone en la publicación no están haciendo eso por alguna razón. Si algún otro escritor de plugins puede ofrecer algún consejo sobre esto, sería muy apreciado… :slight_smile:

2 Me gusta

Eso es un comportamiento extraño.

1 me gusta

Sí, mi teoría actual es que cuando creo el markdown para hacer referencia al visor de modelos, entonces de alguna manera la URL del modelo cargado no tiene el formato correcto para la lógica que escanea las publicaciones y reconoce las cargas utilizadas.

Actualmente, estoy examinando otros 2 lugares en Discourse donde se cargan archivos. En el modal de carga de imágenes/archivos, se mantiene una referencia a una ‘short_url’ que tiene el formato upload:// en lugar de la URL final que utilizará el navegador para descargar el recurso. ¿Quizás necesite averiguar cómo usar eso? Alternativamente, el componente GitHub - discourse/discourse-insert-video, en el que basé mi componente, utiliza directamente la URL del recurso. O bien ese componente sufre el mismo error (poco probable :)) o esas URL son reconocidas porque se insertan en el mensaje markdown como etiquetas HTML (no puedo hacer eso con la etiqueta model-viewer ya que no está en la lista blanca de etiquetas HTML).

Ese es mi pensamiento actual, o podría ser algo completamente diferente. Ahora iré a ver si puedo encontrar el código que identifica las cargas huérfanas en un sitio de Discourse…

2 Me gusta

Hola,

Disculpa la demora en responder a esto. Estuve ocupado con trabajo de contrato la semana pasada.

De todos modos, acabo de revisarlo de nuevo y creo que he identificado el código que decide si una carga se mantiene o se elimina. En el código del lado del servidor para procesar una publicación, hay una rutina llamada ‘each_upload_url’ que generará una lista de archivos cargados que se referencian en una publicación.

Ahora, no soy un desarrollador de Ruby, pero por lo que puedo entender, está buscando URL referenciadas por una lista predefinida de etiquetas HTML. Por lo tanto, para el componente temático de inserción de video que copié, el atributo src de cualquier elemento HTML se reconoce como una carga, y el atributo poster de cualquier elemento HTML

La solución a largo plazo podría ser cambiar el código del lado del servidor para que los atributos de model-viewer se reconozcan como una fuente de cargas, pero creo que también debería ser posible solucionar esto por ahora agregando etiquetas HTML explícitas que enlacen a las cargas.

Voy a publicar en la categoría #bug para verificar si mi comprensión es correcta, pero en el improbable caso de que mi comprensión sea correcta, he enviado una solución al componente temático Insert Model 3D que inserta algunas etiquetas ocultas en la publicación que hacen referencia al modelo y póster cargados. @patrickemin Si tienes tiempo, ¿podrías verificar si esto resuelve el problema para ti? Necesitarías actualizar el componente y luego volver a cargar cualquier activo de modelo 3D que haya sido purgado.

Alan, no estoy seguro de si esto resolverá el acertijo, pero nos ha afectado en el pasado donde ha habido errores en este espacio.

Las cargas huérfanas se eliminan periódicamente. Como parte de una carga, deberías terminar con una entrada en la tabla uploads. Si por alguna razón falta, la carga se eliminará eventualmente.

Podría ser una línea de investigación.

Para verificar el modelo Upload, puedes ir a la consola de Rails desde el directorio de Discourse y, por ejemplo:

./launcher enter app
rails c
Upload.last(3)

Saludos

1 me gusta

Ah, es útil saberlo, gracias Robert. ¿Sabes si es posible realizar esa comprobación o algo equivalente en Discourse alojado? Supongo que no, así que @patrickemin, si tu servidor resulta estar autoalojado, esto podría ser algo bueno que comprobar.
Alternativamente, tengo una configuración local de Discourse basada en Docker en la que estaba trabajando hasta que me di por vencido y recurrí a Discourse alojado. Esta podría ser una buena excusa para volver a ella. :slight_smile:

2 Me gusta

Algo que necesitarías plantear a soporte.

Pero si está claro que esto le está sucediendo a varios usuarios, vale la pena investigarlo en una instancia autoalojada antes de plantear un ticket, sospecho.

Hola, volví después de unos meses… Aproveché que Microsoft lanzó su modelo Copilot 2D a 3D para probar y tu TC ahora funciona bien, con el código añadido el modelo no debería desaparecer, mira aquí.

1 me gusta