Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

LibreDWG En Gambas

LibreDWG En Gambas
Artículo
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
vuott escribió:  
Aquì la su traducción a Gambas:
.......
Este codigo funziona.


Bueno, tincho, busqué esta pagina web:
 https://knowledge.autodesk.com/supp...mple-files.html

Tincho, intenta utilizar con el mi programito los archivos ejemplos que estan en:  " AutoCAD 2010 Sample Files "  y mira la console lo que muestra.

saludos


......

opss  
Compartiendo todo eso con los otros miembros del foro.    

Bueno, amigos, como probar aquel mi codigo traducido de el C ?

1) Descargad la libreria .so adjunta abajo (...claramente... descomprimidla).

2) Pónedla en una carpeta (por ejemplo en: /tmp ).

3) en un proyecto gambas pegad este codigo:
Library "/tmp/libredwg:0.0.0"      ' He puesto la libreria en /tmp  !!!

' int dwg_read_file(char *filename, Dwg_Data * dwg)
Private Extern dwg_read_file(filename As String, dwg As Pointer) As Integer


Public Sub Main()

  Dim filename_in As String
  Dim p_dwg As Pointer
  Dim err As Integer
  
    filename_in = "/ruta/del/archivo.dwg"
    
' Asignación de memoria para el Puntero:
    p_dwg = Alloc(2832)

' Lee el archivo .dwg:
    err = dwg_read_file(filename_in, p_dwg)
    If err Then
      Error.Raise("Imposible leer el archivo " & filename_in & " !")
    Else
      Print "\n¡La lectura del archivo ha tenido éxito!"
    Endif

' Libera la memoria:
    Free(p_dwg)

End


4) descargad un archivo ejemplo en la sección  " AutoCAD 2010 Sample Files " de esta pagina web:
https://knowledge.autodesk.com/supp...mple-files.html

5) Usadlo en el codigo.

6) Mirad lo que es escrito en console.

libredwg.so.0.0.0.tar.gz
Descripción:  
Descargar
Nombre del archivo: libredwg.so.0.0.0.tar.gz
Tamaño: 83.92 KB
Descargado: 85 veces
libredwg.so.0.0.0.tar.gz
Descripción:  
Descargar
Nombre del archivo: libredwg.so.0.0.0.tar.gz
Tamaño: 83.92 KB
Descargado: 85 veces
libredwg.so.0.0.0.tar.gz
Descripción:  
Descargar
Nombre del archivo: libredwg.so.0.0.0.tar.gz
Tamaño: 83.92 KB
Descargado: 85 veces




 
última edición por vuott el Domingo, 17 Enero 2016, 02:38; editado 12 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 17 Enero 2016, 01:15 ]
 


LibreDWG En Gambas
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
vuott escribió:  

1) Descargad la libreria .so adjunta abajo (...claramente... descomprimidla).

Yo he usado la libreria original de gnu, que descargue y compile como describo antes en "Compilación de la librería libreDWG, intento 3"

vuott escribió:  

2) Pónedla en una carpeta (por ejemplo en: /tmp ).

La ubucación de la libreria es /usr/local/lib/libredwg.so.0.0.0


vuott escribió:  

3) en un proyecto gambas pegad este codigo:

Ok

vuott escribió:  

4) descargad un archivo ejemplo en la sección  " AutoCAD 2010 Sample Files " de esta pagina web:

ok

vuott escribió:  

5) Usadlo en el codigo.

ok
vuott escribió:  

6) Mirad lo que es escrito en console.

No escribe nada, devuelve en err = -1

¿Como es el procedimiento que usaste para compilar tu librería .so? ya que tienen diferente tamaño en comparación a la que genera el procedimiento 3 que explico antes.
¿Que es lo que te aparece a ti en la consola?

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Domingo, 17 Enero 2016, 18:31 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
tincho escribió:  
¿Como es el procedimiento que usaste para compilar tu librería .so? ya que tienen diferente tamaño en comparación a la que genera el procedimiento 3 que explico antes.

Sì, lo vì.
No he compilado la libreria .so que yo usé, la descargué - ya compilada (para Fedora) - desde este enlace:
http://download.opensuse.org/reposi...-6.1.x86_64.rpm (Binary package)


tincho escribió:  
¿Que es lo que te aparece a ti en la consola?

El texto es muuy largo.

Ahora he usado el file " plot_screening_and_fill_patterns.dwg ", que puedes hallar en la sección AutoCAD 2010 Sample Files de esta pagina web:
https://knowledge.autodesk.com/supp...mple-files.html

Bueno, abajo como adjunto un archivo de texto donde puedes ver lo que apareció en la console.

Saludos



 
última edición por vuott el Domingo, 17 Enero 2016, 20:41; editado 3 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 17 Enero 2016, 20:35 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
vuott escribió:  
...he usado el file " plot_screening_and_fill_patterns.dwg

