Caro me perdi completamente nesse fórum...
O código é esse e o que queria era extrair tanto o perímetro quanto a área ao dar o comando área durante a demo
(vl-load-com)
(defun c:demo (/ *error* ans dzin ent file fileopen flag p1 str ss)
(defun *error* (msg)
(if fileopen
(close fileopen)
)
(if dzin
(setvar 'dimzin dzin)
)
(cond ((not msg))
((member msg '("Function cancelled" "quit / exit abort")))
((princ (strcat "\n** Error: " msg " ** ")))
)
(princ)
)
(setq file (strcat (getvar 'dwgprefix) (vl-filename-base (getvar 'dwgname)) ".txt")
dzin (getvar 'dimzin)
)
(setvar 'dimzin 0)
(if (findfile file)
(setq fileopen (open file "a"))
(setq fileopen (open file "w"))
)
(setq flag t)
(while flag
(initget "Area Comprimento")
(setq ans (setq p1 (getpoint "\nDistancia, especifica o primeiro ponto, ou [Area/Comprimento] <exit>: ")))
(cond ((= 'list (type ans))
(command "._dist" p1)
(while (> (getvar 'cmdactive) 0)
(command "\\")
)
(setq str (strcat "Dist \t" (rtos (getvar "distance") 2 4)))
(write-line str fileopen)
(princ (strcat "\n" str))
)
((= "Area" ans)
(command "._area")
(while (> (getvar 'cmdactive) 0)
(command "\\")
)
(setq str (strcat "Area \t" (rtos (getvar 'area) 2 4)))
(write-line str fileopen)
(princ (strcat "\n" str))
)
((= "Comprimento" ans)
(prompt "\nSeleciona o objeto a medir o comprimento: ")
(if (setq ss (ssget "_+.:E:S" '((0 . "ELLIPSE,*POLYLINE,SPLINE,LINE,ARC,CIRCLE"))))
(progn
(setq str (strcat "Comp \t"
(rtos (vlax-curve-getDistAtParam (setq ent (ssname ss 0)) (vlax-curve-getEndParam ent)) 2 4)
)
)
(write-line str fileopen)
(princ (strcat "\n" str))
)
)
)
((= ans nil)
(setq flag nil)
(prompt "\nSaindo...")
)
)
)
(*error* nil)
(princ)
)