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.
Edición De Ficheros Dxf
Objetivo: Re: Edición De Ficheros Dxf
tincho:
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 ...)
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
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
Citar:
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:
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
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).
Gracias, por el dato, es como lo estoy abordandeo de momento.
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.
Citar:
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:
Gracias, por el dato, es como lo estoy abordandeo de momento.
Citar:
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.
Objetivo: Re: Edición De Ficheros Dxf
última edición por vuott el Martes, 14 Abril 2015, 09:16; editado 1 vez
jsbsan escribió:
última edición por vuott el Martes, 14 Abril 2015, 09:16; editado 1 vez
Objetivo: Re: Edición De Ficheros Dxf
última edición por vuott el Viernes, 15 Enero 2016, 16:31; editado 5 veces
...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.
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 |
Objetivo: Re: Edición De Ficheros Dxf
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
vuott escribió:
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 |
Objetivo: Re: Edición De Ficheros Dxf
Y esta librería podría funcionar mejor o ser mas practica de usar?
https://github.com/LibreCAD/LibreCA.../drw_entities.h
Muchas gracias.
vuott escribió:
Y esta librería podría funcionar mejor o ser mas practica de usar?
https://github.com/LibreCAD/LibreCA.../drw_entities.h
Muchas gracias.
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"
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
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
Objetivo: Re: Edición De Ficheros Dxf
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
jsbsan escribió:
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
Página 1 de 2
No puede crear mensajesNo 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.5612s (PHP: -40% SQL: 140%)
Consultas SQL: 48 - Debug off - GZIP Activado