Índice del Foro www.mediocad.com www.mediocad.com
TODO SOBRE MICROSTATION. MDL, MVBA, MACROS.
 
 F.A.Q.F.A.Q.   BuscarBuscar   Lista de MiembrosLista de Miembros   Grupos de UsuariosGrupos de Usuarios   RegístreseRegístrese 
 PerfilPerfil   Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   ConectarseConectarse 

Medir longitud de lineas ya dibujadas en un plano

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro www.mediocad.com -> MVBA
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
Noemi



Registrado: 10 Abr 2015
Mensajes: 10
Ubicación: Alicante

MensajePublicado: Jue May 21, 2015 9:55 am    Título del mensaje: Medir longitud de lineas ya dibujadas en un plano Responder citando

Buenos días, a ver si alguien me puede ayudar. Estoy trabajando en un plano de una ciudad donde tengo marcados los recorridos que deben hacer los vehículos. Necesito obtener la longitud total del recorrido.
Estoy viendo varios ejemplos en la página pero, o no los se utilizar, o no es lo que busco. También estoy investigando en google pero no es tan fácil de encontrar.
Agradeceré mucho cualquier ayuda.
Un saludo, Razz Razz
Volver arriba
Ver perfil del usuario Enviar mensaje privado
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Lun May 25, 2015 8:31 am    Título del mensaje: Sumar líneas Responder citando

Hola,

¿Pero quieres programarlo?

Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Noemi



Registrado: 10 Abr 2015
Mensajes: 10
Ubicación: Alicante

MensajePublicado: Lun May 25, 2015 10:15 am    Título del mensaje: Medir longitud de lineas ya dibujadas en un plano Responder citando

Si, estoy trabajando con un proyecto de vba.
He visto el ejemplo que has puesto, "Herramienta medir distancia", pero no es exactamente lo que yo necesito.
Yo tengo ya creadas las rutas y lo que quiero es hacer la selección de todos esos elementos ya que no es una linea continua, sino la unión de lineas, cadenas complejas y cadena de líneas. Y medir su longitud, para que sumando todos me de el recorrido de los vehículos.

Muchas gracias por interesarte!! Laughing Laughing


Ultima edición por Noemi el Lun May 25, 2015 12:07 pm; editado 1 vez
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Noemi



Registrado: 10 Abr 2015
Mensajes: 10
Ubicación: Alicante

MensajePublicado: Lun May 25, 2015 12:04 pm    Título del mensaje: Medir longitud de lineas ya dibujadas en un plano Responder citando

Hola!!!, casi conseguido.

He logrado hacer el recorrido por todos los elementos del plano de un determinado nivel obteniendo el color de cada uno.
Lo que a mi me interesa, no es el color sino obtener la longitud que tiene cada uno de dichos elementos y con ello sabre el total de recorrido haciendo un acumulado.

Dim ConjuntoElem As ElementEnumerator
Dim oScanCriteria As ElementScanCriteria
Dim oLevel As Level

Set oLevel = ActiveDesignFile.Levels("SANTA ROSA")
Set oScanCriteria = New ElementScanCriteria
oScanCriteria.ExcludeAllLevels
oScanCriteria.IncludeLevel oLevel
Set ConjuntoElem = ActiveModelReference.Scan(oScanCriteria)
ConjuntoElem.Reset

Do While ConjuntoElem.MoveNext
Dim oElement As element
Set oElement = ConjuntoElem.Current
MsgBox "Color: " & oElement.Color
Loop

A ver si alguien me puede ayudar!

Saludos.
Volver arriba
Ver perfil del usuario Enviar mensaje privado
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Mar May 26, 2015 8:48 am    Título del mensaje: Longitud Responder citando

Estás cerca. Una ayuda en rojo.

Dim ConjuntoElem As ElementEnumerator
Dim oScanCriteria As ElementScanCriteria
Dim oLevel As Level

Dim elemLinea As LineElement 'elemento lineal del que saco la longitud
Dim dblLongitud As Double 'Longitud de la línea


