Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
Edición De Ficheros Dxf
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Edición De Ficheros Dxf 
 
Buenos dias a todos. alguno podria orientarme sobre como editar ficheros DXF desde gambas. por el momento deseo hacer cosas simples como cambiar valores de bornas en un "FicheroTemplate.dxf" para crear varios planos de cableado electrico.

Si alguien puede decirme si existe alguna aplicacion hecha en GB3 que maneje ficheros DXF y este disponible el codigo fuente (no como kedicad) tambien me seria de ayuda para ver como maneja el tema.

Existe una libreria [1] que quizas sirva para esto, pero no tengo idea si es compatible con GB3 y si es así, de como usarla.

[1] libdxflib-2.2.0.0 (2.2.0.0-6) [universe] Library for reading and writing DXF files

Desde ya muchas gracias.
Un saludo.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
tincho:

Citar:
alguno podria orientarme sobre como editar ficheros DXF desde gambas. por el momento deseo hacer cosas simples como cambiar valores de bornas en un "FicheroTemplate.dxf" para crear varios planos de cableado electrico.

Yo, hace tiempo, lo que hacia era guardar dibujo, en formato .dxf en texto plano (no binario), y lo podía editar con cualquier editor de texto normal.


De echo, me "estudie" como era el formato dxf y cree un programa para dibujar un diagrama tipo Pert. (en visutal basic)

Para "estudiar el formato", lo que hacia era dibujar una linea, un circulo, crear capas, etc... y ver como se reprensetaba  en el fichero .dxf, asi aprendí como crear fichero .dxf. (muy básico, pero servía ...)


Si alguien puede decirme si existe alguna aplicacion hecha en GB3 que maneje ficheros DXF y este disponible el codigo fuente (no como kedicad) tambien me seria de ayuda para ver como maneja el tema.

No,creo... es algo muy especifico.

Pero es mejor mirarete la guia oficial de como es el formato:
http://images.autodesk.com/adsk/files/acad_dxf0.pdf

Citar:
Existe una libreria [1] que quizas sirva para esto, pero no tengo idea si es compatible con GB3 y si es así, de como usarla.

[1] libdxflib-2.2.0.0 (2.2.0.0-6) [universe] Library for reading and writing DXF files


El experto en uso de librerias externas en gambas y C es Vuott... Para lo que quieres hacer, creo que te vale editarlo como texto,localizar donde esta los valores que quieres cambiar, cambiarlos y guardar el archivo.


Otros programas softwarlibre para abrir archivos dxf:

http://librecad.org/cms/home.html
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
Citar:
mirarete la guia oficial ...autodesk.com/adsk/files/acad_dxf0.pdf


Esta version del pdf dxf-reference-2010 [1] es un poco más nueva que la que dices y coincide con la version DXF qeu genera LibreCAD ($ACADVER 1 AC1021).

Citar:
Para lo que quieres hacer, creo que te vale editarlo como texto


Gracias, por el dato, es como lo estoy abordandeo de momento.

Citar:
Otros programas softwarlibre para abrir archivos dxf ...librecad.org...


LibreCAD es un proyecto muy importante y en constante desarrollo, pero por el momento no maneja los bloques con atributos que es lo que me interesa para mi proyecto. En hithub esta la version 3 [2] y quizas en esta si se implemente esta caracteristica.
De todas maneras Librecad esta hecho en C++ y no creo ser capaz de hechar un vistazo al codigo y aprovecharlo, ya que estoy aprendiendo a programar y lo primero con lo que empece es gambas.

[1] http://images.autodesk.com/adsk/files/acad_dxf1.pdf
[2] https://github.com/LibreCAD/LibreCAD_3

Gracias por la respuesta, seguire investigando a ver que saco en claro.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
jsbsan escribió: [Ver mensaje]

El experto en uso de librerias externas en gambas y C es Vuott...


      
 



 
última edición por vuott el Martes, 14 Abril 2015, 10:16; editado 1 vez 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
...hay un inconveniente: lo malo es que la libreria libdxflib está escrita en C++ .

Es imposible utilizar cada una función con Extern. Se necesita una apropriada libreria externa .so, escrita por nosotros mismos, que contiene todas las funciones utiles.

Bueno, os dejo adjunto el codigo fuente de un projecto Gambas+ejemplo/test en C++ que encontré en el web. El ejemplo en C++ serà vuelto en una libreria especifica .so por el projecto principal Gambas.

Se necesita, claramente, instalar en el sistema la libreria: libdxflib-2.5.0.0.
 



 
última edición por vuott el Viernes, 15 Enero 2016, 16:31; editado 5 veces 
vuott - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
vuott escribió: [Ver mensaje]
...hay un inconveniente: lo malo es que la libreria libdxflib está escrita en C++ .


