Distancia acumulada a un corte de linea

Ir abajo

Distancia acumulada a un corte de linea

Mensaje por BPP el Lun Mar 19, 2018 5:36 am

Saludos a todos.
El problema que tengo es el siguiente: Necesito encontrar las coordenadas y la distancia acumulada a la que están ubicadas sobre una línea principal (polilinea) varios cruces (polilineas) dibujados en diferentes capas, de manera que pueda obtener una tabla en excel como la que se muestra en la imagen.



La distancia acumulada debe calcularse partiendo de ambos puntos, tomando el ejemplo de la imagen, si se empieza a contabilizar desde el punto “A”, la distancia hasta el cruce 3 seria 180, pero si se empieza del punto B, su distancia seria 103 tal como se muestra en las columnas 5 y 6 de la tabla que se desea obtener.

Espero que puedan ayudarme. Muchas gracias de antemano.

PD. Adjunto un archivo como ejemplo que contiene la linea principal y una infinidad de cruces de las que necesito generar la tabla.
ARCHIVO EJEMPLO

BPP

Mensajes : 12
Fecha de inscripción : 27/11/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por bernie67 el Mar Mar 20, 2018 12:29 am

BPP cordial saludo. En el foro de Hispacad habia un colaborador que manejaba esos temas, Dancad, no se si logres contactarlo de alguna manera. Y si no estoy mal el Maestro Dominguez también
Bernardo Corradine M
avatar
bernie67

Mensajes : 68
Fecha de inscripción : 22/03/2016
Edad : 51
Localización : Bogota DC-Colombia

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por Marco Jacinto el Mar Mar 20, 2018 5:37 pm

No es tan dificil, con las funciones vlax-curve podria realizarlas con muy poco código.

Marco Jacinto

Mensajes : 53
Fecha de inscripción : 12/08/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por BPP el Mar Mar 20, 2018 7:03 pm

Estimado Marco, te agradecería mucho si pudieras ayudarme.

BPP

Mensajes : 12
Fecha de inscripción : 27/11/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por Marco Jacinto el Mar Mar 20, 2018 8:00 pm

¿Que tienes de codigo? ¿Sabes lisp?

Marco Jacinto

Mensajes : 53
Fecha de inscripción : 12/08/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por BPP el Miér Mar 21, 2018 7:26 pm

No tengo nada de código y apenas voy entendiendo lo mas básico de lisp.

BPP

Mensajes : 12
Fecha de inscripción : 27/11/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por Marco Jacinto el Miér Mar 21, 2018 7:54 pm

¿Que tan básico?

Lo que pides en pseudocodigo es mas o menos así:

Código:

Seleccionar polilinea con entsel
convertir a objeto vlax
Obtener los puntos inicial y final de la polilinea
Seleccionar la primer linea verde
Convertir la linea verde en objeto vla
Obtener la interseccion con vla-intersectwith
Obtener la distancia de los puntos inicial y final a la interseccion a la linea verde.
Hacer la tabla (en el foro hay varios ejemplos)

Marco Jacinto

Mensajes : 53
Fecha de inscripción : 12/08/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por BPP el Sáb Mar 24, 2018 7:37 pm

¿Que tan básico?
Tan básico como crear algunas lineas y polígonos a lo mucho.

Seguiré intentando con los ejemplos del foro y con el pseudocodigo que indicas, pero si alguien podría ayudarme con el código seria de gran ayuda.

Gracias por la ayuda Marco

BPP

Mensajes : 12
Fecha de inscripción : 27/11/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por Admin el Lun Mar 26, 2018 2:05 am

Empieza con algo, esto es una escuela, los alumnos van haciendo y otros alumnos le ayudan.

Admin
Admin

Mensajes : 194
Fecha de inscripción : 16/03/2016
Edad : 70
Localización : CORDOBA ARGENTINA

Ver perfil de usuario http://acadhispano.foroargentina.net

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por BPP el Mar Abr 03, 2018 11:54 pm

Saludos a todos

