Edición De Ficheros Dxf


Ir a la página 1, 2  Siguiente

Objetivo: 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.

Perfil MP  
Objetivo: 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

Objetivo: 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.

Perfil MP  
Objetivo: Re: Edición De Ficheros Dxf
jsbsan escribió:  

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



última edición por vuott el Martes, 14 Abril 2015, 09:16; editado 1 vez
Perfil MP  
Objetivo: 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

dxf-test-0.0.2.tar.gz
Descripción:  
Descargar
Nombre del archivo: dxf-test-0.0.2.tar.gz
Tamaño: 24.11 KB
Descargado: 67 veces
dxf-test-0.0.2.tar.gz
Descripción:  
Descargar
Nombre del archivo: dxf-test-0.0.2.tar.gz
Tamaño: 24.11 KB
Descargado: 67 veces
dxf-test-0.0.2.tar.gz
Descripción:  
Descargar
Nombre del archivo: dxf-test-0.0.2.tar.gz
Tamaño: 24.11 KB
Descargado: 67 veces

Perfil MP  
Objetivo: Re: Edición De Ficheros Dxf
vuott escribió:  
...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



DXF-Revision-12.txt
Descripción:  
Descargar
Nombre del archivo: DXF-Revision-12.txt
Tamaño: 132.07 KB
Descargado: 59 veces
DXF-Revision-12.txt
Descripción:  
Descargar
Nombre del archivo: DXF-Revision-12.txt
Tamaño: 132.07 KB
Descargado: 59 veces
DXF-Revision-12.txt
Descripción:  
Descargar
Nombre del archivo: DXF-Revision-12.txt
Tamaño: 132.07 KB
Descargado: 59 veces

Perfil MP  
Objetivo: Re: Edición De Ficheros Dxf
vuott escribió:  
...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.

Perfil MP  
Objetivo: 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"

Objetivo: 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

Perfil MP  
Objetivo: Re: Edición De Ficheros Dxf
jsbsan escribió:  
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

Perfil MP  
Ir a la página 1, 2  Siguiente

Página 1 de 2


  
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.5191s (PHP: -51% SQL: 151%)
Consultas SQL: 48 - Debug off - GZIP Activado