este archivo funciono, supongo que porque es versión 2007, y antes estaba probando con otro que es 2011.
Para verificar la version del dwg hay que abrir el archivo con nano, y al principio del archivo esta alguno de los siguientes textos:
AC1024 AutoCAD 2011
AC1024 AutoCAD 2010
AC1021 AutoCAD 2007/2008/2009
AC1018 AutoCAD 2004/2005/2006
AC1015 AutoCAD 2000/2000i/2002
AC1014 Release 14
AC1012 Release 13
AC1009 Release 11/12
AC1006 Release 10
La libreria es compatible hasta erchivos AC1021 pero no tengo en clario si para 2008/2009, pues solo se mensiona 2007.

Luego, también instale la librería pslib (en linuxmint) supongo que en debian también. y me aparecieron los textos que comentas.
Una pregunta, ¿Debería aparecer por alguna parte algun fichero .ps? yo no he encontrado ninguno.

Esto va tomando color eh!! en cualquier momento tenemos un CAD gambas que lea dwg.

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Domingo, 17 Enero 2016, 23:39 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
tincho escribió:  
antes estaba probando con otro que es 2011.

Lo sospeché.    



tincho escribió:  
AC1021 AutoCAD 2007/2008/2009

Es como un magic number del fichero.
Para verlo con gambas puedes usar este simple codigo:
Public Sub Main()

  Dim s As String
  
    s = File.Load("/ruta/del/archivo.dwg")

    Print Left(s, 6)

End



tincho escribió:  
Una pregunta, ¿Debería aparecer por alguna parte algun fichero .ps? yo no he encontrado ninguno.

No comprendo la pregunta. Es decir ?  
Vas buscando en internet ficheros .ps ? O que ?



 
última edición por vuott el Lunes, 18 Enero 2016, 02:09; editado 2 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Lunes, 18 Enero 2016, 01:05 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
vuott escribió:  
Para verlo con gambas puedes usar este simple codigo

Si es un especie de número mágico, que permite hacer una primera verificación de versión de archivo y el código que propones lo voy a incluir en Destornishador para "leer" esa información del archivo dwg.
Lo del archivo .ps te lo preguntaba por si el código anterior lo generaba, pero veo que no, que esa es la etapa siguiente cuando logremos "traducir" dwg_ps.c
Por cierto. ¿Como puedo hacer para traducir un archivo.c a gambas.class? ¿Hay un método? ¿Puedes darme un pequeño cursillo para hacer el intento de traducción por mi cuenta?

Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Lunes, 18 Enero 2016, 10:57 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
tincho escribió:  
¿Como puedo hacer para traducir un archivo.c a gambas.class? ¿Hay un método? ¿Puedes darme un pequeño cursillo para hacer el intento de traducción por mi cuenta?


Muy simple, tincho: .......estudiar y aprender el lenguaje C !    


Saludos



 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Lunes, 18 Enero 2016, 13:12 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
vuott escribió:  
Muy simple, tincho: .......estudiar y aprender el lenguaje C !    

Lo sabia , jajaja!!!



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Lunes, 18 Enero 2016, 15:03 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
tincho me pedió que volviera disponible para gambas, usando Shell, este programa escrito en C:
   https://github.com/ArchimedesCAD/li...ples/load_dwg.c

Bueno, he modificado un po' aquel codigo y añadí unas lineas para completarlo y para permitir a gambas que coja unas informaciones enviadas por aquella aplicación escrita en C.

Hace falta por supuesto que sea instalado el recurso LibreDWG, como fue explicado en estos enlances:
http://foro.gambas-es.org/show_post.php?p=29669
http://foro.gambas-es.org/show_post.php?p=29675
http://foro.gambas-es.org/show_post.php?p=29676

El nuevo codigo en C será:
/*****************************************************************************/
/*  LibreDWG - free implementation of the DWG file format                    */
/*                                                                           */
/*  Copyright (C) 2009 Free Software Foundation, Inc.                        */
/*  Copyright (C) 2010 Thien-Thi Nguyen                                      */
/*                                                                           */
/*  This library is free software, licensed under the terms of the GNU       */
/*  General Public License as published by the Free Software Foundation,     */
/*  either version 3 of the License, or (at your option) any later version.  */
/*  You should have received a copy of the GNU General Public License        */
/*  along with this program.  If not, see <http://www.gnu.org/licenses/>.    */
/*****************************************************************************/

/*
 * load_dwg.c: load a DWG, get lines, text and circles
 * written by Felipe Castro
 * modified by Felipe Corrêa da Silva Sances
 * modified by Thien-Thi Nguyen
 * mutatum a vuott (www.gambas-it.org, foro.gambas-es.org)
 */


