Página sobre Topografía y Programación

Contenido

Información del Autor

Luis Miguel TAPIZ EGUILUZ
BILBAO 48015 BIZKAIA
Ingeniero Técnico en Topografía
colegiado nº855
Promoción del 1975 en la E.U.I.T.T. de Madrid

Dirección de correo electrónico: ltapiz@clientes.euskaltel.es
Dirección de Web : http://www.euskalnet.net/ltapiz
Teléfono del trabajo : 944204824
Número de fax : 944204268
Teléfono particular : 944755278


Proyectos actuales


Una utilidad para la preparación de reseñas
Autor 
Ir al principioIr a proyectos
Descripción
En todos los trabajos topográficos junto a la memoria descriptiva, los cálculos y los planos se presentan unas reseñas en las que suelen aparecer fotografías, coordenadas, el croquis e información sobre la composición y accesibilidad de las bases y estaciones del trabajo. Estas reseñas se suelen preparar a mano o con maquina de escribir y pegando las fotografías y los croquis.

Para automatizar estas reseñas he desarrollado un programa informático para Microsoft Word 97 en Visual Basic para aplicaciones que permite incorporar en un documento de word las imágenes (cualquier formato compatible con la inserción de imágenes para Word), las coordenadas U.T.M y geográficas .

Necesidades

Debemos tener en el directorio "C:\Mis documentos" del disco duro del ordenador:

Imagen del archivo VERTICAL.DOCImagen del archivo HORIZONTAL.DOC
Un fichero escrito en formato ASCII con la relación de nombres y coordenadas de las Estaciones y Bases y cuyas peculiaridades sean: Las Cuatro primeras líneas no sirven para este programa, solo están por compatibilidad con el programa C.T.D. de Cálculo De Topografía. El formato de los datos es:

Campo 1-6 nombre de la Estación
Campo 7-8 vacío
Campo 9-18 Coordenada X en formato 123456.789
Campo 19-20 vacío
Campo 21-31 Coordenada Y en formato 1234567.890
Campo 32-33 vacío
Campo 34-41 Coordenada Z en formato 1234.567
Campo 41-final no se tiene en cuenta

 
           FICHERO DE PUNTOS APROXIMADOS
           -----------------------------
ESTACI      X           Y           Z      EMCX.  EMCY.  EMCZ.
------  ----------  -----------  --------  -----  -----  -----
P1      394142.149  4476123.492   766.893  0.033  0.078  0.103
P2      391651.799  4477414.056  1135.395  0.025  0.061  0.095
P4      393603.628  4478550.603  1261.955  0.023  0.074  0.102
P6      392104.333  4474700.832  1041.336  0.042  0.065  0.103
P3      384534.055  4479182.866   738.748  0.014  0.015  0.052
P5      383468.459  4476602.566   835.891  0.022  0.018  0.068
P12     390826.416  4481082.363  1071.574  0.021  0.057  0.100
Manejo de la Utilidad

Con el menú Herramientas=>Plantillas y Complementos=>Agregar incorporamos la plantilla RESEÑA.DOT en la aplicación Microsoft Word .

Con el menú Herramientas=>Macro=>Macros ejecutamos la aplicación reseña y en el Dialogo Abrir Fichero elegimos el camino y fichero que contiene el nombre y coordenadas de las Estaciones y Vértices .

Menú de la utilidad :

Campo con una lista desplegable con todos los Vértices del fichero elegido anteriormente .
Opción Reseña Horizontal o Vertical .
Comando Página => Inserta una página Horizontal o Vertical en función de la opción anterior desde el Fichero Horizontal.doc o Vertical.doc .
Comando Salir => Sale de la aplicación .

Explicación y Listado de parte de la aplicación
Ir al principio Ir a proyectos
 
Dim nn$(2000), xx(2000), yy(2000), zz(2000)     'Matriz con nombre y coordenadas X, Y, Z
Public miintervalopagina as Range             'Página en la que estamos situados y que modificamos

