segmentacion de polilinea (pintura en vialidades)
4 participantes
Página 1 de 1.
segmentacion de polilinea (pintura en vialidades)
Hace mucho que no entraba a Hispacad, me aparte del camino de la programacion por bastante tiempo. una gran perdida lo de Hispacad.
necesito de su ayuda, hace mucho YARIK RODRIGUEZ (2011) coloco la siguiente rutina que prácticamente fracciona una polilinea en tramos con polilineas de menor longitud y espacios; este es muy util para cuando dibujamos pintura en vialidades, siempre lo he usado para carreteras donde la longitud de pintura es de 5.0 m y espacios de 10.0 m, pero ahora estoy dibujando pintura para vialidades urbanas donde las longitudes son menores; 2.50 de pintura y 5.0 de espacio. El inconveniente que para esto ultimo no me funciona correctamente al indicar que necesito tramos con pintura de 2.50 me dibuja pero con longitud de 2.0.
por favor ayúdenme a resolver esto, que funciones para cualquier valor indicado sea entero o un numero fraccionario.
Gracias!
necesito de su ayuda, hace mucho YARIK RODRIGUEZ (2011) coloco la siguiente rutina que prácticamente fracciona una polilinea en tramos con polilineas de menor longitud y espacios; este es muy util para cuando dibujamos pintura en vialidades, siempre lo he usado para carreteras donde la longitud de pintura es de 5.0 m y espacios de 10.0 m, pero ahora estoy dibujando pintura para vialidades urbanas donde las longitudes son menores; 2.50 de pintura y 5.0 de espacio. El inconveniente que para esto ultimo no me funciona correctamente al indicar que necesito tramos con pintura de 2.50 me dibuja pero con longitud de 2.0.
por favor ayúdenme a resolver esto, que funciones para cualquier valor indicado sea entero o un numero fraccionario.
Gracias!
- Código:
;Yarik rodriguez 2011
(defun c:esc_line (/ dist long_tot long # vla-poly list_poly 2nd)
(vl-load-com)
(prompt "\nSelecciona entidad")
(setq ename (car (entsel))
long (getreal "\nLongitud de segmento (Pintura) ")
esc (getreal "\nSeparacion (espacio)")
Widhtlong (getreal "\nGrosor de linea ")
LineColoresc (acad_colordlg 7)
vla-poly (vlax-ename->vla-object ename)
dist 0
# 0
long_tot (vlax-curve-getdistatpoint
vla-poly
(vlax-curve-getendpoint vla-poly)
)
)
(while (<= dist long_tot)
(setq list_poly nil)
(while (<= # long)
(setq 2nd (vlax-curve-getpointatdist vla-poly dist)
)
(if (/= 2nd nil)
(setq list_poly (cons 2nd list_poly))
)
(setq # (1+ #)
dist (1+ dist)
)
)
(poly list_poly 0)
(setq dist (+ dist (- esc 1))
# 0
)
)
; (vla-delete vla-poly)
)
(defun Poly (lst cls) ;;;Que se refiere con CLS?
(entmakex
(append (list (cons 0 "LWPOLYLINE")
(cons 100 "AcDbEntity")
(cons 100 "AcDbPolyline")
(cons 90 (length lst))
(cons 70 cls)
(cons 43 Widhtlong) ;;;0.10 Grosor por default
(cons 62 LineColoresc) ;;;Que color?
)
(mapcar (function (lambda (p) (cons 10 p))) lst)
)
)
)
oonan- Mensajes : 19
Fecha de inscripción : 11/06/2016
Re: segmentacion de polilinea (pintura en vialidades)
La rutina sólo sirve para tramos de longitud igual a un número entero. Hay que modificar un poco el bucle que controla eso. Yo ahora no tengo tiempo. En cuanto me libere un poco lo puedo mirar.
Pero se me ocurre que sería más fácil crear un tipo de línea con esos parámetros y utilizarlo con la línea que quieres cambiar. Así tendrías una sola entidad y no un ciento.
Yo personalmente no sé crear tipos de línea. Pero creo que la expres trae una aplicación para eso. Échale un ojo.
Pero se me ocurre que sería más fácil crear un tipo de línea con esos parámetros y utilizarlo con la línea que quieres cambiar. Así tendrías una sola entidad y no un ciento.
Yo personalmente no sé crear tipos de línea. Pero creo que la expres trae una aplicación para eso. Échale un ojo.
Re: segmentacion de polilinea (pintura en vialidades)
70 Polyline flag (bit-coded); default is 0:
1 = Closed; 128 = Plinegen
1 = Closed; 128 = Plinegen
Re: segmentacion de polilinea (pintura en vialidades)
OONAN, por favor sube el dwg donde quieres aplicar el DWG
Re: segmentacion de polilinea (pintura en vialidades)
Sin hacerle nada , funcionó . Ver adjunto
https://www.dropbox.com/s/wtobui50x6fz5q6/PARA%20RAYAR%20LINEAS%20-%20Standard.zip?dl=0
https://www.dropbox.com/s/wtobui50x6fz5q6/PARA%20RAYAR%20LINEAS%20-%20Standard.zip?dl=0
Re: segmentacion de polilinea (pintura en vialidades)
Gabriel, funciona para tramos de pintura cuya longitud es un valor entero, pero para longitudes con valor de número real positivo no funciona. El ejemplo que pide oonan es para tramos de longitud = 2.50. El que tú has puesto es de 2.0.
Re: segmentacion de polilinea (pintura en vialidades)
Tienes razón , Disculpa no verifiqué la long del tramo pintado , que lo establecí en 2,5 , y sale de 2 , la de 5 sale bien . Voy a revisar
Re: segmentacion de polilinea (pintura en vialidades)
Va nueva versión , espero que funcione
- Código:
(DEFUN &-2DPOLY/LISTXY (LISTA) ;_01
;;*//*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
(DEFUN DT:LIST-FLATTEN (LISTE /)
(COND
((NULL LISTE) NIL)
((ATOM LISTE) (LIST LISTE))
(1
(APPEND (DT:LIST-FLATTEN (CAR LISTE))
(DT:LIST-FLATTEN (CDR LISTE))))
)
) ;_ defun DT:LIST-FLATTEN
(DEFUN I:POINTS (PTLIST)
(VL-LOAD-COM)
(VLAX-SAFEARRAY-FILL
(VLAX-MAKE-SAFEARRAY
VLAX-VBDOUBLE
(CONS 0 (1- (LENGTH PTLIST)))
)
PTLIST
)
) ;_end defun i:Points
;;/------------------------------------------------------------------
(SETQ FLAT-LIST (DT:LIST-FLATTEN LISTA))
(SETQ SAF (I:POINTS FLAT-LIST))
(VLA-ADDLIGHTWEIGHTPOLYLINE MODEL SAF)
) ;_ &-2dpoly
;;************************************************************
;Yarik rodriguez 2011
(DEFUN C:ESC-LINE (/
# CANT-ENT CANT-PINT DIST ENAME ESC LINECOLORESC LONG LONG-TOT PASO PINTURA-LIST PINTURA-OBJ PT1 PT2 PT3 VLA-POLY WIDHTLONG
)
(SETQ LONG (GETREAL "\nLongitud de segmento (Pintura) "))
(SETQ ESC (GETREAL "\nSeparacion (espacio)"))
(SETQ WIDHTLONG (GETREAL "\nGrosor de linea "))
;;;(SETQ LONG 2.5)
;;;(SETQ ESC 5.0)
;;;(SETQ WIDHTLONG 0.10)
(VL-LOAD-COM)
(PROMPT "\nSelecciona entidad")
(SETQ ENAME (CAR (ENTSEL)))
(SETQ LINECOLORESC (ACAD_COLORDLG 7))
(SETQ VLA-POLY (VLAX-ENAME->VLA-OBJECT ENAME))
(SETQ DIST 0)
(SETQ # 0)
(SETQ LONG-TOT (VLAX-CURVE-GETDISTATPOINT VLA-POLY (VLAX-CURVE-GETENDPOINT VLA-POLY)))
(setq paso (+ long esc))
(setq cant-pint (/ LONG-TOT paso))
(setq cant-ent (fix cant-pint))
(repeat cant-ent
(setq pt1 (REVERSE (CDR (REVERSE (VLAX-CURVE-GETPOINTATDIST VLA-POLY dist)))))
(setq pt2 (REVERSE (CDR (REVERSE (VLAX-CURVE-GETPOINTATDIST VLA-POLY (+ dist (/ long 2.0)))))))
(setq pt3 (REVERSE (CDR (REVERSE (VLAX-CURVE-GETPOINTATDIST VLA-POLY (+ dist (/ long 1.0)))))))
(setq pintura-list (list pt1 pt2 pt3))
(setq pintura-obj ( &-2DPOLY/LISTXY pintura-list))
(vla-put-color pintura-obj LINECOLORESC)
(vla-put-ConstantWidth pintura-obj WIDHTLONG)
(setq dist ( + dist paso))
)
;;; (WHILE (<= DIST LONG_TOT)
;;; (SETQ LIST_POLY NIL)
;;; (WHILE (<= # LONG)
;;; (SETQ 2ND (VLAX-CURVE-GETPOINTATDIST VLA-POLY DIST)
;;; )
;;; (IF (/= 2ND NIL)
;;; (SETQ LIST_POLY (CONS 2ND LIST_POLY))
;;; )
;;;
;;; (SETQ # (1+ #)
;;; DIST (1+ DIST)
;;; )
;;; )
;;;
;;; (POLY LIST_POLY 0)
;;; (SETQ DIST (+ DIST (- ESC 1))
;;; # 0
;;; )
;;; );'_ end while
(vla-delete vla-poly)
); end defun
;;;(defun Poly (lst cls) ;;;Que se refiere con CLS?
;;; (entmakex
;;; (append (list (cons 0 "LWPOLYLINE")
;;; (cons 100 "AcDbEntity")
;;; (cons 100 "AcDbPolyline")
;;; (cons 90 (length lst))
;;; (cons 70 cls)
;;; (cons 43 Widhtlong) ;;;0.10 Grosor por default
;;; (cons 62 LineColoresc) ;;;Que color?
;;; )
;;; (mapcar (function (lambda (p) (cons 10 p))) lst)
;;; )
;;; )
;;;)
;; oonan
;|«Visual LISP© Format Options»
(180 2 1 0 nil "end of " 100 20 2 2 nil nil T nil T)
;*** DO NOT add text below the comment! ***|;
Re: segmentacion de polilinea (pintura en vialidades)
Maestro... me da error... después que solicita el color
Saludos
[/img]
Saludos
[/img]
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: segmentacion de polilinea (pintura en vialidades)
https://www.dropbox.com/s/eyewjsmd7ogy0em/Tramo%20de%20Prueba.dwg?dl=0
Listo maestro. Son las líneas color cian las que hay que segmentar de 2.5 lleno por 5 vacío.
Saludos y gracias
Listo maestro. Son las líneas color cian las que hay que segmentar de 2.5 lleno por 5 vacío.
Saludos y gracias
eliasp- Mensajes : 195
Fecha de inscripción : 17/03/2016
Re: segmentacion de polilinea (pintura en vialidades)
Debes estar picando en una entidad que no se puede considerar una polylinea . Yo le apliqué el LAYISO , para que queden tan solo la capa donde esta la poly .
Re: segmentacion de polilinea (pintura en vialidades)
Va con agregado ya que no se definía el objeto MODEL
- Código:
(DEFUN &-2DPOLY/LISTXY (LISTA) ;_01
;;*//*/*/*/*/*/*/*/*/*/*/*/*/**/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
(DEFUN DT:LIST-FLATTEN (LISTE /)
(COND
((NULL LISTE) NIL)
((ATOM LISTE) (LIST LISTE))
(1
(APPEND (DT:LIST-FLATTEN (CAR LISTE))
(DT:LIST-FLATTEN (CDR LISTE))))
)
) ;_ defun DT:LIST-FLATTEN
(DEFUN I:POINTS (PTLIST)
(VL-LOAD-COM)
(VLAX-SAFEARRAY-FILL
(VLAX-MAKE-SAFEARRAY
VLAX-VBDOUBLE
(CONS 0 (1- (LENGTH PTLIST)))
)
PTLIST
)
) ;_end defun i:Points
;;/------------------------------------------------------------------
(SETQ FLAT-LIST (DT:LIST-FLATTEN LISTA))
(SETQ SAF (I:POINTS FLAT-LIST))
(VLA-ADDLIGHTWEIGHTPOLYLINE MODEL SAF)
) ;_ &-2dpoly
;;************************************************************
;Yarik rodriguez 2011
(DEFUN C:ESC-LINE (/
# CANT-ENT CANT-PINT DIST ENAME ESC LINECOLORESC LONG LONG-TOT PASO PINTURA-LIST PINTURA-OBJ PT1 PT2 PT3 VLA-POLY WIDHTLONG
)
(VL-LOAD-COM)
(SETQ ACAD-OBJ (VLAX-GET-ACAD-OBJECT)) ;_ el programa ACAD
(SETQ ADOC (VLA-GET-ACTIVEDOCUMENT ACAD-OBJ)) ;_ el DWG que esta abierto-
(SETQ MODEL (VLA-GET-MODELSPACE ADOC))
(SETQ LONG (GETREAL "\nLongitud de segmento (Pintura) "))
(SETQ ESC (GETREAL "\nSeparacion (espacio)"))
(SETQ WIDHTLONG (GETREAL "\nGrosor de linea "))
;;;(SETQ LONG 2.5)
;;;(SETQ ESC 5.0)
;;;(SETQ WIDHTLONG 0.10)
(VL-LOAD-COM)
(PROMPT "\nSelecciona entidad")
(SETQ ENAME (CAR (ENTSEL)))
(SETQ LINECOLORESC (ACAD_COLORDLG 7))
(SETQ VLA-POLY (VLAX-ENAME->VLA-OBJECT ENAME))
(SETQ DIST 0)
(SETQ # 0)
(SETQ LONG-TOT (VLAX-CURVE-GETDISTATPOINT VLA-POLY (VLAX-CURVE-GETENDPOINT VLA-POLY)))
(setq paso (+ long esc))
(setq cant-pint (/ LONG-TOT paso))
(setq cant-ent (fix cant-pint))
(repeat cant-ent
(setq pt1 (REVERSE (CDR (REVERSE (VLAX-CURVE-GETPOINTATDIST VLA-POLY dist)))))
(setq pt2 (REVERSE (CDR (REVERSE (VLAX-CURVE-GETPOINTATDIST VLA-POLY (+ dist (/ long 2.0)))))))
(setq pt3 (REVERSE (CDR (REVERSE (VLAX-CURVE-GETPOINTATDIST VLA-POLY (+ dist (/ long 1.0)))))))
(setq pintura-list (list pt1 pt2 pt3))
(setq pintura-obj ( &-2DPOLY/LISTXY pintura-list))
(vla-put-color pintura-obj LINECOLORESC)
(vla-put-ConstantWidth pintura-obj WIDHTLONG)
(setq dist ( + dist paso))
)
;;; (WHILE (<= DIST LONG_TOT)
;;; (SETQ LIST_POLY NIL)
;;; (WHILE (<= # LONG)
;;; (SETQ 2ND (VLAX-CURVE-GETPOINTATDIST VLA-POLY DIST)
;;; )
;;; (IF (/= 2ND NIL)
;;; (SETQ LIST_POLY (CONS 2ND LIST_POLY))
;;; )
;;;
;;; (SETQ # (1+ #)
;;; DIST (1+ DIST)
;;; )
;;; )
;;;
;;; (POLY LIST_POLY 0)
;;; (SETQ DIST (+ DIST (- ESC 1))
;;; # 0
;;; )
;;; );'_ end while
(vla-delete vla-poly)
); end defun
;;;(defun Poly (lst cls) ;;;Que se refiere con CLS?
;;; (entmakex
;;; (append (list (cons 0 "LWPOLYLINE")
;;; (cons 100 "AcDbEntity")
;;; (cons 100 "AcDbPolyline")
;;; (cons 90 (length lst))
;;; (cons 70 cls)
;;; (cons 43 Widhtlong) ;;;0.10 Grosor por default
;;; (cons 62 LineColoresc) ;;;Que color?
;;; )
;;; (mapcar (function (lambda (p) (cons 10 p))) lst)
;;; )
;;; )
;;;)
;; oonan
;|«Visual LISP© Format Options»
(180 2 1 0 nil "end of " 100 20 2 2 nil nil T nil T)
;*** DO NOT add text below the comment! ***|;
Re: segmentacion de polilinea (pintura en vialidades)
Maestro Gabo y elias
Disculpen por no haberle dado el seguimiento al tema, pero por restricciones de Internet en donde trabajo no puedo entrar a la pagina y apenas hoy tengo la oportunidad de entrar al foro.
De verdad les agradezco mucho su tiempo y esfuerzo. Ya probé la rutina y funciona muy bien.
Gracias!
Disculpen por no haberle dado el seguimiento al tema, pero por restricciones de Internet en donde trabajo no puedo entrar a la pagina y apenas hoy tengo la oportunidad de entrar al foro.
De verdad les agradezco mucho su tiempo y esfuerzo. Ya probé la rutina y funciona muy bien.
Gracias!
oonan- Mensajes : 19
Fecha de inscripción : 11/06/2016
Temas similares
» Grado de Curvatura (Vialidades)
» Polilinea 3D a Polilinea
» Longitud de Polilinea
» Acotar Polilínea
» Texto a Polilínea o curvas o lo que sea.
» Polilinea 3D a Polilinea
» Longitud de Polilinea
» Acotar Polilínea
» Texto a Polilínea o curvas o lo que sea.
Página 1 de 1.
Permisos de este foro:
No puedes responder a temas en este foro.
|
|