Pregunta

Se me ha solicitado para resolver un problema de uso de memoria de una aplicación CAD escrito en Visual C ++ que se produce cuando se intenta exportar el dibujo a PDF3D.

Exportación comporta característica bien para los modelos simples o sólo partes de un modelo complejo, pero no para un modelo complejo conjunto.

Estamos utilizando el proyecto U3D sourceforge para crear el objeto U3D; después de lo insertamos en el PDF. Es la parte la creación de objeto que es problemática.

El proyecto U3D SourceForge es una biblioteca construida en C ++ para su uso en C ++ también que está muerto desde el año 2007, tiene una documentación pobre y recogida de muestras de sus está lejos de ser suficiente! En la lista de tareas pendientes del proyecto también se dice que tiene problemas de memoria!

Así que se me ha pedido para atacar el problema por dos lados:

  1. hacer el mantenimiento del código U3D.

  2. Cambiar la forma en que interactúa la aplicación con la biblioteca U3D.

También dijeron el lado 2. preferible, ya que está bajo nuestro control.

Cuando se trata de resolver el problema, llegué a dos conclusiones:

  1. Estoy sospechando fuertemente que el método ENCODEX U3D es responsable de mal uso de memoria.

  2. He intentado un montón de cambios de las cosas pequeñas de la forma en que interactúa apllication con la lib (cambiando los parámetros de compresión, banderas, etc) y cada vez el resultado fue la memoria sobreasignación.

Así que la pregunta es: ¿Vale la pena seguir utilizando esta biblioteca? El código de la misma no es una alegría para leer ... O tal vez podría ser una buena idea vistazo a otras librerías para el mismo propósito? Yo no exploró ellos, pero estoy pensando seriamente en cambiar a VCGlib o libHaru ... por favor, sugiera otra cosa si usted sabe lo que es bueno.

Las otras alternativas sería: utilizar el Visual exportador Tecnologías PDF3D, que tiene un costo inaceptable, o para desarrollar mi propia implementación de un exportador U3D, que tendría las disadvanges de ser un conjunto muy limitado de la funcionalidad U3D y también could'nt que se preparan para la fecha límite prevista. Así que toma estas opciones ya que está prohibido.

Realmente necesitan ayuda para decidir qué es lo mejor.

Gracias de antemano, Sérgio

¿Fue útil?

Solución 2

Después de algunas noches desesperación y mal-dormir, tratando de pérdidas de memoria de descubrimiento o algunos otros problemas de memoria, llegamos a la conclusión de la solución más práctica:

extraer sólo la parte de código necesario para cargar un archivo y exportarlo como U3D a un pequeño programa y hacer que la principal aplicación CAD llaman. A pesar de que no es la solución más elegante, lo que realmente funciona bien -. Ninguno de los procesos de uso de la memoria alcanza ni siquiera cerca de la barrera de 2 GB

Me gustaría haber sido autorizado para resolver las cosas de esta manera antes. He propuesto algunas otras cosas como:

  • migrar a 64 bits

  • utilizar una opción que las modernas versiones de Windows admiten para extender el límite de memoria de cada proceso a más de 2 GB

Ninguna de estas dos soluciones eran aceptables, ya que sería necesaria para obligar a algunos clientes para volver a instalar hardware o software ya-funcionamiento.

Otros consejos

Algunos comentarios: VCGlib - sin relación, se basa en MeshLab VCGlib para funciones básicas, pero para herramienta de exportación de línea de comandos U3D convertir de un formato de texto a U3D se utiliza, y que es la herramienta de la lib sf U3D. libHaru - puede incrustar 3D modelos en su salida PDF, no crea los modelos (U3D o archivos PRC)

.

Otra opción es outoput otro formato PDF de Adobe 3D, República Popular China. Acrobat SDK tiene descripción del formato en forma de pseudocódigo. Sobre la base de que la producción de PRC se implementó en herramienta asíntota. Encontrarlo en sourceforge y haga la pregunta en el foro de asíntota si está interesado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top