Private Sub UserForm_Activate()                             'Subrutina de principio de la aplicación
ActiveWindow.ActivePane.View.Zoom.Percentage = 90'Configura la pantalla a un 90 por ciento
With ActiveDocument.PageSetup                              'Configuración de la Página
.TopMargin = MillimetersToPoints(40)                      'Margen Superior = 30 mm
.BottomMargin = MillimetersToPoints(25)                 'Margen Inferior = 15 mm
.LeftMargin = MillimetersToPoints(15)                     'Margen Izquierdo = 10 mm
.RightMargin = MillimetersToPoints(15)                   'Margen Derecho = 10 mm
.Gutter = MillimetersToPoints(0)                               'Margen Adicional a la Izquierda =20 mm
.PaperSize = wdPaperA4                                          'Página Din A4
.Orientation = wdOrientPortrait                                 'Orientación Vertical 
                                        '.PageHeight = MillimetersToPoints(297)
                                        '.PageWidth = MillimetersToPoints(210)
End With
With Dialogs(wdDialogFileOpen)                   'Menú Dialogo Abrir Fichero => elegimos el fichero
.Display
If .Name <> "" Then
Open .Name For Input As #1                         'Abre el fichero .Name = fichero con nombre,X,Y,Z
For I = 1 To 4
Line Input #1, a$                                             '4 primeras líneas inútiles
Next I
I = 1
While Not EOF(1)                                          'Lee todas las filas del fichero hasta el final
Line Input #1, a$
nn$(I) = Mid$(a$, 1, 6)                                 'nn$(I) = Nombre del Vértice
xx(I) = Val(Mid$(a$, 9, 10))                       'xx(I) = Coordenada X
yy(I) = Val(Mid$(a$, 21, 11))                     'yy(I) = Coordenada Y
ZZ(I) = Val(Mid$(a$, 34, 8))                     'zz(I) = Coordenada Z
ComboBox1.AddItem nn$(I)                'Incorpora el Nombre en el campo con la lista desplegable
I = I + 1                                                      'Contador de todos los Vértices
Wend
Close #1
End If
End With
End Sub

Sub substitucion(a$, b$)                             'Subrutina para Substituir un texto por otro
Selection.Find.ClearFormatting                   'Borra la búsqueda anterior
Selection.Find.Replacement.ClearFormatting      'Borra la substitución anterior
miintervalopagina.Select                              'selecciona la página actual
With Selection.Find
.Execute FindText:=a$, ReplaceWith:=b$, Format:=True,_
Replace:=wdReplaceOne, Forward:=True, Wrap:=wdFindStop_
                                        'con la selección actual reemplaza a$ por b$
End With
End Sub

Private Sub CommandButton2_Click()      'Comando para insertar una página Horizontal o Vert. 
ActiveDocument.Select                                      'Selecciona todo el documento
Selection.Collapse direction:=wdCollapseEnd     'Se dirige al final
Selection.InsertBreak Type:=wdPageBreak        'Inserta un final de página
If OptionButton1.Value=True Then        'En función de la opción inserta Horizontal o Vertical
Selection.InsertFile FileName:="c:\Mis documentos\horizontal.doc"
Else
Selection.InsertFile FileName:="c:\Mis documentos\vertical.doc"
End If
End Sub

Private Sub CommandButton3_Click()               'Comando Salir de la aplicación
End
End Sub

Private Sub ComboBox1_Change()          'Subrutina cuando cambia el nombre del Vértice
Set miintervalopagina =ActiveDocument.Range(Start:=Selection.GoTo(what:=wdGoToPage,_
which:=wdGoToAbsolute, Count:=Selection.Information(wdActiveEndPageNumber)).Start,_
End:=Selection.GoToNext(wdGoToPage).Start)'Asigna a mintervalopagina la página actual
fecha = Format(Date, "dd-mm-yy")                    'Asigna a la variable fecha la fecha actual
a$ = "Fecha:^?^?^?^?^?^?^?^?"                       '^? = Cualquier carácter
b$ = "Fecha:" & fecha
substitucion a$, b$
a$ = "VERTICE = ^?^?^?^?^?^?"
b$ = "VERTICE = " & ComboBox1.Text           'Asigna a B$ el nombre del Vértice
substitucion a$, b$
a$ = "X=^?^?^?^?^?^?^?^?^?^?^?^?"
b$ = Str(xx(ComboBox1.ListIndex + 1))
b$ = "X=" & Space(12 - Len(b$)) & b$              'Asigna a B$ la Coordenada X del Vértice
substitucion a$, b$
a$ = "Y=^?^?^?^?^?^?^?^?^?^?^?^?"
b$ = "Y=" & Space(12 - Len(b$)) & b$    'Asigna a B$ la Coordenada Y del Vértice
substitucion a$, b$
a$ = "Z=^?^?^?^?^?^?^?^?^?^?^?^?"
b$ = Str$(ZZ(ComboBox1.ListIndex + 1))
b$ = "Z=" & Space$(12 - Len(b$)) & b$   'Asigna a B$ la Coordenada Z del Vértice
substitucion a$, b$
Call geograficas(xx(ComboBox1.ListIndex + 1), yy(ComboBox1.ListIndex + 1))
End Sub