Set oLevel = ActiveDesignFile.Levels("SANTA ROSA")
Set oScanCriteria = New ElementScanCriteria
oScanCriteria.ExcludeAllLevels
oScanCriteria.IncludeLevel oLevel
Set ConjuntoElem = ActiveModelReference.Scan(oScanCriteria)
ConjuntoElem.Reset

Do While ConjuntoElem.MoveNext
Dim oElement As Element
Set oElement = ConjuntoElem.Current

If oElement.Type = msdElementTypeLine Then 'Si el elemento es LINE (TIPO 3)
Set elemLinea = oElement
dblLongitud = elemLinea.Length 'guardo la longitud en la vble.
MsgBox "Longitud: " & dblLongitud
End If


MsgBox "Color: " & oElement.Color
Loop
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Noemi



Registrado: 10 Abr 2015
Mensajes: 10
Ubicación: Alicante

MensajePublicado: Mar May 26, 2015 10:35 am    Título del mensaje: Longitud de una linea Responder citando

Hola Mediocad:

Muchas gracias por tu ayuda!!!!!, Laughing Laughing Laughing aunque no te lo creas ya lo estaba encarando como me has dicho, pero no me funcionaba porque lo que hacía era comprobar que el elemento sea una línea o una línea compleja en el mismo IF.
Ahora los he separado y me he dado cuenta de que lo que no funciona es cuando me encuentro con una línea compleja.
He definido una variable como MultiLineElement pero no admite el método Length. Como lo podría solucionar?

Otra vez, muchas gracias por tu grandiosa ayuda!

PD: He solicitado registrarme en la página para poder descargarme ejemplos y no dar tanto por saco. Lo he hecho hace tiempo pero no me llega la clave, será que funciona mal el correo de la página? Embarassed Embarassed
Volver arriba
Ver perfil del usuario Enviar mensaje privado
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Mar May 26, 2015 11:13 am    Título del mensaje: Complex Responder citando

Claro Noemi,

No todos los elementos son iguales ni se tratan de la misma forma. Yo iría analizando cada uno de ellos y tratarlos por separado.

Por ahora tenemos el tipo 3:

If oElement.Type = msdElementTypeLine Then......

Podrías tener en tu DGN:
    Tipo 4 Line String
    Tipo 6 Shape
    Tipo 12 Complex String
    Tipo 14 Complex Shape

En el caso de las Complex debes ir analizando elemento a elemento.

Dim elemComplxShape As ComplexShapeElement 'Para tipo 14
Dim LongTotalShape As Long

If oElement.Type = msdElementTypeComplexShape Then 'Si el elemento es COMPLEX SHAPE (TIPO 14)

Dim ConjuntoElemComplexShape As ElementEnumerator 'Grupo de elementos donde guardo los ele de la complex
Dim SubElemComplexShape As Element 'Recojo cada elemento de la complex

Set elemComplxShape = oElement
Set ConjuntoElemComplexShape = elemComplxShape.GetSubElements 'Me muevo por dentro de la Complex
Do While ConjuntoElemComplexShape.MoveNext
Set SubElemComplexShape = ConjuntoElemComplexShape.Current

dblLongitud = SubElemComplexShape.AsChainableElement.Length
LongTotalShape = LongTotalShape + dblLongitud
Loop
End If


Mira a ver si esto te vale. Para el tipo 12 sería igual. Respecto al registro envía privado para darte de alta. La cuenta funciona pero es que estoy muy liado y tengo solicitudes atrasadas.

Bye
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Noemi



Registrado: 10 Abr 2015
Mensajes: 10
Ubicación: Alicante

MensajePublicado: Mar May 26, 2015 11:55 am    Título del mensaje: Longitud de un recorrigo Responder citando

Eres un crack!!!!. Funciona perfectamente. MUCHAS GRACIAS!!! Laughing Laughing Wink
Lo he modificado solo para los tipos 4, 12 y 14. Pero ya iré agregando los que me falten.
Os envío el código terminado y funcionando por si a alguien le hiciera falta.

