Drawingarea + Dibuja Por Codigo + Exportar PDF


Objetivo: Drawingarea + Dibuja Por Codigo + Exportar PDF
Hola a todos.

Debido a varios experimentos para trabajar con archivos dwg, ya hemos logrado extraer la información de lineas(x,y) círculos(x,y,r) y textos(x,y,value) desde un archivo dwg, entonces estamos en el punto adecuado para dibujar estos elementos en un DrawingArea e imprimirlos en un SVG o PDF, me parece que si es vectorial es mejor porque la calidad es mayor y pesan menos los archivos generados.

1) ¿Que es necesario para hacer una clase o módulo que dibuje linea, circulo y texto pasándole los parámetros pertinentes en cada caso?
En el ejemplo (que a su vez esta basado en el ejemplo de jsbsan) podran observar que el programa dibuja algunos elementos, pero hace algo raro, pues debería dibujar 2 lineas y dibuja una sola.
Luego otra cosa rara que hace es que agranda las dimensiones de la imagen, la base se un a4 apaisado y el archivo de salida es mas grande y no se por que hace eso.

2) ¿Una vez dibujado el esquema, como se puede guardar como pdf?
¿El ejemplo lo guarda en svg. Existe una forma de guardar en pdf directamente, sin tener que recurrir a imagemagick por consola?

Pd: Adjunto un ejemplo. por favor echenle una mirada a ver que sugerencias me pueden dar.

saludos.


drawingareatest.zip
Descripción: Ejemplo de dibujo por codigo 
Descargar
Nombre del archivo: drawingareatest.zip
Tamaño: 18.51 KB
Descargado: 62 veces
drawingareatest.zip
Descripción: Ejemplo de dibujo por codigo 
Descargar
Nombre del archivo: drawingareatest.zip
Tamaño: 18.51 KB
Descargado: 62 veces
drawingareatest.zip
Descripción: Ejemplo de dibujo por codigo 
Descargar
Nombre del archivo: drawingareatest.zip
Tamaño: 18.51 KB
Descargado: 62 veces

Perfil MP  
Objetivo: Re: Drawingarea + Dibuja Por Codigo + Exportar PDF
tincho escribió: [Ver mensaje]
¿El ejemplo lo guarda en svg. Existe una forma de guardar en pdf directamente, sin tener que recurrir a imagemagick por consola?


...usando la propiedad .OutputFile de la Clase Printer .

Exemplum simplex:
Public Sub DrawingArea1_Draw()

With Paint
.Brush = Paint.Color(Color.Red)
.MoveTo(200, 200)
.RelLineTo(0, 100)
.Stroke
.DrawText("Texto creado con DrawText", 10, 10, 20, 20)
.Brush = Paint.Color(Color.Blue)
.Ellipse(200, 30, 100, 100)
.Stroke
.End
End With

End


Public Sub Button1_Click()

With Printer1
.Configure
.Orientation = 0
.Paper = 2
.Resolution = Desktop.Resolution
.GrayScale = False
' Crea un archivo .pdf en la carpeta /tmp :
.OutputFile = "/tmp/archivo.pdf"
.Print
End With

End


Public Sub Printer1_Draw()

DrawingArea1_Draw()

End


Saludos

última edición por vuott el Jueves, 21 Enero 2016, 02:43; editado 1 vez
Perfil MP  
Objetivo: Re: Drawingarea + Dibuja Por Codigo + Exportar PDF
Tincho:

Citar:
En el ejemplo (que a su vez esta basado en el ejemplo de jsbsan) podran observar que el programa dibuja algunos elementos, pero hace algo raro, pues debería dibujar 2 lineas y dibuja una sola.

He revisado el archivo dwgdata.tsv

Line 200 200 400 400 0 0 0 0 0 0 0 0 0 0 0
Text 350 350 0 0 0 0 0 0 texto 400 400 0 0 0 0
Circle 300 300 0 0 200 0 0 0 0 0 0 0 0 0 0
Line 400 400 200 200 0 0 0 0 0 0 0 0 0 0 0
Circle 100 100 0 0 200 0 0 0 0 0 0 0 0 0 0
Text 125 125 0 0 0 0 0 0 texto 400 400 0 0 0 0



Como ves las lineas, tiene las mismas coordenadas invertidas, osea una sale del punto 200.200 y llega al 400, 400, y la otra linea hace justo lo contrario, con lo cual en el dibujo se dibujan una encima de otra, por eso solo ves una linea. Yo he cambiado las coordenadas, y entonces si se ven las dos lineas.


Tincho y Vuot:

Me parece que vuestro trabajo con el tema del libredwg, es muy bueno e interesante.

A ver si podeis ir ampliando el "traductor de dwg" con las siguientes cosas:
- capas
- colores

Y otras entidades:
http://www3.uva.es/dgi-dao/teoria-archivos/b-entidades-5.pdf

Objetivo: Re: Drawingarea + Dibuja Por Codigo + Exportar PDF
jsbsan escribió: [Ver mensaje]
Como ves las lineas, tiene las mismas coordenadas invertidas