'Subrutina para el Cálculo de las Coordenadas geográficas y substitución de dichas coordenadas
Sub geograficas(x, y)
If x > 250000 And y > 4000000 Then      'Cálculo solo cuando x>250000 e y>4000000
......                                                          'Conversión X,Y,Z =>Longitud, Latitud
a$ = "Longitud =^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?"
b$ = "Longitud =" & Space$(15 - Len(longitud)) & longitud
substitucion a$, b$
a$ = "Latitud =^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?"
b$ = "Latitud =" & Space$(15 - Len(latitud)) & latitud
substitucion a$, b$
a$ = "K) =^?^?^?^?^?^?^?^?^?^?^?^?"
b$ = "K) =" & Space$(12 - Len(coef)) & coef
substitucion a$, b$                                        'coef=Coeficiente de anamorfosis K U.T.M.
a$ = "Meri. =^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?"
substitucion a$, b$                                        'conv=Angulo Convergencia de Meridianos
Else                                        'Si X<250000 e Y<4000000 entonces no escribe Long.,Lat.etc...
a$ = "Coordenadas U.T.M."
b$ = "Coordenadas Planas"
substitucion a$, b$
a$ = "Longitud =^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?":b$ = space$(25)
substitucion a$, b$
a$ = "Latitud =^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?":b$ =space$(25)
substitucion a$, b$
a$ = "Meri. =^?^?^?^?^?^?^?^?^?^?^?^?^?^?^?":b$ =space$(22)
substitucion a$, b$
a$="Huso :30":b$=space$(8)
substitucion a$,b$
End If
End Sub

Ir al principio Ir a proyectos

C.T.D. Cálculo de Topografía

CTD es un programa para el calculo y dibujo de planos de Topografía realizado por: 
Autor 
Ir al principioIr a proyectos
 
Este programa pretende simplificar al máximo todo los Cálculos que un INGENIERO TÉCNICO EN TOPOGRAFÍA va a necesitar. 
* El usuario elige cualquier opción con el ratón.
* La entrada de datos es única para todos los cálculos con lo que conseguimos una menor fuente de errores groseros. 
* Todos los ficheros que se crean automáticamente tienen el mismo nombre que el subdirectorio en el que están y con una extensión que hace referencia al trabajo del cual proviene. 
* Los datos de campo pueden ser manuales o desde colectores.
* Se permite y se recomienda hacer REGLA BESSEL en la lectura de datos puesto que el programa calculara automáticamente las correcciones de colimación y eclímetro.
* También podemos hacer varias vueltas de horizonte  o estacionarnos varias veces en un mismo estacionamiento.
* Utilidades tales como LISTAR, IMPRIMIR. 
* Cálculos de todo tipo incluyendo MÍNIMOS CUADRADOS
* Creación de nuevos puntos a partir de los calculados. 
* Aplicaciones tales como SUPERFICIE, REPLANTEOS o HELMERT.
* Creación de ficheros. DXF para su posterior plotteo. 
TIPOS DE FICHEROS Y SU SIGNIFICADO:

Todos los ficheros están en código ASCII y se pueden listar o editar .Todos los ficheros tienen una cabecera de cuatro lineas que es función del tipo de fichero .

 
* .DAT : Fichero con los datos de campo en el orden siguiente
ESTACI  INST.  P.VISA  PRISM  DISTAN.   HORIZONT  VERTICAL  CODIGO 
ABCDEF  1.345  ABCDEF  1.345  1234.678  123.5678  123.5678  ABCDEF