Buscando en internet encontré la siguiente rutina:
Código:
(DEFUN C:VUELA ( / N SS L O I C LISTA LI e n p1 w)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "_UNITS" "2" "4" "1" "0" "0" "N")
(command "_layer" "m" "MARCA" "C" "5" "" "")
(command "_layer" "m" "CODIGO" "C" "1" "" "")
(command "_layer" "m" "TABLA" "C" "3" "" "")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(graphscr)
(setvar "cmdecho" 0)
(setvar "dimzin" 1)
(setq osm (getvar "osmode"))
(setvar "osmode" 9)
(setq angbase (getvar "angbase"))
(setvar "angbase" (* pi 0.5))
(setq angdir (getvar "angdir"))
(setvar "angdir" 1)
(setvar "orthomode" 0)
(setvar "clayer" "0") ;capa cero
(command "color" "bylayer")
(command "OSNAP" "OFF")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (= ESC nil)
(setq ESC 1)
)
(setq hn (rtos esc 2 0))
(setq rotu (strcat "Escala 1:" hn " "))
(setq hn (getreal rotu))
(if (/= hn nil)
(setq ESC hn)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq MSC (/ 1 ESC))
(setq MSC1 (/ ESC 1))
(setq MSC2 (/ 1 ESC))
(setq HT (/ 2.0 MSC))
(setq FSC2 (* 20.0 MSC1))
(setq FSC3 (* 45.0 MSC1))
(setq FSC4 (* 70.0 MSC1))
(setq XD (* (/ ESC 1) 1.5))
(setq tp (/ 1.0 MSC2))
(setq xd (* (/ esc 1) 1.5))
(command "OSNAP" "OFF")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq s1 (* msc1 10))
(setq s2 (* msc1 15))
(setq s3 (* msc1 35))
(setq s4 (* msc1 65))
(setq s5 (* msc1 40))