Bueno gracias por lo que enviaste pero en mi caso no he podido meterle mano ya que las librerías, las clases y la POO me parecen lejanas todavía, pues me encuentro en el pantano de la programación estructurada.
Se que la poo es el camino correcto y que permite la re utilización de código etc. etc. pero  

Gracias a otro post Buscar Una Parte Que Nos Interese De Un Archivo De Texto y un resumen sobre la especificación de dxf (que adjunto aquí) he podido solucionar la tarea con el DXF de la siguiente manera:

a) Cargo el DXF como texto y lo transformo en matriz de cadenas de texto
b) Acoto la búsqueda de texto para tener solo los que están dentro de los bloques.
c) Le aplico la rutina de re nombramiento
d) Guardo la matriz de textos como un archivo de texto-output.dxf


Public Sub btnDxf_Click()

  Dim MyPath As String
  Dim MyFile As String
  Dim MyBlock As String
  Dim MyBlocks As New String[]
  Dim MyBlockMilestone As String
  Dim MyBlocksBegins As New String[]
  Dim MyBlocksEnds As New String[]
  Dim MyPointer As String
  Dim MyPalabra As String
  Dim MyArray As String[]
  Dim i As Integer ' Busqueda de inicio de bloques
  Dim MyBlockBegin As Integer
  Dim j As Integer ' Busqueda de fin de bloques
  Dim MyBlockEnd As Integer
  Dim k As Integer ' Busqueda de inicio de textos dentro de los bloques
  Dim MyTextBegin As Integer
  Dim l As Integer ' Busqueda de fin de textos dentro de los bloques
  Dim m As Integer ' Busqueda de valores dentro de la entidad texto
  Dim MyTexts As New String[]
  Dim MyTextEnd As Integer
  Dim MyTextX As String
  Dim MyTextY As String
  Dim MyTextZ As String
  Dim MyTextValue As String
  Dim MyTextStyle As String
  
  Dim MyTemplateValue As String
  Dim MyNewValue As String
  
    MyPath = User.home & "/Input.dxf"

'a) Cargo el DXF como texto y lo transformo en matriz de cadenas de texto

MyFile = File.Load(MyPath)
MyArray = Split(Myfile, "\n")

MyBlocksBegins.Clear
MyBlocks.Clear
MyBlocksEnds.Clear

'b) Acoto la busqueda de texto para tener solo los que estan dentro de los boques.

' Creacion de lista de Nombres de bloques (blockreferences)
For i = 0 To MyArray.Count - 1
  
  MyPalabra = MyArray[i]

  Select MyPalabra
    Case "AcDbBlockReference"
      MyBlock = MyArray[i + 2]
      MyBlocks.Add(MyBlock)
    End Select

Next 'i

' Creacion de lista de comienzo y fin de los bloques (blockreferences)
For i = 0 To MyArray.Count - 1
  
  MyPalabra = MyArray[i]

  Select MyPalabra
    Case "AcDbBlockBegin"
      ' agrego el inicio de bloque si este es el de un bloque que este en la lista de blockreferences
      For j = 0 To MyBlocks.Count - 1
      
      If MyArray[i + 2] = MyBlocks[j] Then
      MyBlocksBegins.Add(i)
      Endif
        
      Next
      
    End Select

Next 'i

' Creacion de lista de comienzo y fin de los bloques (blockreferences)
For i = 0 To MyArray.Count - 1
  
  MyPalabra = MyArray[i]

  Select MyPalabra
    Case "AcDbBlockEnd"
      
      For m = 0 To MyBlocksBegins.Count - 1
      
      If i > Val(MyBlocksBegins[m]) Then
              MyBlocksEnds.Add(i)
      Endif
      
      Next
    
    End Select

Next 'i

For l = 0 To MyBlocksBegins.Count - 1
  
MyBlockBegin = Val(MyBlocksBegins[l])
MyBlockEnd = Val(MyBlocksEnds[l])
MyBlock = MyBlocks[l]

        For k = MyBlockBegin To MyBlockEnd
        
          MyPalabra = MyArray[k]

 ' Comprobaciones para acotar la busqueda        
          If MyPalabra = "AcDbText"
            'Print MyPalabra
                If MyArray[k + 1] = "10" Then
                  If MyArray[k + 3] = "20" Then
                    If MyArray[k + 5] = "30" Then
                      If MyArray[k + 9] = "1" Then
                        If MyArray[k + 17] = "7" Then
                            MyTextX = MyArray[k + 2]
                            MyTextY = MyArray[k + 4]
                            MyTextZ = MyArray[k + 6]
                            MyTextValue = MyArray[k + 10]
                            
                            MyTemplateValue = MyArray[k + 10]

