Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| doc:dxf [14/05/2013 00:31] – [export dxf] scorpio810 | doc:dxf [20/11/2014 14:02] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ~~NOCACHE~~ | ||
| + | ====== Format DXF : expérimentations ====== | ||
| + | |||
| + | Cette page regroupe des informations sur tout ce qui touche au format DXF dans QElectroTech. Pour le moment, cela se cantonne aux expérimentations en vue de l' | ||
| + | |||
| + | * Comment lire un DXF sous GNU/Linux ? Le plus simple est d' | ||
| + | * Quelle bibliothèque sera utilisée pour manipuler ce format ? | ||
| + | * Bien que la libqcad contienne sans doute déjà de quoi interfacer une QGraphicsScene et un fichier DXF, le projet QET ne souhaite pas dépendre de cette bibliothèque | ||
| + | * 20/03/2011 : bemol : la dxflib va bientôt être packagée à part : http:// | ||
| + | * la [[http:// | ||
| + | * GNU LibreDWG est une librairie logicielle écrite en C pour la lecture et l' | ||
| + | ===== Bibliothèque dime : Programme de test ===== | ||
| + | <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 << ", " << | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Questions et remarques : | ||
| + | * Ce format semble utiliser des couleurs sur 16 bits ; la bibliothèque Dime fournit une fonction statique dimeLayer:: | ||
| + | * La documentation de certaines classes de la bibliothèque Dime stipule qu' | ||
| + | * Il faudra s' | ||
| + | |||
| + | ===== Bibliothèque Qt : rendre une QGraphicsScene en DXF ===== | ||
| + | |||
| + | D' | ||
| + | * une classe dérivant de QPaintDevice dont il faudra implémenter au moins la méthode <code c++> | ||
| + | * une classe dérivant de QPaintEngine, | ||
| + | * drawEllipse | ||
| + | * drawImage | ||
| + | * drawLines | ||
| + | * drawPath | ||
| + | * drawPixmap | ||
| + | * drawPoints | ||
| + | * drawPolygon | ||
| + | * drawRects | ||
| + | * drawTextItem | ||
| + | * drawTiledPixmap | ||
| + | |||
| + | Avantage : très propre : les primitives utilisées pour les éléments sont dessinées exclusivement via QPainter, sans se soucier de la cible : écran (QGraphicsView), | ||
| + | Inconvénient : assez compliqué car exhaustif. Il n'est toutefois pas exclu de n' | ||
| + | |||
| + | ====import dxf to elmt==== | ||
| + | |||
| + | < | ||
| + | inkscape -E intermediate.eps infile.svg | ||
| + | pstoedit -dt -f dxf: | ||
| + | ./ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ====export dxf ==== | ||
| + | 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 | ||
| + | |||
| + | |||
| + | |||
| + | {{: | ||