Domanda

mi è stato chiesto di risolvere un problema di utilizzo della memoria di un'applicazione CAD scritta su Visual C ++ che si verifica quando si tenta di esportare il disegno PDF3D.

L'esportazione caratteristica comporta bene per i modelli semplici o solo parti di un modello complesso, ma non per un modello di tutto il complesso.

Stiamo usando il progetto U3D sourceforge per creare l'oggetto U3D; dopo lo inseriamo nel PDF. E 'la parte oggetto la creazione che è problematica.

Il progetto U3D SourceForge è una libreria costruita in C ++ per l'uso in C ++ anche che è morto dal 2007, ha una scarsa documentazione e raccolta di suoi campioni è tutt'altro che sufficiente! Nella lista TODO del progetto si afferma, inoltre, che ha problemi di memoria!

Così mi è stato chiesto di affrontare il problema da due parti:

  1. fare la manutenzione del codice U3D.

  2. Cambia il modo in cui interagisce con la libreria di applicazioni U3D.

Hanno anche detto che il lato 2. preferibile, in quanto è sotto il nostro controllo.

Quando si tenta di risolvere il problema, ho ricevuto due conclusioni:

  1. Sono fortemente sospettare che il metodo U3D Encodex è responsabile per uso improprio della memoria.

  2. Ho provato un sacco di cambi di piccole cose per il modo in cui interagisce apllication con la lib (modifica dei parametri di compressione, bandiere, ecc) e ogni volta il risultato è stato di memoria over-allocazione.

Quindi la domanda è: vale la pena di continuare a utilizzare questa libreria? Il codice di esso non è una gioia per leggere ... O forse potrebbe essere una buona idea di guardare in altri librerie per lo stesso scopo? Non li ho esplorare, ma sto seriamente pensando di passare a VCGlib o libharu ... si prega di suggerire qualcosa di diverso se si sa che è buono.

Le altre alternative sarebbe: utilizzare Visual Technologies PDF3D esportatore, che ha un costo inaccettabile, o per sviluppare la mia propria implementazione di un esportatore U3D, che avrebbe le disadvanges di essere una serie molto limitata del funcionality U3D e anche esso non potremmo essere pronti per la scadenza prevista. Quindi prendere queste opzioni come proibito.

ho davvero bisogno di aiuto per decidere cosa è meglio.

Grazie in anticipo, Sérgio

È stato utile?

Soluzione 2

Dopo alcune notti di disperazione e di cattivo sonno, cercando di perdite di memoria di scoperta o di alcuni altri problemi di memoria, abbiamo concluso per la soluzione più pratica:

estrarre solo la parte codice necessario per caricare un file ed esportarlo come U3D ad un piccolo programma e rendere l'applicazione CAD chiamata principale di esso. Anche se non è la soluzione più elegante, in realtà funziona bene -. Nessuno dei processi utilizzo della memoria raggiunge anche in prossimità della barriera di 2 GB

vorrei era stata autorizzata a risolvere le cose in questo modo prima. Ho proposto alcune altre cose come:

  • migrazione a 64 bit

  • usare un'opzione che le versioni moderne di Windows supportano per estendere il limite di memoria di ogni processo per più di 2 GB

Nessuna di queste due soluzioni erano accettabili, in quanto sarebbe necessario per costringere alcuni clienti per reinstallare hardware o software già in esecuzione.

Altri suggerimenti

Alcuni commenti: VCGlib - non correlato, MeshLab si basa su VCGlib per le funzioni di base, ma per U3D strumento di esportazione della riga di comando per convertire da un formato di testo per U3D viene utilizzato, e che strumento è dalla lib sf U3D. libharu - può incorporare 3D modelli nel suo output PDF, non crea i modelli (U3D o file PRC)

.

Un'altra opzione è quella di outoput l'altro formato Adobe PDF 3D, PRC. Acrobat SDK ha descrizione del formato sotto forma di pseudocodice. Sulla base di tale uscita PRC è stato attuato in strumento di Asymptote. Trovare su sourceforge e porre domande al forum Asymptote, se siete interessati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top