Vous êtes sur la page 1sur 4

Public Sub EXPORTAR()

'Variables para guardar las coordenadas y los nudos de los elementos


Dim CoorPoint(1 To 1000, 1 To 3) As Double
Dim NodesElements(1 To 1500, 1 To 2) As Integer
'Variable que almacena el numero de nodos
Dim nNodos As Integer
'Variable que almacena el numero de elementos
Dim nElements As Integer
'Para guardar las coordenadas iniciales de la linea
'CoorStart(0)=X; CoorStart(1)=Y; CoorStart(2)=Z;
Dim CoorStart As Variant
'Para guardar las coordenadas finales de la linea
'CoorEnd(0)=X; CoorEnd(1)=Y; CoorEnd(2)=Z;
Dim CoorEnd As Variant
'En esta variable se guarda la seleccion que se solicito mediante el
programa
Dim Frames As Object
'Variables temporales para facilitar depuracion del programa
Dim j1 As Integer
Dim j2 As Integer
Dim j3 As Integer
Dim j4 As Integer
Dim x As Double
Dim x1 As Double
Dim x2 As Double
Dim y As Double
Dim y1 As Double
Dim y2 As Double
Dim z As Double
Dim z1 As Double
Dim z2 As Double
Dim PosStart As Integer
Dim PosEnd As Integer
'Nudos temporales para cambio de orden segun sugerencia del manual de
Frame3DD
Dim n1Temp As Integer
Dim n2Temp As Integer
'SELECCIONO LOS ELEMENTOS Y LOS ASIGNO AL GRUPO Elements
'Para ejecutar mas de una vez la macro se debe cambiar el nombre
elements por cualquier otro, por ejemplo Element1
'No Tener presente esto cuando se ejecute mas de una vez el macro
presentara un error
'CADA VEZ QUE SE EJECUTE EL MACRO SE DEBE SELECCIONAR UN NOMBRE
DIFERENTE A LOS SELECCIONADOS ANTERIORMENTE
'SI SOLO SE EJECUTA UNA VEZ EL MACRO, ESTE NO DEBE PRESENTAR
NINGUN PROBLEMA
Set Frames = ThisDrawing.SelectionSets.Add("Elements")
Frames.SelectOnScreen
Dim Frame As Object
For Each Frame In Frames
'Verifica que el elemento "i" sea una linea
If Frame.EntityName = "AcDbLine" Then
'Como el elemento "i" seleccionado es una linea, aumento el contador
"nElements"

'y por lo tanto tiene propiedades StartPoint y EndPoint


nElements = nElements + 1
CoorStart = Frame.StartPoint
CoorEnd = Frame.EndPoint
'Si "nElements" es uno (1) tengo mis dos primeros nodos y los asigno
If nElements = 1 Then
nNodos = 2
NodesElements(1, 1) = 1
NodesElements(1, 2) = 2
CoorPoint(1, 1) = Format(CoorStart(0), "0.0000")
CoorPoint(1, 2) = Format(CoorStart(1), "0.0000")
CoorPoint(1, 3) = Format(CoorStart(2), "0.0000")
CoorPoint(2, 1) = Format(CoorEnd(0), "0.0000")
CoorPoint(2, 2) = Format(CoorEnd(1), "0.0000")
CoorPoint(2, 3) = Format(CoorEnd(2), "0.0000")
Else
'Inicio en cero los contadores de verificacion de nudos definidos
PosStart = 0
PosEnd = 0
For j1 = 1 To nNodos
x = Format(CoorStart(0), "0.0000")
y = Format(CoorStart(1), "0.0000")
z = Format(CoorStart(2), "0.0000")
'Verifico que el nodo Para el punto inicial de la linea no este ya definido
'(comparando con todos los nodos definidos anteriormente)
If CoorPoint(j1, 1) = x And CoorPoint(j1, 2) = y And
CoorPoint(j1, 3) = z Then
PosStart = j1
End If
x = Format(CoorEnd(0), "0.0000")
y = Format(CoorEnd(1), "0.0000")
z = Format(CoorEnd(2), "0.0000")
'Verifico que el nodo para el punto final de la linea no este definido
'(comparando con todos los nodos definidos anteriormente)
If CoorPoint(j1, 1) = x And CoorPoint(j1, 2) = y And
CoorPoint(j1, 3) = z Then
PosEnd = j1
End If
Next j1
'Si mi nudo inicial de la linea que estoy revisando no esta definido
(PosStart=0) entonces lo asigno a un nuevo nudo
If PosStart = 0 Then
'Aumento el numero de nudos
nNodos = nNodos + 1
'Asigno coordenadas al nudo nuevo
CoorPoint(nNodos, 1) = Format(CoorStart(0), "0.0000")
CoorPoint(nNodos, 2) = Format(CoorStart(1), "0.0000")
CoorPoint(nNodos, 3) = Format(CoorStart(2), "0.0000")
'Asigno el nuevo nudo, para definir la geometria del elemento "Ni"
NodesElements(nElements, 1) = nNodos
Else
'Asigno el nudo ya definido, correspondiente a la linea que estoy revisando
"Ni"
NodesElements(nElements, 1) = PosStart