Dim ConjuntoElem As ElementEnumerator
Dim oScanCriteria As ElementScanCriteria
Dim oLevel As Level

Dim elemLinea As LineElement 'Para tipo 3
Dim elemComplxShape As ComplexShapeElement 'Para tipo 14
Dim elemComplxString As ComplexStringElement 'Para tipo 12

Dim Total As Double
Dim LongTotalLine As Double
Dim LongTotalShape As Double
Dim LongTotalLineComplx As Double

Set oLevel = ActiveDesignFile.Levels("SANTA ROSA LV zona 14")
Set oScanCriteria = New ElementScanCriteria
oScanCriteria.ExcludeAllLevels
oScanCriteria.IncludeLevel oLevel
Set ConjuntoElem = ActiveModelReference.Scan(oScanCriteria)
ConjuntoElem.Reset
Total = 0
LongTotalLine = 0
LongTotalShape = 0
LongTotalLineComplx = 0

Do While ConjuntoElem.MoveNext
Dim oelement As element
Set oelement = ConjuntoElem.Current
'si el elemento es LINE (TIPO 3)
If oelement.Type = msdElementTypeLine Then
Set elemLinea = oelement
LongTotalLine = elemLinea.Length
'Si el elemento es COMPLEX SHAPE (TIPO 14)
ElseIf oelement.Type = msdElementTypeComplexShape Then
Dim ConjuntoElemComplexShape As ElementEnumerator
Dim SubElemComplexShape As element

Set elemComplxShape = oelement
Set ConjuntoElemComplexShape = elemComplxShape.GetSubElements
Do While ConjuntoElemComplexShape.MoveNext
Set SubElemComplexShape = ConjuntoElemComplexShape.Current
LongTotalShape = LongTotalShape + SubElemComplexShape.AsChainableElement.Length
Loop
'Si el elemento es COMPLEX STRING (TIPO 12)
ElseIf oelement.Type = msdElementTypeComplexString Then
Dim ConjuntoElemComplexString As ElementEnumerator
Dim SubElemComplexString As element

Set elemComplxString = oelement
Set ConjuntoElemComplexString = elemComplxString.GetSubElements
Do While ConjuntoElemComplexString.MoveNext
Set SubElemComplexString = ConjuntoElemComplexString.Current
LongTotalLineComplx = LongTotalLineComplx + SubElemComplexString.AsChainableElement.Length
Loop
End If
Total = Total + LongTotalLine + LongTotalShape + LongTotalLineComplx
LongTotalLine = 0
LongTotalShape = 0
LongTotalLineComplx = 0
Loop
MsgBox "Longitud total del recorrido: " & Total

Muchas gracias por todo!!!!
Volver arriba
Ver perfil del usuario Enviar mensaje privado
mediocad
Gran Maestro
Gran Maestro


Registrado: 09 Jun 2005
Mensajes: 1509
Ubicación: Madrid

MensajePublicado: Mar May 26, 2015 12:00 pm    Título del mensaje: Lineas Responder citando

Pues me alegra que al final te haya salido bien.

¡¡¡ Que fácil cuando te ayudan ¿verdad? !!! Me debes unas cervezas. Cuando pase por Alicante te doy un toque.

Un saludo Muy Feliz Muy Feliz
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo Visitar sitio web del autor
Noemi



Registrado: 10 Abr 2015
Mensajes: 10
Ubicación: Alicante

MensajePublicado: Mar May 26, 2015 12:12 pm    Título del mensaje: Longitud de una linea Responder citando

Eso está hecho!!!
Cuando te pases por aquí me lo dices y lo celebramos!!! Mr. Green Mr. Green Mr. Green Laughing Laughing
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro www.mediocad.com -> MVBA Todas las horas están en GMT + 1 Hora
Página 1 de 1

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas


Powered by phpBB © 2001, 2005 phpBB Group