* .PFI : Fichero con los nombres y coordenadas de los puntos fijos .
ESTACI      X            Y          Z     
ABCDEF  123456.890  1234567.901  1234.678  

* .PAP : Fichero con los nombres y coordenadas de los puntos aprox.
ESTACI      X            Y          Z      Emcx.  Emcy.  Emcz.  
ABCDEF  123456.890  1234567.901  1234.678  1.345  1.345  1.345  

* .ANA : Fichero con el resumen de las observaciones entre Estaciones y Referencias y el calculo de errores .
ESTAC.   INST.    H       EMCH.      V       EMCV      D      EMCD   COLIM   ECLIM
ABCDEF   1.345  123.5678  1.3456  123.5678  1.3456  1234.678  1.345  1.3456  1.3456 

* .UNI : Fichero con la reducción de todas las vueltas de Horizonte poniendo a 0.0000 el ángulo H al 1º PUNTO VISADO .
ESTACI  VISADO  HORIZONT  REDUCIDA  DESNIVEL  emc.H  emc.D  Emc.Z 
ABCDEF  ABCDEF  123.4567  1234.567  1234.567  1.234  1.234  1.234 

*.XYZ : Fichero de calculo de todos los puntos radiados .
* ESTACION=B-3288
* i=1.531 X= 9742.828
*         Y= 770734.738
*         Z= 78.208 
*Orien        X           Y        H     Desorien  Acimut   Distan.
*------  ------.--- -------.--- ---.---- ---.---- ---.---- ----.--- *B-3289    9779.003  770656.520 304.0860 268.3362 172.4222   86.178 
*BR-0      9759.107   70916.593 137.3473 268.3363   5.6836  182.582  * K=1.0000000                  Promedio=268.3363 
* Cor.Colimacion = 0.0000 
* Cor.Eclimetro  = 0.0000 
*N.pun       X           Y         Z        Acimut    Distan. 
*-----  ------.---  -------.---  ----.---  ---.----  ----.--- 
1      123456.890  1234567.901  1234.678  123.5678  1234.678 

* .Z: Fichero de resultados de los mínimos cuadrados en altimetría

* .XY : Fichero de resultados de los mínimos cuadrados en planimetría

* .ext : Fichero de resultados de otros cálculos o aplicaciones . La extensión será la que nosotros elijamos .

Ir al principio Ir a proyectos
 
Para cualquier comentario o sugerencia, no dudes en escribirme a mi cuenta de correo electrónica: Correo-e: ltapiz@clientes.euskaltel.es
Programa Demo de Topografía

Creación de Macros para MicroStation

Muchas de las operaciones que el usuario hace con un programa de dibujo como MicroStation son repetitivas y para automatizar la seleccion y modificación de elementos, la elección de controles y ordenes, la manipulación de dialogos entre usuario y máquina se pueden crear unas macros.
Las macros se escriben en lenguage Visual Basic con unas extensiones específicas para MicroStation.
El código de las macros se guarda en ficheros de texto, generalmente con extension ".bas" y su ejecución supone una compilación. Las macros compiladas se guardan en ficheros binarios con extension ".ba" y en ellas estan las instrucciones y los dialogos de interface entre usuario y MicroStation. También es posible crear una página Web HTML utilizando el menu Utilidades/Autor HTML(SE).
En el directorio de MicroStation\macros existen varias macros ejemplos para la selección y manipulación de elementos. He desarrollado varias utilidades en Basic para MicroStation cuyos listados comentados pienso puedan ser de utilidad para Ingenieros Técnicos en Topografía.
Las últimas versiones de MicroStation incorporan ya unas funciones que permiten etiquetar coordenadas a puntos ("label point") o vertices de elementos ya dibujados ("label element") e importar ("import points") o exportar ("export element") pero por su utilidad didáctica he decidido escribir las macros nube.bas , coord.bas , rellena.bas y cambiogo.bas cuyos compilados estan en el fichero macros.exe.

Ir al principio Ir a proyectos
Nube.bas:Ir al principio Ir a proyectos Ir a anterior
Menu de diálogo para el dibujo de la nube de puntos. Esta en el fichero "Nube.ba" que es a la vez el programa ejecutable .