'c) Le aplico la rutina de renombramiento                            

                            Select MyTemplateValue
                              Case "Texto-que-quiero-reemplazar-1"
                                MyArray[k + 10] = "Texto-de-reemplazo-1"
                              Case "Texto-que-quiero-reemplazar-2"
                                MyArray[k + 10] = "Texto-de-reemplazo-2"
                              Case "Texto-que-quiero-reemplazar-N"
                                MyArray[k + 10] = "Texto-de-reemplazo-N"
                                  
                            End Select
                            
                            MyTextStyle = MyArray[k + 18]
                        Endif
                      Endif
                    Endif
                Endif
            Endif
            Endif
        
        Next 'k

Print "---"
Next 'l

'd) Guardo la matriz de textos como un archivo de texto-output.dxf

File.Save(User.home & "/Output.dxf", MyArray.Join("\n"))

End

 

 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
vuott escribió: [Ver mensaje]
...hay un inconveniente: lo malo es que la libreria libdxflib está escrita en C++ .

Es imposible utilizar cada una función con Extern. Se necesita una apropriada libreria externa .so, escrita por nosotros mismos, que contiene todas las funciones utiles.

Bueno, os dejo adjunto el codigo fuente de un projecto Gambas+ejemplo/test en C++ que encontré en el web. El ejemplo en C++ serà vuelto en una libreria especifica .so por el projecto principal Gambas.

Se necesita, claramente, instalar en el sistema la libreria: libdxflib-2.5.0.0.


Y esta librería podría funcionar mejor o ser mas practica de usar?
https://github.com/LibreCAD/LibreCA.../drw_entities.h

Muchas gracias.
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
tincho:

El archivo que dices es un archivo de definición de cabecera ".h", tienes que buscar el ".cpp" o ".c"

No creo que funcione solo la ".h"
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
No es que vaya a funcionar uno u otro fichero, porque lo que se utiliza realmente es la librería compilada. De los ficheros sólo puedes extraer la información, la "firma" de las funciones que luego se exportarán a gambas.

De todos modos, esa librería está programada en C++, que prácticamente no se puede hacer funcionar en gambas (por lo que tengo entendido, nunca he probado).

Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Edición De Ficheros Dxf 
 
jsbsan escribió: [Ver mensaje]
tincho:

tienes que buscar el ".cpp" o ".c"


ok aquí hay mas
https://github.com/LibreCAD/LibreCA...es/libdxfrw/src

intern     fix overloaded warning & os/x error     4 days ago
drw_base.h     libdxfrw: dwg, bugs & image support     4 days ago
drw_classes.cpp     libdxfrw: dwg, bugs & image support     4 days ago
drw_classes.h     added missing files from previous commit     7 days ago
drw_entities.cpp     add hack to pass fit point as control point     3 days ago
drw_entities.h     libdxfrw: dwg, bugs & image support     4 days ago
drw_header.cpp     added missing files from previous commit     7 days ago
drw_header.h     added missing files from previous commit     7 days ago
drw_interface.h     libdxfrw update to 0.6.0     7 days ago
drw_objects.cpp     libdxfrw: dwg, bugs & image support     4 days ago
drw_objects.h     fix overloaded warning & os/x error     4 days ago
libdwgr.cpp     libdxfrw: dwg, bugs & image support     4 days ago
libdwgr.h     added missing files from previous commit     7 days ago
libdxfrw.cpp     fix overloaded warning & os/x error     4 days ago
libdxfrw.h     libdxfrw update to 0.6.0     7 days ago
main_doc.h     added missing files from previous commit     7 days ago

Como lo debería encarar el tema?? la verdad es que no se programar en c++, pero bueno si me puedes orientar por donde empezar, o si lo encaras tu como clase de gambas aunque sea de forma básica por ahí con ella como marco yo podría intentar ampliarla.

Dejo abierta la inquietud, por si a alguien le interesa que tengamos soporte dxf en gambas. que abriría la posibilidad de  intercambiar ficheros gráficos con otros programas CAD.
También esta por allí la librería de GNU libredwg para ficheros DWG, quizas para mas adelante
 



 
tincho - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Nombre De Ficheros: Arrastrar Ficheros A U... jsbsan General 2 Jueves, 16 May 2013, 18:57 Ver último mensaje
jsbsan
No hay nuevos mensajes Edición De Celdas En TableView viejito Controles/Librerías/Componentes 3 Lunes, 09 Febrero 2015, 16:54 Ver último mensaje
viejito
No hay nuevos mensajes Curso Gratuito: Desarrollo En HTML5, CSS Y... jsbsan Programación en otros lenguajes 7 Domingo, 02 Marzo 2014, 13:36 Ver último mensaje
jguardon
No hay nuevos mensajes Maratón Linuxero: Evento Monográfico Esp... jsbsan Mundo Linux 2 Sabado, 31 Marzo 2018, 12:04 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  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
No puede descargar archivos
No puede publicar eventos en el calendario