Artículo |
Re: Lector DXF
|
He escrito este Modulo principal DXF.module y otras Clases secundarias.
He mantenido tres funciones externas de C para acelerar la traducción de todo el proyecto de C++ en Gambas.
Espero no haber cometido errores de distracción.
Asì, por favor, compruebe mi traducción con los archivos de la biblioteca C++ en cuestión que me has pasado.
saludos
Descripción: |
|
Descargar |
Nombre del archivo: |
DXF-0.0.1.tar.gz |
Tamaño: |
12.74 KB |
Descargado: |
69 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
DXF-0.0.1.tar.gz |
Tamaño: |
12.74 KB |
Descargado: |
69 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
DXF-0.0.1.tar.gz |
Tamaño: |
12.74 KB |
Descargado: |
69 veces |
última edición por vuott el Miercoles, 06 May 2020, 18:36; editado 2 veces
|
vuott [ Miercoles, 06 May 2020, 18:34 ]
|
|
Comentarios |
Re: Lector DXF
|
Adapte alguna cosas para alejarnos del perverso C++ y ya funciona!!!
última edición por tercoIDE el Miercoles, 06 May 2020, 21:28; editado 1 vez
|
tercoIDE [ Miercoles, 06 May 2020, 19:14 ]
|
|
Re: Lector DXF
|
Usaste, cambiandola, mi traducción o escribiste otra ?
|
vuott [ Miercoles, 06 May 2020, 22:00 ]
|
|
Re: Lector DXF
|
Usaste, cambiandola, mi traducción o escribiste otra ?
tu traduccion , y un poco de Buscar y Reemplazar
|
tercoIDE [ Miercoles, 06 May 2020, 22:14 ]
|
|
Re: Lector DXF
|
Hiciste bien.
La has mejorada.
|
vuott [ Miercoles, 06 May 2020, 22:47 ]
|
|
Re: Lector DXF
|
Codigo final que funciona para: Line, PolyLine, Circle, SPline, Arc
Tuve que cambiar los codigos de la PolyLine porque cambio el Standard.
Habria que ampliar para otras entidades.
Gracias, gran Jedi del inframundo
' gambas module file
Public Struct lineSt
layer As Integer
x1 As Float
y1 As Float
x2 As Float
y2 As Float
End Struct
Public Struct circleSt
layer As Integer
x As Float
y As Float
r As Float
End Struct
Public Struct arcSt
layer As Integer
x As Float
y As Float
r As Float
sa As Float
ea As Float
End Struct
Public Struct StructpolylineSt
layer As Integer
vertexcount As Integer
poliflag As Integer
x As Float[]
y As Float[]
End Struct
Public Struct StructsplineeSt
layer As Integer
m_FitPointCount As Integer
x As Float[]
y As Float[]
End Struct
Public m_Line As New LineSt
Public m_Circle As New CircleSt
Public m_PolyLine As New StructpolylineSt
Public m_Spline As New StructsplineeSt
Public m_Arc As New ArcSt
Private m_LineCount As Integer
Private m_PolyLineCount As Integer
Private m_CircleCount As Integer
Private m_ArcCount As Integer
Private m_SplineCount As Integer
'
' Private m_Line As CLine[]
' Private m_PolyLine As CPolyLine[]
' Private m_Circle As CCircle[]
' Private m_Arc As CArc[]
' Private m_Spline As CSpline[]
' Library "libc:6"
'
' ' FILE *fopen (const char *__restrict __filename, const char *__restrict __modes)
' ' Open a file and create a new stream for it.
' Private Extern fopen(__filename As String, __modes As String) As Pointer
'
' ' int feof (FILE *__stream)
' ' Return the EOF indicator for STREAM.
' Private Extern feof(__stream As Pointer) As Integer
'
' ' int fscanf (FILE *__restrict __stream, const char *__restrict __format, ...)
' ' Read formatted input from STREAM.
' Private Extern fscanf(__stream As Pointer, __format As String, array1 As Pointer, __array2 As Pointer) As Integer
'
' ' int fclose (FILE *__stream)
' ' Close STREAM.
' Private Extern fclose(__stream As Pointer) As Integer
Public Procedure LoadFile(stn As String)
Dim fp As File
Dim lpCode, lpValue As String
Dim i As Integer
Dim m_LoadStatus As Boolean
m_PolyLine.x = New Float[]
m_PolyLine.y = New Float[]
m_Spline.x = New Float[]
m_Spline.y = New Float[]
fp = Open stn For Read
If Not fp Then Error.Raise("Error !")
' While Not Eof(fp)
'
' Read #fp, lpCode, lpValue
'
' If (trim(lpcode) = "0") and not eof(fp) And (lpvalue = "LINE") and not eof(fp) Then
' Inc m_LineCount
' Else If
' (trim(lpcode) = "0") and not eof(fp) And (lpvalue = "LWPOLYLINE") and not eof(fp) Then
' Inc m_PolyLineCount
' Else If
' (trim(lpcode) = "0") and not eof(fp) And (lpvalue = "CIRCLE") and not eof(fp) Then
' Inc m_CircleCount
' Else If
' (trim(lpcode) = "0") and not eof(fp) And (lpvalue = "ARC") and not eof(fp) Then
' Inc m_ArcCount
' Else If
' (trim(lpcode) = "0") and not eof(fp) And (lpvalue = "SPLINE") and not eof(fp) Then
' Inc m_SplineCount
' Endif
'
' Wend
'
' fclose(fp)
'
' ' AllocMemory()
' '
' m_LineCount = 0
' m_CircleCount = 0
' m_ArcCount = 0
' m_PolyLineCount = 0
' m_SplineCount = 0
'
' fp = fopen(stn, "r") and not eof(fp)
' If fp <> 0 Then
'
' m_LoadStatus = True
'
' lpCode.Fill(&00, 0, lpCode.Count)
' lpValue.Fill(&00, 0, lpCode.Count)
While Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
'Print lpcode, lpvalue
If (lpvalue = "LINE") And Not Eof(fp) Then
While (Trim(lpcode) <> "8") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "8" Then m_Line.layer = CInt(lpvalue)
While (Trim(lpcode) <> "10") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "10" Then m_Line.x1 = CFloat(lpValue)
While (Trim(lpcode) <> "20") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "20" Then m_Line.y1 = CFloat(lpValue)
While (Trim(lpcode) <> "11") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "11" Then m_Line.x2 = CFloat(lpValue)
While (Trim(lpcode) <> "21") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "21" Then m_Line.y2 = CFloat(lpValue)
Inc m_LineCount
Print "Line", m_Line.layer, m_Line.x1, m_Line.y1, m_Line.x2, m_Line.y2
'' Lwpolyline command:
Else If (Trim(lpcode) = "0") And (lpvalue = "LWPOLYLINE") Then
While (Trim(lpcode) <> "8") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "8" Then m_PolyLine.layer = CInt(lpvalue)
While (Trim(lpcode) <> "90") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "90" Then m_PolyLine.vertexcount = Val(lpValue)
While (Trim(lpcode) <> "70") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "70" Then m_PolyLine.poliflag = Val(lpValue)
For i = 0 To m_PolyLine.vertexcount - 1
While (Trim(lpcode) <> "10") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "10" Then m_PolyLine.x.Add(CFloat(lpValue))
While (Trim(lpcode) <> "20") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "20" Then m_PolyLine.y.Add(CFloat(lpValue))
Next
Inc m_PolyLineCount
Print "PolyLine", m_PolyLine.layer, m_PolyLine.poliflag, m_PolyLine.vertexcount
For i = 0 To m_PolyLine.x.Max
Print "PolyLine vertex", m_PolyLine.x[i], m_PolyLine.y[i]
Next
'' Circle command:
Else If (Trim(lpcode) = "0") And (lpvalue = "CIRCLE") Then
While (Trim(lpcode) <> "8") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "8" Then m_Circle.layer = CInt(lpvalue)
While (Trim(lpcode) <> "10") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "10" Then m_Circle.x = CFloat(lpValue)
While (Trim(lpcode) <> "20") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "20" Then m_Circle.y = CFloat(lpValue)
While (Trim(lpcode) <> "40") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "40" Then m_Circle.r = CFloat(lpValue)
Inc m_CircleCount
Print "Circle", m_Circle.layer, m_Circle.x, m_Circle.y, m_Circle.r
' Arc command
Else If (Trim(lpcode) = "0") And (lpvalue = "ARC") Then
While (Trim(lpcode) <> "8") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "8" Then m_Arc.layer = CInt(lpvalue)
While (Trim(lpcode) <> "10") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "10" Then m_Arc.x = CFloat(lpValue)
While (Trim(lpcode) <> "20") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "20" Then m_Arc.y = CFloat(lpValue)
While (Trim(lpcode) <> "40") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "40" Then m_Arc.r = CFloat(lpValue)
While (Trim(lpcode) <> "50") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "50" Then m_Arc.sa = CFloat(lpValue)
While (Trim(lpcode) <> "51") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "51" Then m_Arc.ea = CFloat(lpValue)
Inc m_ArcCount
Print "Arc", m_Arc.layer, m_Arc.x, m_Arc.y, m_Arc.r, m_Arc.sa, m_Arc.ea
Else If (Trim(lpcode) = "0") And (lpvalue = "SPLINE") Then
While (Trim(lpcode) <> "8") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "8" Then m_Spline.layer = CInt(lpvalue)
While (Trim(lpcode) <> "73") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "73" Then m_Spline.m_FitPointCount = Val(lpValue)
For i = 0 To m_Spline.m_FitPointCount - 1
While (Trim(lpcode) <> "10") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "10" Then m_Spline.x.Add(CFloat(lpValue))
While (Trim(lpcode) <> "20") And Not Eof(fp)
Line Input #fp, lpcode
Line Input #fp, lpValue
Wend
If Trim(lpcode) = "20" Then m_Spline.y.Add(CFloat(lpValue))
Next
Inc m_SplineCount
Print "SPLine", m_Spline.layer, m_Spline.m_FitPointCount
For i = 0 To m_Spline.x.Max
Print "SPLine vertex", m_Spline.x[i], m_Spline.y[i]
Next
Endif
Wend
' Else
' m_LoadStatus = False
' Endif
fp.Close
End
'
' Private Procedure AllocMemory()
'
' m_Line = New CLine
' m_Arc = New CArc
' m_Circle = New CCircle
' m_PolyLine = New CPolyLine
' m_Spline = New CSpline
'
' End
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'
'
' Public Function GetLineCount() As Integer
'
' Return m_LineCount
'
' End
'
' Public Function GetCircleCount() As Integer
'
' Return m_CircleCount
'
' End
'
' Public Function GetArcCount() As Integer
'
' Return m_ArcCount
'
' End
'
' Public Function GetLwPolyLineCount() As Integer
'
' Return m_PolyLineCount
'
' End
'
' Public Function GetSplineCount() As Integer
'
' Return m_SplineCount
'
' End
|
tercoIDE [ Miercoles, 06 May 2020, 23:31 ]
|
|
Re: Lector DXF
|
Bravo, Has sido hábil y capáz, y más paciente que yo.
Interesante tu solución con Estructuras: por otra parte, las Estructuras son Clases sin eventos.
Bonum fecisti, melius egisti !
última edición por vuott el Jueves, 07 May 2020, 00:20; editado 2 veces
|
vuott [ Jueves, 07 May 2020, 00:16 ]
|
|
Re: Lector DXF
|
Bravo, Has sido hábil y capáz, y más paciente que yo.
Interesante tu solución con Estructuras: por otra parte, las Estructuras son Clases sin eventos.
Bonum fecisti, melius egisti !
yo andaba con las Struct hasta que conocí a las Class y me enamore
|
tercoIDE [ Jueves, 07 May 2020, 00:43 ]
|
|
Re: Lector DXF
|
Por si se quieren divertir un poco mas
https://www.gnu.org/software/libredwg/
Saludos.
|
tincho [ Domingo, 10 May 2020, 16:59 ]
|
|
Re: Lector DXF
|
|
vuott [ Domingo, 10 May 2020, 17:31 ]
|
|
|
|
Página 3 de 4
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
|
|