El fichero con las coordenadas X,Y,Z es ASCII y separado con comas del tipo
A123, 500000.123, 4790123.456, 1234.567
Ir al principioIr a proyectos Ir a anterior

 
' Programa creado por Luis Miguel TAPIZ
' Nube de puntos desde un fichero ASCII con: 
' Nombre o numero , X , Y , Z separados por una coma 

Sub main 
dim fichero as string 'fichero es el nombre del fichero
dim punto as MbePoint 'punto es del tipo Mbepoint.x.y.z

'Variables del menu de dialogo 
colornumero=0:colorpunto=7:colorcota=6 
opcionnumero=1:opcionpunto=1:opcioncota=1
grosornumero=0:grosorpunto=0:grosorcota=0 
nivelnumero=1:nivelpunto=2:nivelcota=3 
fontnumero=0:fontcota=3 
alturanumero$=str$(0.75):alturacota$=str$(0.75) 
anchonumero$=str$(0.75):anchocota$=str$(0.75) 
'Salvar la configuracion antes de ejecutar la macro 
salvacolor=mbesettings.color 
salvaestilos=mbesettings.linestyle 
salvagrosor=mbesettings.weight 
salvatxhght=mbesettings.textheight 
salvatxwdth=mbesettings.textwidth 
salvajustificacion=mbesettings.textjustification 
salvanivel=mbesettings.level 
'Pone una marca para poder deshacer con UNDO
call mbesendcommand("MARK") 
'Abre el menu de dialogo 
accion=mbeOpenModalDialog(1) 
if accion=3 then 'si no cancelas 
'freefile ofrece un numero para abrir un fichero 
numerofichero=freefile 
'MbeFileOpen abre el menu abrir fichero 
accionfichero=MbeFileOpen(fichero,"*.txt",_
"*.txt,Fichero de texto [*.txt]","","Fichero con el listado
de Coordenadas")
if accionfichero=MBE_Success then 
open fichero for input as numerofichero 
'lee el fichero hasta el final
while not eof(numerofichero)
input numerofichero,a$,x#,y#,z#
punto.x=x 'Asigna a Mbepoint.x la X
punto.y=y 'Asigna a Mbepoint.y la Y
punto.z=z 'Asigna a Mbepoint.z la Z

if opcionpunto=1 then 'si quiero colocar el punto 
mbesettings.color=colorpunto'valor de la casilla colorpunto 
mbesettings.weight=grosorpunto 'casilla grosorpunto
mbesettings.level=nivelpunto 'casilla para el nivel punto
'MbeSendCommand envia una orden a MicroStation 
call MbeSendCommand("PLACE POINT")
'MbeSendDataPoint envia un dato(x,y,z) a la vista 1 
call MbeSendDataPoint(punto,1) 
end if 
if opcionnumero=1 then 'si quiero colocar el numero
mbesettings.color=colornumero 
mbesettings.weight=grosornumero 
mbesettings.font=fontnumero 'tipo de letra del numero 
mbesettings.textheight=val(alturanumero)'altura del nº 
mbesettings.textwidth=val(anchonumero)'ancho del nº
mbesettings.textjustification=MBE_LeftBottom'justificación
mbesettings.level=nivelnumero 
call MbeSendCommand("PLACE TEXT") 
call MbeSendKeyin(a) 
call MbeSendDataPoint(punto,1) 
end if 
if opcioncota=1 then 'si quiero colocar la cota
mbesettings.color=colorcota 
mbesettings.weight=grosorcota 
mbesettings.font=fontcota 
mbesettings.textheight=val(alturacota) 
mbesettings.textwidth=val(anchocota) 
mbesettings.textjustification=MBE_RightTop 
mbesettings.level=nivelcota 
call MbeSendCommand("PLACE TEXT") 
call MbeSendKeyin(str$(z)) 
call MbeSendDataPoint(punto,1) 
end if 
wend 
end if 
end if 
'Antes de salir de la Macro restaura los valores modificados mbesettings.color=salvacolor 
mbesettings.linestyle=salvaestilos 
mbesettings.weight=salvagrosor 
mbesettings.textheight=salvatxhght 
mbesettings.textwidth=salvatxwdth 
mbesettings.textjustification=salvajustificacion 
mbesettings.level=salvanivel 'restablece la configuración
'Envia a MicroStation la orden de seleccion elementos MbeSendCommand("CHOOSE ELEMENT") 
End Sub 'Fin del programa activando el comando seleccion 
Coord.bas:Ir al principioIr a proyectos Ir a anterior
Menu de diálogo para el dibujo de puntos. Esta en el fichero "Coord.ba" que es a la vez el programa ejecutable .

 
' Colocación de Punto,Circulo y Coordenadas nº X Y
' Luis Miguel TAPIZ EGUILUZ 
' Tel=944755278 

sub main() 
dim punto as MbePoint 'asignación de variables
dim otro as MbePoint 
dim vista as integer 
dim numero as integer 
MbeState.messages = 0 
radio$="0.5" 'Valor para el radio del circulo
tipo=MbeSettings.Font 'Tipo de letra por defecto
alturatexto!=MbeSettings.TextHeight 'Altura por defecto 
anchuratexto!=MbeSettings.TextWidth 'Ancho por defecto
angulo!=MbeSettings.angle/pi*180'Angulo activo por defecto
accion=MbeOpenModalDialog(1) 'Abre el dialogo
if accion=3 then 'Despues de pulsar OK 
MbeWritePrompt "Pulsar Dato para colocar las Coordenadas" 
MbeWriteCommand "Punto ,X,Y" 
MbeSettings.angle=angulo!/180*pi 
MbeSettings.Font=tipo 
MbeSettings.TextWidth=anchuratexto! 
MbeSettings.TextHeight=alturatexto! 
MbeSettings.TextJustification=1 
Do 'Bucle hasta Loop 
'Obtiene desde MicroStation Dato o Reset del ratón 
MbeGetInput MBE_DataPointInput, MBE_ResetInput 
'Si es Reset sale del bucle 
if MbeState.InputType=MBE_ResetInput then exit do 
'Si es un Dato asigna a punto la X,Y,Z 
if MbeState.getInputDataPoint(punto,vista)=MBE_Success then 
'Coloca un punto con grosor 4 
Call MbeSendCommand("Place Point") 
MbeSendKeyin "WT=4" 
Call MbeSendDataPoint(punto,vista) 
'Coloca un Circulo con centro en el punto y grosor 2 
Call MbeSendCommand("Place Circle") 
MbeSendKeyin "WT=2" 
Call MbeSendDataPoint(punto,vista)'Dato para el centro 

'Calcula el punto otro desplazado el radio en X 
otro.x=punto.x + val(radio$):otro.y=punto.y:otro.z=punto.z 
Call MbeSendDataPoint(otro,vista)'Dato para el radio
'Coloca el numero , la X y la Y 
Call MbeSendCommand("Place Text")
MbeSendKeyin "WT=0" 
numero=numero + 1 
MbeSendKeyin str$(numero) 
'Calcula el punto otro desplazado con el angulo de rotación
otro.x =punto.x -MbeSettings.TextHeight * sin(angulo!/180*pi) 
otro.y = punto.y+ MbeSettings.TextHeight * cos(angulo!/180*pi) 
Call MbeSendDataPoint(otro,vista) 
texto$=str$(punto.x) 
'Alinea los textos "X= e Y=" y pone espacios vacíos 
if instr(texto$,".")>0 then 
texto$=space$(9-instr(texto$,".")) &mid$(texto$,1,instr(texto$, ".") +3) 
else 
texto$=space$(8-len(texto$)) & texto$ 
end if 
MbeSendKeyin " X=" & texto$ 
otro.x = punto.x:otro.y=punto.y 
Call MbeSendDataPoint(otro,vista) 
texto$=str$(punto.y) 
if instr(texto$,".")>0 then 
texto$=space$(9-instr(texto$,".")) & mid$(texto$,1,instr(texto$,".")+3) 
else 
texto$=space$(8-len(texto$)) & texto$ 
end if 
MbeSendKeyin " Y=" & texto$ 
otro.x = punto.x + MbeSettings.TextHeight * sin(angulo!/180*pi) 
otro.y=punto.y - MbeSettings.TextHeight * cos(angulo!/180*pi) 
Call MbeSendDataPoint(otro,vista) 
MbeSendKeyin " " 
end if 
loop 
end if 
MbeState.messages = 0 
MbeWritePrompt " " 
MbeWriteCommand " " 
End sub
Ir al principio Ir a proyectos Ir a anterior
Rellena.bas: Ir al principio Ir a proyectos Ir a anterior

Esta macro no necesita ningun menu de diálogo y sirve para buscar un elemento en un nivel (shape o complex shape en el nivel 3 en este caso) en el fichero de dibujo con el bucle Do While.....Loop y rellenarlo con un color .Esta en el fichero "Rellena.ba" que es a la vez el programa ejecutable . 

' Relleno de los distintos elementos de un nivel (3 en este caso)
' y con un color (115 en este caso) 
' por Luis Miguel TAPIZ 

Sub main 
'Asignación de variables. He procurado que los nombres de las
'variables evoquen su utilidad. 
Dim elemento as New MbeElement 
Dim posicionfichero as Long 
Dim longitudfichero as Long 
Dim tamaño as Long 
Dim origen as MBEPoint 
Dim final as MBEPoint 

' Coloca una marca para el comando UNDO 
MbeSendCommand "MARK" 
'Pone el modo relleno activo 
MbeSettings.FillMode = 1 
'El color de relleno es el 115 
MbeSettings.FillColor = 115 

'Envia la orden Cambia relleno 
MbeSendCommand "Change Fill" 
posicionfichero = elemento.FromFile(0) 
longitudfichero = MbeDgnInfo.EndOfFile 
'Desde el principio del fichero hasta el final busca el elemento 
Do While posicionfichero>=0andposicionfichero< longitudfichero 
tamaño=elemento.FileSize 
if elemento.level=3 and (elemento.Type=MBE_Shape or _
elemento.Type=MBE_ComplexShape) then 
'Lee las coordenadas origen y final 
estado = elemento.GetEndPoints(origen,final) 
'2 datos uno para seleccionar el elemento y otro para confirmar 
MbeSendDataPoint origen 
MbeSendDataPoint origen 
end if 
'Se posiciona en el siguiente elemento del fichero 
Posicionfichero = elemento.FromFile (Posicionfichero + tamaño) 
Loop 
End Sub
Ir al principio Ir a proyectos Ir a anterior
Cambiogo.bas:Ir al principioIr a proyectos Ir a anterior

Esta Macro permite cambiar el Origen Global a X=2147483.648, Y=-1852516.352, Z=2147483.648 de todos los ficheros incluidos en un directorio de manera que ficheros con mm de unidad de trabajo puedan tener coordenadas U.T.M. con mas de 4000000 en la abscisa Y.

El cambio de Origen Global quedará grabado en el fichero únicamente si salvamos los ajustes con Salvar Ajustes (Save Settings ctrl.F) o poniendo en preferencias Salvar ajustes al Salir del fichero. Esta en el fichero "Cambiogo.ba" que es a la vez el programa ejecutable . 

' Programa creado por Luis Miguel TAPIZ. 
' Cambia el Global Origin de 
' todos los ficheros de un directorio 
' del disco duro que elijamos. 
Sub main 
fichero$="*.dgn" 
sugerencia$="*.dgn" 'Para buscar todos los ficheros gráficos
filtro$="*.dgn,Fichero Gráfico[*.dgn]" 
titulo$="Eleccion del disco duro y el directorio" 'Título del menu diálogo
directorio$="" 
accionfichero=MbeFileOpen(fichero$,sugerencia$,filtro$,directorio$,titulo$) 
if accionfichero=MBE_Success then 'Si no cancelo la acción
i=0
while instr(right$(fichero$,i+1),"\") = 0 
i=i+1 
wend 
directorio$=mid$(fichero$,1,len(fichero$)-i)
'Esta función devuelve un nombre de fichero del directorio
fichero$=dir$(directorio$ & "*.dgn") 
while fichero<>"" 'Mientras haya ficheros dgn en el directorio
MbeSendKeyin("rd=" & directorio$ & fichero$) 
MbeSendKeyin "GO=-2147483.648,1852516.352,-2147483.648" 
call MbeSendReset'Para desplazar GO a las Coordenadas 
MbeSendKeyin "filedesign" 'Para Salvar Ajustes 
fichero$=dir$ 'Busca otro fichero
wend 
end if
End Sub
Ir al principio Ir a proyectos Ir a anterior