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.

Biblioteca dime: Programa de Prueba

#include <iostream>
 
#include <dime/Model.h>
#include <dime/Layer.h>
#include <dime/Output.h>
#include <dime/sections/EntitiesSection.h>
#include <dime/sections/TablesSection.h>
#include <dime/tables/Table.h>
#include <dime/tables/TableEntry.h>
#include <dime/tables/LayerTable.h>
#include <dime/entities/Circle.h>
 
/**
	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 = "dxftest.dxf";
 
	cout << "generation d'un fichier DXF" << endl;
	// modele
	dimeModel dxf_model;
	dxf_model.init();
 
	// section TABLES
	dimeLayerTable *circle_layer_table_entry = new dimeLayerTable();
	circle_layer_table_entry -> setLayerName("circle", NULL);
	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, 0.0, 0.0));
	dxf_circle -> setRadius(1.0);
	dxf_circle -> setThickness(0.1);
 
	const dimeLayer *circle_layer_ptr = dxf_model.addLayer("circle");
	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'export vers un fichier
	dimeOutput dxf_output;
	dxf_output.setFilename(dxf_file.c_str());
 
	// ecriture du fichier
	dxf_model.write(&dxf_output);
 
	//TestDXF::testColor(125);
 
	return(0);
}
 
void TestDXF::testColor(int test_color) {
	dxfdouble r = 0.0, g = 0.0, b = 0.0;
	dimeLayer::colorToRGB(test_color, r, g, b);
	r *= 255, g *= 255, b *= 255;
	cout << test_color << " => (" << (int)r << ", " <<  (int)g << ", " <<  (int)b << ")" << endl;
}

Preguntas y comentarios:

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:

Ventaja: muy propio: las primitivas utilizadas para los elementos se dibujan exclusivamente mediante QPainter, sin preocuparse del objetivo: pantalla (QGraphicsView), impresora(físico/PDF/PS), imagen vectorial (SVG/DXF), imagen bitmap (BMP/PNG/JPEG/…), … Inconveniente: bastante complicado, lo más exhaustivo. No obstante no se excluye de aplicar a los primitivos que nos interesan

Il est possible de convertir des exports de Qet format svg en dxf sois avec

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://scorpio810.blogdns.net/generation-debian/qelectrotech/export%20dxf3_inkscape.png http://scorpio810.blogdns.net/generation-debian/qelectrotech/export%20dxf4_inkscape.png