|
Página 4 de 5
|
Autor |
Mensaje |
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: LibreDWG En Gambas
vuottincho siempre gana !
|
#31 Martes, 19 Enero 2016, 23:09 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: LibreDWG En Gambas
Vuottt, puedes poner tu código de dwg_ps.c por favor, ya que el original mio no funciona, ni siquiera me saca el .ps ahora, o tal vez estoy haciendo algo mal.
Otro tema:
Estoy tratando de dibujar las lineas del dwg en un DrawingArea, pero me tope con dos problemas, el primero es mm a pixeles y el segundo es el sistema de coordenadas, en el dwg el eje X va de izquierda a derecha el eje Y va de abajo hacia arriba, pero en el DrawingArea el eje Y va al revés, o sea de arriba hacia abajo.
¿Alguien puede decirme por donde ir para generar pdf desde dibujos de DrawingArea?
saludos.
|
#32 Miercoles, 20 Enero 2016, 01:19 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: LibreDWG En Gambas
tincho escribió: Otro tema:
Estoy tratando de dibujar las lineas del dwg en un DrawingArea, pero me tope con dos problemas....
|
#33 Miercoles, 20 Enero 2016, 01:35 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: LibreDWG En Gambas
tincho escribió: Luego, también instale la librerÃa pslib
tincho me pidió hacer disponible para gambas este programa
https://github.com/ArchimedesCAD/li...amples/dwg_ps.c
Yo he escrito una aplicación con recursos gambas, funciones externas y un po' de puro C.
Hace falta instalar en el sistema la libreria pslib.
Private Const H As Integer = 2000
Library "libredwg:0.0.0"
' int dwg_read_file(char *filename, Dwg_Data * dwg)
' Open filename and decode it, saving information into dwg.
Private Extern dwg_read_file(filename As String, dwg As Pointer) As Integer
' double dwg_model_x_min(Dwg_Data *)
Private Extern dwg_model_x_min(Dwg_Data As Pointer) As Float
' double dwg_model_x_max(Dwg_Data *)
Private Extern dwg_model_x_max(Dwg_Data As Pointer) As Float
' double dwg_model_y_min(Dwg_Data *)
Private Extern dwg_model_y_min(Dwg_Data As Pointer) As Float
' double dwg_model_y_max(Dwg_Data *)
Private Extern dwg_model_y_max(Dwg_Data As Pointer) As Float
Library "libps:0.4.5"
' void PS_boot(void)
' Initialize library.
Private Extern PS_boot()
' PSDoc * PS_new(void)
' Creating a new PostScript document object.
Private Extern PS_new() As Pointer
' int PS_open_file(PSDoc *psdoc, const char *filename)
' Opens a file for output.
Private Extern PS_open_file(psdoc As Pointer, filename As String) As Integer
' void PS_set_info(PSDoc *p, const char *key, const char *val)
' Sets information fields of document.
Private Extern PS_set_info(p As Pointer, key As String, valS As String)
' void PS_begin_page(PSDoc *psdoc, float width, float height)
' Start a new page.
Private Extern PS_begin_page(psdoc As Pointer, width As Single, height As Single)
' void PS_scale(PSDoc *psdoc, float x, float y)
' Sets scaling factor.
Private Extern PS_scale(psdoc As Pointer, x As Single, y As Single)
' void PS_translate(PSDoc *psdoc, float x, float y)
' Sets translation.
Private Extern PS_translate(psdoc As Pointer, x As Single, y As Single)
' void PS_circle(PSDoc *psdoc, float x, float y, float radius)
' Draws a circle.
Private Extern PS_circle(psdoc As Pointer, x As Single, y As Single, radius As Single)
' void PS_moveto(PSDoc *psdoc, float x, float y)
' Sets current point.
Private Extern PS_moveto(psdoc As Pointer, x As Single, y As Single)
' void PS_lineto(PSDoc *psdoc, float x, float y)
' Draws a line.
Private Extern PS_lineto(psdoc As Pointer, x As Single, y As Single)
' void PS_stroke(PSDoc *psdoc)
' Draws the current path.
Private Extern PS_stroke(psdoc As Pointer)
' void PS_end_page(PSDoc *psdoc)
' End a page.
Private Extern PS_end_page(psdoc As Pointer)
' void PS_close(PSDoc *psdoc)
' Closes a PostScript document.
Private Extern PS_close(psdoc As Pointer)
' void PS_delete(PSDoc *psdoc)
' Deletes all resources of a PostScript document.
Private Extern PS_delete(psdoc As Pointer)
' void PS_shutdown(void)
' Final clean up of library.
Private Extern PS_shutdown()
Library "/tmp/libadhoc"
' int Dim_dwg()
' Obtiene la dimensión de la Estructura '_dwg_struct'.
Private Extern Dim_dwg() As Integer
' void Itera_entidades(struct _dwg_struct *dwg)
' Iterar todas las entidades.
Private Extern Itera_entidades(_dwg As Pointer)
Public Sub Main()
Dim i, rit As Integer
Dim filename_in, filename_out As String
Dim p_dwg As Pointer
CreaSo()
' Obtiene la dimensión de la Estructura '_dwg_struct' y asigna memoria para el Puntero a la Estructura:
i = Dim_dwg()
If i = 0 Then Error.Raise("Error al obtener la dimensión !")
p_dwg = Alloc(i)
filename_in = "/ruta/del/archivo.dwg"
' Lee el archivo .dwg:
rit = dwg_read_file(filename_in, p_dwg)
If rit Then
Error.Raise("Imposible leer el archivo " & filename_in & " !")
Else
Print "¡La lectura del archivo ha tenido éxito!"
Endif
filename_out = File.BaseName(filename_in) & ".ps"
Crea_Postscript(p_dwg, filename_out)
' Libera la memoria:
Free(p_dwg)
End
Private Procedure Crea_Postscript(dwg As Pointer, exitus As String)
Dim dx, dy, scale_x, scale_y, scale As Single
Dim rit As Integer
Dim ps As Pointer
' Inizialización de la libreria ps:
PS_boot()
ps = PS_new()
rit = PS_open_file(ps, exitus)
If rit < 0 Then Error.Raise("Imposible escribir un archivo PostScript !")
PS_set_info(ps, "Creator", "dwg_ps")
PS_set_info(ps, "Author", "LibreDWG example")
PS_set_info(ps, "Title", "DWG to Postscript example")
PS_set_info(ps, "Keywords", "dwg, postscript, conversion, CAD, plot")
dx = (dwg_model_x_max(dwg) - dwg_model_x_min(dwg))
dy = (dwg_model_y_max(dwg) - dwg_model_y_min(dwg))
scale_x = dx / (dwg_model_x_max(dwg) - dwg_model_x_min(dwg))
scale_y = dy / (dwg_model_y_max(dwg) - dwg_model_y_min(dwg))
scale = 25.4 / 72 ' pt: mm
PS_begin_page(ps, dx / scale, dy / scale)
scale *= IIf(scale_x > scale_y, scale_x, scale_y)
PS_scale(ps, scale, scale)
PS_translate(ps, - dwg_model_x_min(dwg), - dwg_model_y_min(dwg))
PS_circle(ps, 0, 0, H)
PS_moveto(ps, 0, H)
PS_lineto(ps, 0, - H)
PS_moveto(ps, - H, 0)
PS_lineto(ps, H, 0)
PS_stroke(ps)
Itera_entidades(dwg, ps)
' Terminando:
PS_end_page(ps)
PS_close(ps)
PS_delete(ps)
PS_shutdown()
End
Private Procedure CreaSo()
File.Save("/tmp/libadhoc.c", "#include <stdio.h>\n" &
"#include <dwg.h>\n" &
"#include <libps/pslib.h>" &
"\n\n" &
"int Dim_dwg() {\n" &
" return sizeof(struct _dwg_struct);\n}" &
"\n\n" &
"void Itera_entidades(struct _dwg_struct *dwg, PSDoc *ps){\n" &
" Dwg_Object *obj;\n" &
" int i;\n" &
" for (i = 0; i < dwg->num_objects; i++) {\n" &
" obj = &dwg->object[i];\n" &
" if (obj->supertype = DWG_SUPERTYPE_UNKNOWN)\n" &
" continue;\n" &
" if (obj->type = DWG_SUPERTYPE_OBJECT)\n" &
" continue;\n" &
" if (obj->tio.entity->entity_mode == 0)\n" &
" continue;\n" &
" if (obj->type == DWG_TYPE_LINE) {\n" &
" Dwg_Entity_LINE* line;\n" &
" line = obj->tio.entity->tio.LINE;\n" &
" PS_moveto(ps, line->start.x, line->start.y);\n" &
" PS_lineto(ps, line->end.x, line->end.y);\n" &
" PS_stroke(ps);\n }\n }\n}")
Shell "gcc -o /tmp/libadhoc.so /tmp/libadhoc.c -shared -lredwg -lps" Wait
End
última edición por vuott el Jueves, 21 Enero 2016, 15:05; editado 1 vez
|
#34 Jueves, 21 Enero 2016, 14:15 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: LibreDWG En Gambas
Bueno probé el código, pero me dice que "H" no esta definido.
¿H es la altura de la hoja?
saludos.
|
#35 Jueves, 21 Enero 2016, 23:16 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: LibreDWG En Gambas
tincho escribió: pero me dice que "H" no esta definido.
No está definido ?
Cómo puede no estar definido? El sÃmbolo H es una Constante de tipo Integer y está definido arriba, al principio del código !!!
última edición por vuott el Sabado, 23 Enero 2016, 00:36; editado 2 veces
|
#36 Jueves, 21 Enero 2016, 23:39 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: LibreDWG En Gambas
vuott escribió: tincho escribió: pero me dice que "H" no esta definido.
No está definido ?
Como puede no estar definido ? La variable H es una Costante de tipo Integer y está definida arriba, al principio del código !!!
Tienes razón olvide copiar esa linea.
|
#37 Jueves, 21 Enero 2016, 23:58 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: LibreDWG En Gambas
última edición por vuott el Sabado, 23 Enero 2016, 00:35; editado 1 vez
|
#38 Sabado, 23 Enero 2016, 00:35 |
|
|
tincho
Analista Programador
Registrado: Noviembre 2014
Mensajes: 2565
Edad: 48 Ubicación:
|
Re: LibreDWG En Gambas
Vuott: He probado el código para convertir dwg en ps pero no ha funcionado, no se si por algún otro olvido por mi parte o por la librerÃa o alguna otra razón.
Comunidad: Les propongo avanzar un casillero mas y que, entre los que deseen sumarse, estudiemos la forma de conseguir los datos de mas elementos del archivo dwg, para, en principio, listarlos en un archivo de texto de unos 16 campos, pero que luego si hace falta se pueden ampliar, y luego con esos datos de forma ordenada y fácilmente manejable pasarlos a otros formatos como postcript, dxf, pdf, svg. para ello estoy trabajando con la librerÃa load_dwg.c que a su vez usa la libreria dwg.c
Resumen de el estado actual:
Basándonos en una librerÃa llamada libredwg que es GPLv3 que hay que descargar y compilar ya explicado Compilación de la librerÃa libreDWG, intento 3antes. logramos mediante otras librerÃas escritas en C acceder al fichero dwg y extraer cierta información de este.
Elementos que actualmente se logran extraer: LÃnea, Circulo, Texto, Insert (son los bloques, pero solo sus coordenadas)
Elementos que faltarÃan: Arco, polilÃnea, multitexto, poligonos, Atributos de bloque. etc.
Además no he logrado de momento extraer el layer, color y tipo de linea de cada uno de estos elementos. ya que están en otro parte distinta al elemento y hay que analizar como estan vinculados mediante un Ãndice o header, pero como no se nada del lenguaje C
Sitios de interés: libredwg y https://github.com/ArchimedesCAD/libredwg
Si alguno puede mirar por favor la librerÃa load_dwg.c que puede descargar la original desde el sitio de archimedes y la que yo adjunto la que modifique para generar el extracto y ver si se da cuenta de como agregar mas elementos gráficos o agregar layer, tipo de linea y color seria de gran ayuda.
Saludos.
Descripción: |
LibrerÃa que descargue desde Archimedes y modifique para incluir mas datos. |
Descargar |
Nombre del archivo: |
load_dwg.c.zip |
Tamaño: |
1.36 KB |
Descargado: |
78 veces |
Descripción: |
LibrerÃa que descargue desde Archimedes y modifique para incluir mas datos. |
Descargar |
Nombre del archivo: |
load_dwg.c.zip |
Tamaño: |
1.36 KB |
Descargado: |
78 veces |
Descripción: |
LibrerÃa que descargue desde Archimedes y modifique para incluir mas datos. |
Descargar |
Nombre del archivo: |
load_dwg.c.zip |
Tamaño: |
1.36 KB |
Descargado: |
78 veces |
|
#39 Domingo, 24 Enero 2016, 17:32 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: LibreDWG En Gambas
Para crear un file de formato .PS, tú podrÃas tambien usar los recursos del Componente gb.cairo de gambas.
|
#40 Martes, 26 Enero 2016, 10:45 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 4 de 5
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 2 invitados Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|