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 …)