#include <dwg.h>
#include <stdio.h>

void
add_line(double x1, double y1, double x2, double y2)
{
  
        printf("%lf", x1);
        printf("%lf", y1);
        printf("%lf", x2);
        printf("%lf", y2);

}

void
add_circle(double x, double y, double R)
{
  
        printf("%lf", x);
        printf("%lf", y);
        printf("%lf", R);

}

void
add_text(double x, double y, char *txt)
{
  
        printf("%lf", x);
        printf("%lf", y);
        printf("%s", txt);

}


int main (int argc, char *argv[]) {
  unsigned int i;
  int success;
  Dwg_Data dwg;

  dwg.num_objects = 0;
  success = dwg_read_file(argv[1], &dwg);
  if (success) {
        printf("Imposible cargar el archivo %s !\n", argv[1]);
        return success;
  }

  for (i = 0; i < dwg.num_objects; i++)
    {
      Dwg_Entity_LINE *line;
      Dwg_Entity_CIRCLE *circle;
      Dwg_Entity_TEXT *text;

      switch (dwg.object[i].type)
        {
      case DWG_TYPE_LINE:
        line = dwg.object[i].tio.entity->tio.LINE;
        add_line(line->start.x, line->end.x, line->start.y, line->end.y);
        break;
      case DWG_TYPE_CIRCLE:
        circle = dwg.object[i].tio.entity->tio.CIRCLE;
        add_circle(circle->center.x, circle->center.y, circle->radius);
        break;
      case DWG_TYPE_TEXT:
        text = dwg.object[i].tio.entity->tio.TEXT;
        add_text(text->insertion_pt.x, text->insertion_pt.y, text->text_value);
        break;
        }
    }

  dwg_free(&dwg);

  return (0);

}

Guardamos este codigo en un simple archivo de texto, por ejemplo en la ruta: /tmp/load_dwg.c
Este codigo debe ser compilado como sigue:
 gcc -o /tmp/load_dwg /tmp/load_dwg.c -lredwg


El codigo gambas para coger los valores enviados por la aplicación load.dwg.c será muy sencillo:
Private pr As Process


Public Sub Main()

' Abre el programa "load_dwg", pasandole un archivo .dwg, y lo maneja con "Process" poniendolo tambien en "observación":
  pr = Shell "/tmp/load_dwg /ruta/de/un/archivo.dwg" For Read As "Lee"

End


Public Sub Lee_Read()   ' Si estan entrando datos, será activata esta sub-routine

  Dim s As String

   Read #pr, s, -256
   Print s

End



Gracias a tincho por sus test de estos codigos.



 
última edición por vuott el Martes, 19 Enero 2016, 18:09; editado 5 veces 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Martes, 19 Enero 2016, 17:58 ]
Responder citando    Descargar mensaje  
Mensaje Re: LibreDWG En Gambas 
 
vuott escribió:  
Gracias a tincho por sus test de estos códigos.

El que debo dar las gracias soy yo. aprendí a usar las librerías de C desde la consola, es mas, acá pongo una modificación de load_dwg para que saque la información mas ordenada (no se si sera el estilo mas adecuado de usar printf).

void
add_line(double x1, double y1, double x2, double y2)
{
printf("[Lin]|");
printf("X1:");
printf("%lf", x1);
printf("|");

printf("Y1:");
printf("%lf", y1);
printf("|");

printf("X2:");
printf("%lf", x2);
printf("|");

printf("Y2: ");
printf("%lf", y2);
printf("\n");

}

void
add_circle(double x, double y, double R)
{

printf("[Cir]|");

printf("X:");
printf("%lf", x);
printf("|");

printf("Y:");
printf("%lf", y);
printf("|");

printf("R:");
printf("%lf", R);
printf("\n");

}

void
add_text(double x, double y, char *txt)
{

printf("[Tex]|");

printf("X:");
printf("%lf", x);
printf("|");

printf("Y:");
printf("%lf", y);
printf("|");

printf("T:");
printf("%s", txt);
printf("\n");

}

void
add_insert(double x, double y)
{

printf("[Blk]|");

printf("X:");
printf("%lf", x);
printf("|");

printf("Y:");
printf("%lf", y);
//printf("|");

//printf("N:");
//printf("%s", txt);
// Aca le quiero agregar el nombre del bloque pero no se como todavia.
printf("\n");


y luego esta

case DWG_TYPE_INSERT:
insert = dwg.object[i].tio.entity->tio.INSERT;
add_insert(insert->ins_pt.x, insert->ins_pt.y);
break;


Saludos.



 
tincho - Ver perfil del usuario Enviar mensaje privado  
tincho [ Martes, 19 Enero 2016, 19:22 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 3 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


 



 

cron