Cómo te habrás podido dar cuenta, cada función que vas aprendiendo te permite dar un paso más para el desarrollo de una rutina más potente.

En este último paso de esta guía, comprenderás la utilidad de acceder y manipular las propiedades de una entidad mediante el acceso a su base de datos, para ello vamos a usar una función denominada ENTMOD, esta función por si sola, poco a nada podría hacer si no tuviera antes o después la acción de otras funciones.

Para darnos cuenta del trabajo en conjunto de todas ellas, vamos a escribir un pequeño ejemplo que como siempre explicaremos después línea por línea. ¿Concentrado?, bien, empezamos. Copia el siguiente código en basedatos.lsp, y carga nuevamente el archivo en tu programa de CAD.

(defun c:copiartexto()
	(while (setq Entidad (entsel "\nSeleccione el texto origen:"))
 
		(setq NomEntidad (car Entidad))
		(setq ContenidoTexto (cdr (assoc 1 (entget NomEntidad))))
 
		(setq EntidadReemp (entsel "\nSeleccione el texto a reemplazar: "))
		(setq NomEntidadReemp (car EntidadReemp))
		(setq BaseNomEntidadReemp (entget NomEntidadReemp))		
		(setq ListEntNuevaTexto (subst (cons 1 ContenidoTexto)(assoc 1 BaseNomEntidadReemp) BaseNomEntidadReemp))
		(entmod ListEntNuevaTexto)
	)
	(princ)
)

¿Qué te pareció lo que hizo este comando llamado “copiartexto”?, en este ejemplo hemos usado todas las funciones que hemos visto en este ultimo capítulo. Como te habrás dado cuenta cada función antecede a otra y le va preparando el terreno para actuar, cada función obtiene un valor que será aprovechado por la siguiente función.

Es por ello que este comando lo primero que hace es solicitar la designación de un texto para “obtener” su valor de contenido, una vez que lo tiene, lo debe de “copiar” a otro para reemplazarlo, este “otro” texto es el segundo texto que se debe de seleccionar.

A continuación la explicación de este ejemplo.

  1. (setq Entidad (entsel "\nSeleccione el texto origen:"))

Como lo hemos explicado anteriormente, primero necesitamos seleccionar la entidad texto del cual vamos a obtener la propiedad contenido (código 1). Con entsel obtenemos la entidad y la almacenamos en la variable Entidad.

  1. (setq NomEntidad (car Entidad))
  1. (setq ContenidoTexto (cdr (assoc 1 (entget NomEntidad))))

En la línea 2, con la función car obtenemos el nombre del objeto seleccionado y lo almacenamos en la variable NomEntidad posteriormente con la línea 3 empleamos las funciones necesarias para obtener del texto seleccionado su contenido y es en este orden:

entget obtiene la lista de la base de datos, assoc ubica la sublista con el código 1, cdr se encarga de obtener el segundo elemento de la sublista y se establece este valor en la variable ContenidoTexto.

  1. (setq EntidadReemp (entsel "\nSeleccione el texto a reemplazar: "))
  1. (setq NomEntidadReemp (car EntidadReemp))

En la línea 4, volvemos a seleccionar un texto, pero esta vez se trata del texto que deseamos reemplazar y almacenamos la entidad en la variable EntidadReemp.

Posteriormente en la línea 5 obtenemos solo el nombre de la entidad seleccionada a reemplazar y almacenamos ese nombre en la variable NomEntidadReemp.

A continuación en la línea 6 obtenemos la base de datos de esa entidad que será reemplazada y almacenamos la lista en la variable BaseNomEntidadReemp:

  1. (setq BaseNomEntidadReemp (entget NomEntidadReemp))
  1. (setq ListEntNuevaTexto (subst (cons 1 ContenidoTexto)(assoc 1 BaseNomEntidadReemp) BaseNomEntidadReemp))

Posteriormente en esta línea 7 estamos creando la variable ListEntNuevaTexto, que almacenará el trabajo de la función subst, esta función reemplaza una sublista por otra de la definición de una base de datos, los argumentos de la función subst son las siguientes:

  1. (subst nuevoitem viejoitem listabasedatosobjetoreemplazar)

En nuestro ejemplo el argumento nuevoitem es la construcción de una nueva sublista, usamos la función cons y como primer elemento le indicamos el código 1 y como segundo elemento el valor del contenido del primer texto seleccionado.

Como argumento viejoitem, hacemos referencia a la sublista que existe en la base de datos de la entidad a reemplazar, para ello usamos assoc para ubicar la lista que empieza con el código 1 de esta base de datos a reemplazar (BaseNomEntidadReemp) con el valor de nuevoitem.

Este reemplazo lo hacemos en la base de datos definida en el argumento listabasedatosobjetoreemplaza, que en nuestro ejemplo es BaseNomEntidadReemp.

Esta nueva lista actualizada por subst se almacena en la variable ListEntNuevaTexto que en realidad contiene la definición de la entidad modificada.

La edición de la base de datos de esta entidad (texto), no actualiza automáticamente el contenido del texto en pantalla, para actualizar necesitamos usar la función entmod, que es la que se encarga de actualizar los cambios de una entidad en pantalla.

Veras el código en esta novena línea.

  1. (entmod ListEntNuevaTexto)

La función entmod solo necesita un argumento y éste es el indicar que lista de base de datos (entidad) es la que va a actualizar.

Todo este código que hemos analizado se va a repetir “n” veces porque estamos usando la función while, cuya condición es “mientras se seleccione un objeto en la pantalla… se ejecuten las acciones siguientes”.

¿Qué te pareció todo lo analizado?, ¿está claro?, ¿medio claro?, no te preocupes, con la practica lograrás dominar este lenguaje.

A continuación practicaremos muchas de las funciones aprendidas hasta este momento con ejemplos muy prácticos y muy parecidos a los que probablemente usas en tu trabajo, aunque estos ejemplos están orientados a procesos de dibujo de Ing. Civil, igualmente te ayudarán a aprender a crear programas para usarlos en cualquier especialidad.

Recuerda que debes de mantener tu entusiasmo y dedicación, ten paciencia contigo mismo y lo lograrás.

¿Estás preparado?, OK.

Funciones que se han visto en este tema:

  1. entmod
  2. while
  3. setq
  4. entsel
  5. car
  6. assoc
  7. entget
  8. subst
  9. cons
  10. princ
  11. cdr

Si deseas aportar, agregar o realizar algún comentario, lo dejas aquí abajo.