3.2.1. Conversión PolyLINE-SpLINE


Para utilizar el código que sigue, selecciónelo en su browser,utilizando el ratón, desde la línea que dice "-INICIODEL PROGRAMA-" hasta la línea "-FIN DELPROGRAMA-", copie el texto seleccionado (Ctrl+C), abra un editor(Notepad o Visual LISP) y péguelo allí (Ctrl+V). Guarde elfichero así creado con el nombre PL2SP.LSP en un directorio que figureen la variable de entorno ACAD (por ejemplo, el subdirectorio SUPPORT) . Paracargarlo teclee (load "PL2SP")

Reinaldo Togores. Profesor Asociado.
Departamento de Ingeniería Geográfica y Técnicas deExpresión Gráfica
Universidad de Cantabria.Marzo de 1997.

Se autoriza la utilización del código de estos programas,mencionando siempre su origen.

Una versión de este programa, capaz de procesar LWPOLYINES ha sidoelaborado por Oscar Rodríguez de Sevilla, España. Para acceder almismo, pulse AQUÍ.


;;--INICIO DEL PROGRAMA/PROGRAM BEGINS HERE--------------
;:*******************************************************
;;Sustitución PLINE->SPLINE
;;Lee los vértices originales de una polilínea y crea a
;;partir de ellos una SPLINE. Borra la pollínea original.
;;(C) Reinaldo Togores, Santander, 1997
;;-------------------------------------------------------
;;Nota: Este programa sólo funcionará correctamente si el
;;Sistema de Coordenadas de Objeto de la polilínea a convertir
;;coincide con el Sistema de Coordenadas Universal, es decir
;;que la polilínea esté contenida en un plano paralelo
;;al plano XY Universal.
;;********************************************************
;;Rutina de selección de objetos:
;;Del conjunto de selección original, crea un nuevo
;;conjunto de selección que incluya sólo polilíneas:
(defun pl_sel ( / orig_selset pl_selset count)
(prompt "\nSeleccione Polilíneas/Select Polylines: ")
(setq
orig_selset (ssget)
pl_selset (ssadd)
count -1
)
(repeat (sslength orig_selset)
(setq count (1+ count))
(if (= (cdr (assoc 0 (entget (ssname orig_selset count)))) "POLYLINE")
(ssadd (ssname orig_selset count) pl_selset)
)
)
pl_selset
)
;;Rutina de lectura de los vértices de la polilínea
;;crea una lista de entidad SPLINEa partir de los
;;vértices originales de la polilínea, (señalados por
;;el código 70=0 ó 16) cambiando el código 10 de la
;;entidad POLYLINE por el código 11 de la entidad
;;SPLINE.
;;Sólo se incluyen en la nueva lista los códigos
;;imprescindibles para la creación de la SPLINE.
;;Cada lista creada se pasa a entmake
;;para crear la nueva SPLINE. Después se borra la
;;polilínea original
(defun vertex ( sset / count ent_sup act_ent spl_list)
(setq count 0)
(repeat (sslength sset)
(setq
ent_sup (ssname sset count)
act_ent (entnext ent_sup)
count (1+ count)
spl_list nil
)
(while (/= (cdr (assoc 0 (entget act_ent ))) "SEQEND")
(if
            (or
               (= (cdr (assoc 70 (entget act_ent))) 0)
(= (cdr (assoc 70 (entget act_ent))) 16)
            )
(setq
               spl_list
              (cons (cons 11 (cdr (assoc 10 (entget act_ent)))) spl_list)
            )
)
(setq
act_ent (entnext act_ent)
)
)
(setq spl_list (reverse spl_list))
      ;;Consrucción de la nueva lista de entidad
(foreach
cod
(list
            (assoc 8 (entget ent_sup))
(cons 74 (length spl_list))
(cons 71 3)
(cons 100 "AcDbSpline")
(cons 100 "AcDbEntity")
(cons 0 "SPLINE")
)
(setq spl_list (cons cod spl_list))
)
      ;;Hacer la SPLINE
(entmake spl_list)
       ;;Borrar la POLILÍNEA
(entdel ent_sup)
)
)
;;Función Principal/Command line function
(defun c:pl2sp ( / oce)
(setq oce (getvar "cmdecho"))
(setvar "cmdecho" 0)
(vertex (pl_sel))
(redraw)
(setvar "cmdecho" oce)
(princ)
)
;;----------------FIN DEL PROGRAMA-----------------------