;;; VPLock-1.0.lsp
;;; Bloquea todos los viewports flotantes en la presentación actual.

(defun c:VPL (/ doc ms layout ss obj count)
  (vl-load-com)  ; Cargar extensiones de Visual LISP
  (setq doc (vla-get-activedocument (vlax-get-acad-object))) ; Obtener el documento activo
  (setq count 0) ; Inicializar contador

  ;; Asegurar que estamos en Paper Space
  (if (/= (vla-get-activespace doc) acPaperSpace)
    (vla-put-activespace doc acPaperSpace)
  )

  ;; Obtener todos los viewports flotantes en la presentación actual
  (setq ss (ssget "_X" '((0 . "VIEWPORT")))) 

  (if ss
    (progn
      (setq count 0)
      (setq i 0)
      (while (< i (sslength ss))
        (setq obj (vlax-ename->vla-object (ssname ss i)))
        (if (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-put-displaylocked (list obj :vlax-true))))
          (setq count (1+ count))
        )
        (setq i (1+ i))
      )
      (princ (strcat "\nSe han bloqueado " (itoa count) " viewports en el archivo actual."))
    )
    (princ "\nNo se encontraron viewports para bloquear en este archivo.")
  )

  (princ) ; Evitar salida innecesaria
)
