segmentacion de polilinea (pintura en vialidades)

Ver el tema anterior Ver el tema siguiente Ir abajo

segmentacion de polilinea (pintura en vialidades)

Mensaje por oonan el Sáb Jun 11, 2016 4:52 am

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!

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 : 3
Fecha de inscripción : 11/06/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por robierzo el Mar Jun 14, 2016 11:18 pm

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.
avatar
robierzo

Mensajes : 36
Fecha de inscripción : 17/03/2016
Localización : La Coruña

Ver perfil de usuario http://www.selmotopografia.es

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Miér Jun 15, 2016 1:01 am

70 Polyline flag (bit-coded); default is 0:
1 = Closed; 128 = Plinegen

Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Miér Jun 15, 2016 1:09 am

OONAN, por favor sube el dwg donde quieres aplicar el DWG

Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Miér Jun 15, 2016 5:35 am

Sin hacerle nada , funcionó . Ver adjunto


https://www.dropbox.com/s/wtobui50x6fz5q6/PARA%20RAYAR%20LINEAS%20-%20Standard.zip?dl=0

Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por robierzo el Miér Jun 15, 2016 3:51 pm

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.
avatar
robierzo

Mensajes : 36
Fecha de inscripción : 17/03/2016
Localización : La Coruña

Ver perfil de usuario http://www.selmotopografia.es

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Miér Jun 15, 2016 8:02 pm

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

Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Miér Jun 15, 2016 10:23 pm

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! ***|;






Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por eliasp el Jue Jun 16, 2016 12:16 am

Maestro... me da error... después que solicita el color

Saludos
[/img]

eliasp

Mensajes : 43
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Jue Jun 16, 2016 12:57 am

Como siempre , envía el DWG

Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por eliasp el Jue Jun 16, 2016 1:18 am

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

eliasp

Mensajes : 43
Fecha de inscripción : 17/03/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Jue Jun 16, 2016 1:36 am

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 .

Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Admin el Jue Jun 16, 2016 2:30 am

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! ***|;

Admin
Admin

Mensajes : 128
Fecha de inscripción : 16/03/2016
Edad : 68
Localización : CORDOBA ARGENTINA

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

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por oonan el Sáb Jun 18, 2016 8:16 pm

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!

oonan

Mensajes : 3
Fecha de inscripción : 11/06/2016

Ver perfil de usuario

Volver arriba Ir abajo

Re: segmentacion de polilinea (pintura en vialidades)

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba

- Temas similares

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