Está en la página 1de 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"

"0.0000") 'Asigno el nuevo nudo.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. "0. "0.0000") z = Format(CoorStart(2). 1) = x And CoorPoint(j1.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. 3) = Format(CoorEnd(2). para definir la geometria del elemento "Ni" NodesElements(nElements. 2) = Format(CoorStart(1).0000") y = Format(CoorEnd(1). "0. 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. "0. "0. "0. "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).0000") CoorPoint(2. 2) = Format(CoorEnd(1). correspondiente a la linea que estoy revisando "Ni" NodesElements(nElements.0000") CoorPoint(nNodos.StartPoint CoorEnd = Frame.0000") CoorPoint(nNodos. 1) = Format(CoorStart(0). "0. 2) = y And CoorPoint(j1.'y por lo tanto tiene propiedades StartPoint y EndPoint nElements = nElements + 1 CoorStart = Frame. 1) = nNodos Else 'Asigno el nudo ya definido.0000") CoorPoint(1.0000") z = Format(CoorEnd(2). 1) = PosStart . 2) = y And CoorPoint(j1. "0. "0. 3) = Format(CoorStart(2). 1) = 1 NodesElements(1.0000") CoorPoint(2. 2) = 2 CoorPoint(1. "0. "0. 2) = Format(CoorStart(1). "0. "0.0000") y = Format(CoorStart(1). 1) = x And CoorPoint(j1.EndPoint 'Si "nElements" es uno (1) tengo mis dos primeros nodos y los asigno If nElements = 1 Then nNodos = 2 NodesElements(1. 1) = Format(CoorStart(0). 1) = Format(CoorEnd(0).0000") CoorPoint(2. 3) = z Then PosStart = j1 End If x = Format(CoorEnd(0).0000") CoorPoint(1. 3) = Format(CoorStart(2).

3) If x1 <> x2 Then If x1 > x2 Then NodesElements(j4.0000") 'Asigno el nuevo nudo. para definir la geometria del elemento "Ni" NodesElements(nElements. "0. 1) y2 = CoorPoint(n2Temp.txt" For Output As #1 . 2) = Format(CoorEnd(1). "0.TXT 'SE PUEDE CAMBIAR LA UBICACION Y EL NOMBRE DEL ARCHIVO Open "C:\COORDINATES. 2) = n1Temp End If End If End If Next j4 'GUARDO LAS COORDENADAS Y LOS ELEMENTOS EN UN ARCHIVO LLAMADO COORDINATES. 1) y1 = CoorPoint(n1Temp. 1) = n2Temp NodesElements(j4. 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. correspondiente a la linea que estoy revisando "Nj" NodesElements(nElements. 2) = n1Temp End If Else If y1 <> y2 Then If y1 > y2 Then NodesElements(j4. 2) z2 = CoorPoint(n2Temp. 2) = nNodos Else 'Asigno el nudo ya definido. 3) x2 = CoorPoint(n2Temp. 1) = n2Temp NodesElements(j4. "0. 1) n2Temp = NodesElements(j4. 2) z1 = CoorPoint(n1Temp. 1) = n2Temp NodesElements(j4. 3) = Format(CoorEnd(2).0000") CoorPoint(nNodos. 2) x1 = CoorPoint(n1Temp.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.0000") CoorPoint(nNodos. 1) = Format(CoorEnd(0). 2) = n1Temp End If Else If z1 > z2 Then NodesElements(j4.

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