(defun c:InsertarMedicion (/ ename blkName blkDef elist ptList pt num blkRef attRef totalVertices numDigits)
  ;; Nombre del bloque a insertar
  (setq blkName "Medicion")

  ;; Verificar si el bloque existe
  (setq blkDef (tblsearch "BLOCK" blkName))
  (if (not blkDef)
    (progn
      (princ (strcat "\nEl bloque \"" blkName "\" no existe en el dibujo."))
      (exit)
    )
  )

  ;; Seleccionar una polilínea
  (princ "\nSelecciona una polilínea:")
  (setq ename (car (entsel)))
  (if (and ename (= (cdr (assoc 0 (entget ename))) "LWPOLYLINE"))
    (progn
      ;; Obtener lista de vértices de la polilínea
      (setq elist (entget ename))
      (setq ptList nil)
      (foreach data elist
        (if (= (car data) 10) ; Código DXF 10 corresponde a un vértice
          (setq ptList (append ptList (list (cdr data))))
        )
      )

      ;; Excluir el último vértice
      (setq ptList (reverse (cdr (reverse ptList))))

      ;; Calcular el número total de vértices y los dígitos necesarios
      (setq totalVertices (length ptList))
      (setq numDigits (strlen (itoa totalVertices)))

      ;; Insertar bloques y asignar numeración correlativa
      (setq num 1) ; Valor inicial del atributo NÚMERO
      (foreach pt ptList
        (progn
          ;; Insertar el bloque en el vértice
          (command "_.-INSERT" blkName pt "" "" "")
          ;; Obtener referencia al último bloque insertado
          (setq blkRef (entlast))
          ;; Verificar y asignar valor al atributo NÚMERO
          (setq attRef (entnext blkRef)) ; Obtener la referencia del primer atributo
          (while (and attRef (= (cdr (assoc 0 (entget attRef))) "ATTRIB"))
            (if (= (strcase (cdr (assoc 2 (entget attRef)))) "NÚMERO")
              (progn
                ;; Formatear el número con ceros a la izquierda
                (entmod (subst (cons 1 (strcat (substr "0000000000" 1 (- numDigits (strlen (itoa num)))) (itoa num)))
                               (assoc 1 (entget attRef))
                               (entget attRef)))
                (entupd attRef) ; Actualizar el atributo después de modificarlo
              )
            )
            (setq attRef (entnext attRef)) ; Mover al siguiente atributo
          )
          ;; Incrementar el número
          (setq num (1+ num))
        )
      )
      (princ (strcat "\nSe insertaron bloques \"" blkName "\" con numeración correlativa."))
    )
    (princ "\nEl objeto seleccionado no es una polilínea.")
  )
  (princ)
)
