Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 4 de 5
Ir a la página Anterior  1, 2, 3, 4, 5  Siguiente
 
LibreDWG En Gambas
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
vuottincho siempre gana !  
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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....

smileysuicide
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
Código: [Descargar] [Ocultar] [Seleccionar]
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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 

 



 
última edición por vuott el Sabado, 23 Enero 2016, 00:35; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje 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.

load_dwg.c.zip
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: 73 veces
load_dwg.c.zip
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: 73 veces
load_dwg.c.zip
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: 73 veces

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
Para crear un file de formato .PS, tú podrías tambien usar los recursos del Componente gb.cairo de gambas.
 



 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Comunicar Un Movil Con Gambas: Bluetooth Â... jsbsan General 2 Sabado, 14 Julio 2012, 23:37 Ver último mensaje
sebikul
No hay nuevos mensajes Consulta Sobre Componentes Al Migrar Progr... drdr15 Controles/Librerías/Componentes 2 Miercoles, 24 Abril 2013, 19:01 Ver último mensaje
jsbsan
No hay nuevos mensajes Cerrar Gambas Para Abrir Otro Proyecto De ... Shell General 5 Jueves, 21 Septiembre 2017, 19:42 Ver último mensaje
shordi
No hay nuevos mensajes Gambas Book. Manual Online Alemán De Gamb... Shell General 3 Martes, 19 Febrero 2019, 14:29 Ver último mensaje
tincho
 

Publicar nuevo tema  Responder al tema  Página 4 de 5
Ir a la página Anterior  1, 2, 3, 4, 5  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
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



  

 

cron