get-user-polig

Na verdade estou tentando modificar esta rotina para que ela não precise usar os layers... pois se você tem um desenho muito grande, ela pode se tornar lenta ao alterar o "LOCK" do layer...
(defun get-user-polig  (/ pts lst tmp cmd)
  (
setq pts   nil
        lst   nil
        cmd   (getvar "cmdecho")
        again t)
  (
vlax-for tmp 
   (vla-get-layers
        (vla-get-activedocument 
                 (vlax-get-acad-object)))
    (
setq lst (append lst (list 
        (list tmp (vla-get-lock tmp)))))
    (
vla-put-lock tmp :vlax-true))
  (
vl-catch-all-apply
    '(lambda nil
       (setvar "cmdecho" 0)
       (
command "BREAK" "cp")
       (
setvar "cmdecho" 1)
       (
while
         (and again 
            (wcmatch (getvar "cmdnames") "*BREAK*"))
         (
command pause)
         (
setq tmp (strcase (getvar "lastprompt")))
         (
cond ((vl-string-search "[UNDO]: U" tmp)
                (
setq pts (reverse (cdr (reverse pts)))))
               ((
equal tmp "NO OBJECT FOUND"
                (
setq again nil))
               ((
/= tmp "COMMAND:")
                (
setq pts 
                  (append pts
                    (list (trans
                           (getvar "lastpoint")
                           1 0))))))))
    nil)
  (
foreach tmp lst 
     (vla-put-lock (car tmp) (cadr tmp)))
  (
setvar "cmdecho" cmd)
  pts)

retorna a lista de coordenadas de um polígono fechado que é clicado pelo usuário, nos moldes da lista de pontos requeridos pelo (ssget "CP" pts ...)

Nenhum comentário:

Postar um comentário