Diferencias
Muestra las diferencias entre dos versiones de la página.
Próxima revisión | Revisión previa | ||
es:doc:dxf [22/02/2012 05:17] – creado alcarret | es:doc:dxf [20/11/2014 14:01] (actual) – editor externo 127.0.0.1 | ||
---|---|---|---|
Línea 1: | Línea 1: | ||
+ | ====== Formato DXF: experimentos ====== | ||
+ | Esta página agrupa información sobre todo lo que afecta al formato DXF en QElectroTech. Por el momento, se limita a los experimentos para la implementación de la exportación DXF. | ||
+ | |||
+ | * ¿Cómo leer un DXF bajo GNU/Linux? La más simple es utilizar QCad | ||
+ | * ¿Qué biblioteca se utiliza para manejar este formato? | ||
+ | * Aunque libqcad ya contenga seguramente una interface QGraphicsScene y un archivo DXF, el proyecto QET no quiere depender de esta biblioteca | ||
+ | * 20/03/2011: bemol: la dxflib pronto será empaquetado por separado: http:// | ||
+ | * la [[http:// | ||
+ | * GNU LibreDWG es una librería de software escrito en C para leer y escribir archivos en formato DWG, con el objetivo final de sustituir el grupo de bibliotecas Open Design Alliance. [[http:// | ||
+ | |||
+ | ===== Biblioteca dime: Programa de Prueba ===== | ||
+ | <code c++> | ||
+ | #include < | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | /** | ||
+ | Ce programme de test genere un fichier test.dxf comportant un cercle sur un | ||
+ | calque. | ||
+ | Paquets necessaires : libdime, libdime-dev | ||
+ | Compile avec : | ||
+ | gcc testdxf0.cpp -o testdxf0 -lstdc++ -ldime | ||
+ | */ | ||
+ | |||
+ | using namespace std; | ||
+ | namespace TestDXF { | ||
+ | void testColor(int); | ||
+ | } | ||
+ | |||
+ | int main(int /*argc*/, char **/*argv*/) { | ||
+ | |||
+ | const string dxf_file = " | ||
+ | |||
+ | cout << " | ||
+ | // modele | ||
+ | dimeModel dxf_model; | ||
+ | dxf_model.init(); | ||
+ | |||
+ | // section TABLES | ||
+ | dimeLayerTable *circle_layer_table_entry = new dimeLayerTable(); | ||
+ | circle_layer_table_entry -> setLayerName(" | ||
+ | circle_layer_table_entry -> setColorNumber(125); | ||
+ | |||
+ | dimeTable *layer_tables = new dimeTable(NULL); | ||
+ | layer_tables -> insertTableEntry(circle_layer_table_entry); | ||
+ | |||
+ | dimeTablesSection *tables_section = new dimeTablesSection(); | ||
+ | tables_section -> insertTable(layer_tables); | ||
+ | dxf_model.insertSection(tables_section); | ||
+ | |||
+ | // cercle | ||
+ | dimeCircle *dxf_circle = new dimeCircle(); | ||
+ | dxf_circle -> setCenter(dimeVec3f(0.0, | ||
+ | dxf_circle -> setRadius(1.0); | ||
+ | dxf_circle -> setThickness(0.1); | ||
+ | |||
+ | const dimeLayer *circle_layer_ptr = dxf_model.addLayer(" | ||
+ | if (circle_layer_ptr != NULL) { | ||
+ | dxf_circle -> setLayer(circle_layer_ptr); | ||
+ | } else { | ||
+ | cout << "layer circle non cree" << endl; | ||
+ | } | ||
+ | |||
+ | // section ENTITIES | ||
+ | dimeEntitiesSection *entities_section = new dimeEntitiesSection(); | ||
+ | dxf_model.insertSection(entities_section); | ||
+ | entities_section -> insertEntity(dxf_circle); | ||
+ | |||
+ | // objet dimeOutput pour l' | ||
+ | dimeOutput dxf_output; | ||
+ | dxf_output.setFilename(dxf_file.c_str()); | ||
+ | |||
+ | // ecriture du fichier | ||
+ | dxf_model.write(& | ||
+ | |||
+ | // | ||
+ | |||
+ | return(0); | ||
+ | } | ||
+ | |||
+ | void TestDXF:: | ||
+ | dxfdouble r = 0.0, g = 0.0, b = 0.0; | ||
+ | dimeLayer:: | ||
+ | r *= 255, g *= 255, b *= 255; | ||
+ | cout << test_color << " => (" << (int)r << ", " << | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Preguntas y comentarios: | ||
+ | * Este formato parece usar color de 16 bits; la Biblioteca Dime proporciona una función estática dimeLayer:: | ||
+ | * La documentación de algunas clases de la Biblioteca Dime estipulan que nunca deben asignarse sobre la pila, lo que implica que elimina otras clases después de su uso => bien estudiar esta gestión de los objetos, el programa de arriba puede tener pérdidas de memoria. | ||
+ | * Se asegurará de que libdime este empaquetado con Mandriva y Slackware. Esto es claramente una dependencia adicional de QET. | ||
+ | |||
+ | ===== Biblioteca Qt: hacer un QGraphicsScene en DXF ===== | ||
+ | |||
+ | De acuerdo con la documentación Qt, para añadir la capacidad de representar un grafico DXF como dar soporte a SVG, hay que añadir dos clases: | ||
+ | * una clase derivada de QPaintDevice que será necesario aplicar al menos el método <code c++> | ||
+ | * una clase derivada de QPaintEngine, | ||
+ | * drawEllipse | ||
+ | * drawImage | ||
+ | * drawLines | ||
+ | * drawPath | ||
+ | * drawPixmap | ||
+ | * drawPoints | ||
+ | * drawPolygon | ||
+ | * drawRects | ||
+ | * drawTextItem | ||
+ | * drawTiledPixmap | ||
+ | |||
+ | Ventaja: muy propio: las primitivas utilizadas para los elementos se dibujan exclusivamente mediante QPainter, sin preocuparse del objetivo: pantalla (QGraphicsView), | ||
+ | Inconveniente: | ||
+ | |||
+ | ====== Il est possible de convertir des exports de Qet format svg en dxf sois avec ====== | ||
+ | |||
+ | * autotrace | ||
+ | * inkscape | ||
+ | |||
+ | autotrace = le fichier est bien converti au format DXF mais le résultât n'est pas convaincant au vu des premiers essais | ||
+ | |||
+ | autotrace fichier Qet.png -output-file output.dxf | ||
+ | |||
+ | inkscape s'en sort mieux et le resultat est presque exploitable | ||
+ | |||
+ | [[http:// | ||
+ | [[http:// |