;;;Código fuente del libro "Experto AutoCAD con Visual LISP"
;;; (c) Ediciones ARTUAL, S.L. Barcelona, España.
;;; (c) 2012-2020 Reinaldo Togores. Todos los derechos reservados
;;; Se permite su uso mencionando la obra y su autor.
;;;CapÃtulo 2.  Para comenzar: un Proyecto paso a paso
;;; Debe establecerse el estilo de texto "Standard"
;;; patra habilitar las opciones correctas en el comando TEXTO.
(setvar "TEXTSTYLE" "Standard")
;;;Función numera-dicc:
;;;Crea el diccionario si no existiera,
;;;con valores por defecto.
(defun numera-dicc ()Â
  (vl-load-com)
  (if (not (dictsearch (namedobjdict) "VARS-NUMERA"))Â
    (progn (vlax-ldata-put "VARS-NUMERA" "CIFRA" 0)Â
           (vlax-ldata-put "VARS-NUMERA" "INCREM" 10)
           (vlax-ldata-putÂ
             "VARS-NUMERA"
             "ALTURA"
             (getvar "TEXTSIZE")))))
;;;Figura 2.7. Función numera-dicc.
;;;Incrementa el valor de CIFRA
;;;guardado en "VARS-NUMERA"
(defun num-prox ()Â
  (vlax-ldata-putÂ
    "VARS-NUMERA"
    "CIFRA"
    (+ (vlax-ldata-get "VARS-NUMERA" "CIFRA")Â
       (vlax-ldata-get "VARS-NUMERA" "INCREM"))))
;;;Figura 2.8. Función num-prox.
;;;Función genérica para dibujar textos
(defun dib-texto (pt-ins altura numeracion / ant-osm)Â
  (setq ant-osm (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (princ)
  (command "._TEXT" pt-ins altura "" numeracion)
  (setvar "OSMODE" ant-osm))
;;;Figura 2.10. Función para dibujo del texto.
;;;Define un nuevo comando de AutoCAD
;;;que dibuja números incrementadosÂ
;;;por un valor fijo
(defun C:NUMERA (/ pto-ins)Â
  (numera-dicc)
  (setq pto-ins (getpointÂ
                  (strcatÂ
                    "\nPosición para el Núm. "
                    (itoa (vlax-ldata-get "VARS-NUMERA" "CIFRA"))
                    ": ")))
  (while pto-insÂ
    (dib-textoÂ
      pto-ins
      (vlax-ldata-get "VARS-NUMERA" "ALTURA")
      (itoa (vlax-ldata-get "VARS-NUMERA" "CIFRA")))
    (num-prox)
    (setq pto-ins (getpointÂ
                    (strcatÂ
                      "\nPosición para el Núm. "
                      (itoa (vlax-ldata-get "VARS-NUMERA" "CIFRA"))
                      ": "))))
  (princ))
;;;Figura 2.11. Función C:NUMERA.
;;;Función que modifica los valores en el Diccionario
(defun C:NUM-OPCIONES (/ opcion)Â
  (numera-dicc)
  (ifÂ
    (setq opcion (getdistÂ
                   (strcat "\nNueva altura de texto<"Â
                           (rtos (vlax-ldata-get "VARS-NUMERA" "ALTURA"))
                           ">: ")))
    (vlax-ldata-put "VARS-NUMERA" "ALTURA" opcion))
  (ifÂ
    (setq opcion (getintÂ
                   (strcatÂ
                     "\nNuevo incremento<"
                     (itoa (vlax-ldata-get "VARS-NUMERA" "INCREM"))
                     ">: ")))
    (vlax-ldata-put "VARS-NUMERA" "INCREM" opcion))
  (initget "Seleccionar Teclear")
  (setq opcion (getkword "\n¿Teclear o <Seleccionar> el número inicial?: "))
  (condÂ
    ((= opcion "Teclear")
     (initget 1)
     (vlax-ldata-putÂ
       "VARS-NUMERA"
       "CIFRA"
       (getint "\nComenzar con: ")))
    (t
     (setq opcion (car (entsel "\Numerar a continuación de: ")))
     (if opcionÂ
       (num-lee opcion))))
  (princ))
;;; Figura 2.12. Función C:NUM-OPCIONES.
;;;Función que lee los datos del texto
;;;Recibe: nombre de la entidad del texto seleccionado
;;;Devuelve: el valor del texto
(defun num-lee (nom-ent)Â
  (while (not (= (getpropertyvalue nom-ent "LocalizedName") "Texto"))Â
    (setq nom-ent (carÂ
                    (entsel "\nEsto NO es un texto, seleccione de nuevo: "))))
  (if (setq val (distof (getpropertyvalue nom-ent "TextString")))Â
    (vlax-ldata-putÂ
      "VARS-NUMERA"
      "CIFRA"
      (+ (fix val)Â
         (vlax-ldata-get "VARS-NUMERA" "INCREM")))
    (prompt "\n¡El texto seleccionado no es un número!")))
;;;Figura 2.13 Función NUM-LEE.
(defun num-lee (nom-ent / nuevo-num)Â
  (whileÂ
    (orÂ
      (/= (getpropertyvalue nom-ent "LocalizedName") "Texto")
      (nullÂ
        (setq nuevo-num (distof (getpropertyvalue nom-ent "TextString")))))
    (setq nom-ent (carÂ
                    (entsel "\nEsto NO es un número, seleccione de nuevo: "))))
  (vlax-ldata-putÂ
    "VARS-NUMERA"
    "NUMBER"
    (+ (fix nuevo-num)Â
       (vlax-ldata-get "VARS-NUMERA" "INCREM"))))
;;;Figure 2.13. Función num-lee (alternativa)