Tienes razón. ya pondré el código que esta mas avanzado. Me refiero a la librería en C y el proyecto (de pruebas) de gambas.
En el zip hay también un .ods con la lógica de los campos de datos extraídos, el orden etc.

Citar:
Me parece que vuestro trabajo con el tema del libredwg, es muy bueno e interesante.

Si, creo que además de interesante es necesario, por lo menos, para los que nos dedicamos a la ingeniería. El hecho de poder acceder a la información contenida en archivos dwg (recalco el plural "archivos")

Citar:
A ver si podeis ir ampliando el "traductor de dwg" con las siguientes cosas: - capas - colores

Con el tema de colores y capas (layers en inglés) de momento no logro extraer esa información con la clase load_dwg.c (que adjunto en este post)

Citar:
otras entidades:

Claro , por supuesto que a medida que esto vaya avanzando podremos soportar mas entidades, o por lo menos las que soporte libredwg.

Una pregunta: ¿Como se hace para hacer un "zoom" para ver todo lo que esta dibujado en un DrawingArea?

Saldos


librerias.zip
Descripción: Librerías y archivos de ayuda para el desarrollo 
Descargar
Nombre del archivo: librerias.zip
Tamaño: 34.32 KB
Descargado: 58 veces
librerias.zip
Descripción: Librerías y archivos de ayuda para el desarrollo 
Descargar
Nombre del archivo: librerias.zip
Tamaño: 34.32 KB
Descargado: 58 veces
librerias.zip
Descripción: Librerías y archivos de ayuda para el desarrollo 
Descargar
Nombre del archivo: librerias.zip
Tamaño: 34.32 KB
Descargado: 58 veces

Perfil MP  
Objetivo: Re: Drawingarea + Dibuja Por Codigo + Exportar PDF
Tincho:

Citar:
¿Como se hace para hacer un "zoom" para ver todo lo que esta dibujado en un DrawingArea?

Que yo conozca, no hay un método del drawingArea para ello.

Yo lo haría de la siguiente manera:
- Mientras que dibujo las entidades, compruebo su extensión de lo que estoy dibujano, cogiendo las coordenadas menores y superiores, para ir "acotando" el tamaño de lo que estoy dibujando.

Por ejemplo: tengo un Xmax=0 y un Ymax=0, y un Xmin=0 y Ymin=0 y un tengo que que ir dibujando 10 lineas
Iría comprobando linea por lineas sus coordenadas, y si son mayores que el mayor que tengo, se le asigno a mi mayor (Xmax,Ymax), y si son menores se la asigno al menor (Xmin y Ymin)


Al final obtenemos el tamaño de lo que estamos dibujando.

Saludos

última edición por jsbsan el Jueves, 21 Enero 2016, 19:28; editado 5 veces
Objetivo: Re: Drawingarea + Dibuja Por Codigo + Exportar PDF
jsbsan escribió: [Ver mensaje]
Por ejemplo: tengo un Xmax=0 y un Ymax=0, y un Xmin=0 y Ymin=0...

ok, ya esta lo hice así, pero ahora se complico el ajuste "fit" a la hoja del pdf.
¿Como se le dice printer que ajuste hasta rellenar la hoja? lógicamente cuando es mas grande o reduzca si es mas pequeña.

Public Sub btnPdf_Click()
With Printer1
'.Configure
.Orientation = Printer1.Landscape
.Paper = Printer1.A3
.Resolution = 150 ' DPI
.GrayScale = False
' Crea un archivo .pdf en la carpeta /tmp :
.OutputFile = stPdf '"/tmp/archivo.pdf"
.Print
End With
End

Public Sub Printer1_Draw()
DrawingArea1_Draw()
End


saludos.

Perfil MP  
Objetivo: Re: Drawingarea + Dibuja Por Codigo + Exportar PDF
Bueno, ha quedado mas o menos, el programa ya dibuja los elementos y los imprime en pdf. pero no se pueden visualizar adecuadamente.

Parece física cuántica, se donde esta el electrón pero no como es, o se como es pero no donde esta

Por favor si alguien tiene alguna sugerencia, esta sera bienvenida.

También pensé en usar dos DrawingArea, pero no se como hacerlo ya que el método _draw parece no aceptar dos o mas DrawingArea.

Aquí adjunto el código para que si alguien lo desea, pueda estudiarlo.


drawing.zip
Descripción: Programa para probar el dibujo de elementos extraídos de archivos dwg 
Descargar
Nombre del archivo: drawing.zip
Tamaño: 15.73 KB
Descargado: 54 veces
drawing.zip
Descripción: Programa para probar el dibujo de elementos extraídos de archivos dwg 
Descargar
Nombre del archivo: drawing.zip
Tamaño: 15.73 KB
Descargado: 54 veces
drawing.zip
Descripción: Programa para probar el dibujo de elementos extraídos de archivos dwg 
Descargar
Nombre del archivo: drawing.zip
Tamaño: 15.73 KB
Descargado: 54 veces

Perfil MP  

Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4893s (PHP: -77% SQL: 177%)
Consultas SQL: 48 - Debug off - GZIP Activado