(setq d1 (* msc1 5))
(setq d2 (* msc1 3.5))
(setq d3 (* msc1 8.5))
(setq cont 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(SETQ N -1)
(REPEAT (SSLENGTH (SETQ SS (SSGET)))(SETQ L (CONS (VLAX-ENAME->VLA-OBJECT (SSNAME SS (SETQ N (1+ N)))) L)))
(WHILE L
(SETQ O (CAR L)
L (CDR L))
(FOREACH C L
(SETQ I (VLAX-VARIANT-VALUE(VLAX-INVOKE-METHOD O 'INTERSECTWITH C ACEXTENDNONE))
LI (IF (NOT (VL-CATCH-ALL-ERROR-P (VL-CATCH-ALL-APPLY 'VLAX-SAFEARRAY->LIST
(LIST I))))(VLAX-SAFEARRAY->LIST I)))
(WHILE LI
(SETQ LISTA (CONS (LIST (CAR LI)(CADR LI)(CADDR LI)) LISTA)
LI (CDDDR LI))
)
)
)
(SETQ L NIL)
(FOREACH C LISTA (IF (NOT (MEMBER C L))(SETQ L (CONS C L))))
(setq vert 1)

(SETQ L (REVERSE L))

(FOREACH C L
(setq cx (nth 0 C))
(setq cy (nth 1 C))
(setq p1 (list cx cy))
(setq ss (ssget "_c" (polar p1(* 1.25 pi)(/ tp 2))(polar p1(* 0.25 pi)(/ tp 2)) )
ss (vl-remove-if '(lambda(a)(/=(type a) 'ENAME))(apply 'append (ssnamex ss)))
)
(setvar "clayer" "MARCA")
(command "_point" p1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(mapcar '(lambda(a) (command "_trim" (entlast) "" (list a p1) "" )) ss)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(SETQ X1 (NTH 0 C))
(SETQ Y1 (NTH 1 C))
(setq X1 (+ X1 xd))
(setq Pt (list X1 Y1))
(setvar "clayer" "CODIGO")
(command "text" "J" "M" Pt ht "90" vert)
(setq vert (+ vert 1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;(ENTMAKE (LIST '(0 . "POINT")'(100 . "AcDbEntity")'(100 . "AcDbPoint")(CONS 10 C)))
;(entmake (list '(0 . "MTEXT")'(100 . "AcDbEntity")'(100 . "AcDbMText") (CONS 10 C)
;(cons 1 (strcat "X=" (rtos (car C) 2 2) "\nY=" (rtos (cadr C) 2 2))) '(71 . 4)))
)
(setvar "osmode" 45)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setvar "clayer" "TABLA")
(setq t0 (getpoint "\nDonde quiere la tabla :"))
(setq xt (nth 0 t0))
(setq yt (nth 1 t0))
(setq cxt1 (+ xt s3))
(setq cyt1 (- yt d2))
(setq ptx1 (list cxt1 cyt1))

(setq cxt2 (+ xt s1))
(setq cyt2 (- yt d3))
(setq ptx2 (list cxt2 cyt2))

(setq cxt3 (+ xt s2))
(setq ptx3 (list cxt3 cyt2))

(setq cxt4 (+ xt s5))
(setq ptx4 (list cxt4 cyt2))

(setq cxt5 (+ xt s4))
(setq ptx5 (list cxt5 cyt2))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(command "OSNAP" "OFF")
(command "color" "BYLAYER")

(command "text" "j" "c" ptx1 HT "90" " CUADRO DE COORDENADAS ")
(command "text" "j" "c" ptx2 HT "90" "PUNTO")
(command "text" "j" "r" ptx4 HT "90" "COORD X")
(command "text" "j" "r" ptx5 HT "90" "COORD Y")
(command "color" "BYLAYER")
(setq cyt2 (- cyt2 d1))
(setq vert 1)
(command "color" "BYLAYER")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(REPEAT (length L)
(setq X (CAR (NTH cont L))) ;coordenada X
(setq Y (CADR (NTH cont L))) ;coordenada Y

(setq ptx2 (list cxt2 cyt2))
(setq ptx4 (list cxt4 cyt2))
(setq ptx5 (list cxt5 cyt2))
(command "text" "j" "c" ptx2 HT "90" (rtos vert 2 0))
(command "text" "j" "r" ptx4 HT "90" (rtos X 2 3))
(command "text" "j" "r" ptx5 HT "90" (rtos Y 2 3))
(setq cyt2 (- cyt2 d1))
(setq cont (+ cont 1))
(setq vert (+ vert 1))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq vfsc (/ esc 1))
(setq vmsc (/ 1 esc))
(setq vht (/ 2 vmsc))
(setq vs1 (* vfsc 70))
(setq vs2 (* vfsc 20))
(setq vs3 (* vfsc 45))
(setq vd1 (* vfsc 5))

(setq vcont 0)

(setq vp0 t0)
(setq vcx (nth 0 vp0))
(setq vcy (nth 1 vp0))

(command "color" "1")

(setq vp1 (polar vp0 0 vs1))
(command "line" vp0 vp1 "")
(setq vcy (- vcy vd1))
(setq vp2 (list vcx vcy))
(setq vp3 (polar vp2 0 vs1))
(command "line" vp2 vp3 "")
(setq vcy (- vcy vd1))
(setq vp4 (list vcx vcy))
(setq vp5 (polar vp4 0 vs1))
(command "line" vp4 vp5 "")
(setq vp6 (polar vp2 0 vs2))
(setq vp7 (polar vp2 0 vs3))
(command "color" "5")

(while (< vcont vert)
(setq vcy (- vcy vd1))
(setq vp4 (list vcx vcy))
(setq vp5 (polar vp4 0 vs1))
(command "line" vp4 vp5 "")
(setq vcont (+ vcont 1))
)
(setq vp8 (polar vp4 0 vs2))
(setq vp9 (polar vp4 0 vs3))

(command "color" "5")
(command "line" vp0 vp4 "")
(command "line" vp1 vp5 "")
(command "line" vp6 vp8 "")
(command "line" vp7 vp9 "")
(command "color" "5")
(setvar "osmode" 45)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(PRINC)
)

Al utilizarla hace "casi" todo lo que requiero a excepción de que no calcula la longitud. Uno de los errores que tiene es que considera las polilineas que se tocan en uno de sus vértices como si fuera una intersección y se cuelga en tramos largos con varias intersecciones.

Como puedo modificar esta rutina para que haga lo que requiero sin colgarse y sobretodo arreglar el error de considerar a las lineas que se tocan como intersección?.

Una vez mas muchas gracias por su ayuda.

BPP

Mensajes : 12
Fecha de inscripción : 27/11/2017

Ver perfil de usuario

Volver arriba Ir abajo

Re: Distancia acumulada a un corte de linea

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Volver arriba

- Temas similares

 
Permisos de este foro:
No puedes responder a temas en este foro.