End If
'Si mi nudo final de la linea que estoy revisando no esta definido
(PosStart=0) entonces lo asigno a un nuevo nudo
If PosEnd = 0 Then
'Aunmento el numero de nudos
nNodos = nNodos + 1
'Asigno coordenadas al nudo nuevo
CoorPoint(nNodos, 1) = Format(CoorEnd(0), "0.0000")
CoorPoint(nNodos, 2) = Format(CoorEnd(1), "0.0000")
CoorPoint(nNodos, 3) = Format(CoorEnd(2), "0.0000")
'Asigno el nuevo nudo, para definir la geometria del elemento "Ni"
NodesElements(nElements, 2) = nNodos
Else
'Asigno el nudo ya definido, correspondiente a la linea que estoy revisando
"Nj"
NodesElements(nElements, 2) = PosEnd
End If
End If
End If
Next Frame
'CAMBIO ORDEN DE COORDENADAS SEGUN CRITERIOS DE MANUAL DE
USUARIO
For j4 = 1 To nElements
n1Temp = NodesElements(j4, 1)
n2Temp = NodesElements(j4, 2)
x1 = CoorPoint(n1Temp, 1)
y1 = CoorPoint(n1Temp, 2)
z1 = CoorPoint(n1Temp, 3)
x2 = CoorPoint(n2Temp, 1)
y2 = CoorPoint(n2Temp, 2)
z2 = CoorPoint(n2Temp, 3)
If x1 <> x2 Then
If x1 > x2 Then
NodesElements(j4, 1) = n2Temp
NodesElements(j4, 2) = n1Temp
End If
Else
If y1 <> y2 Then
If y1 > y2 Then
NodesElements(j4, 1) = n2Temp
NodesElements(j4, 2) = n1Temp
End If
Else
If z1 > z2 Then
NodesElements(j4, 1) = n2Temp
NodesElements(j4, 2) = n1Temp
End If
End If
End If
Next j4
'GUARDO LAS COORDENADAS Y LOS ELEMENTOS EN UN ARCHIVO LLAMADO
COORDINATES.TXT
'SE PUEDE CAMBIAR LA UBICACION Y EL NOMBRE DEL ARCHIVO
Open "C:\COORDINATES.txt" For Output As #1

Print #1, "COORDINATES"


Print #1, "Ni Xi Yi Zi"
For j2 = 1 To nNodos
Print #1, j2 & " " & CoorPoint(j2, 1) & " " & CoorPoint(j2, 2) & " " &
CoorPoint(j2, 3)
Next j2
Print #1, "ELEMENTS"
Print #1, "ELEMT Ni Nf"
For j3 = 1 To nElements
Print #1, j3 & " " & NodesElements(j3, 1) & " " & NodesElements(j3, 2)
Next j3
'AL FINAL CIERRO EL ARCHIVO CREADO
Close #1
End
End Sub

Vous aimerez peut-être aussi