Curso Online de AutoLISP© - Desenvolvido e ministrado por Eduardo Fernal, arquiteto Conheça mais em http://www.gr-acad.com.br Parceria : http://www.cadklein.com
;;; Escrito por Eduardo Fernal em 25/07/2005
;;; http://www.gr-acad.com.br
;;; Todos os direitos autorais reservados...
;;; Pode ser livremente usada desde que mantidos estes créditos...
;;; *****************************************************************************
;;; Esta rotina solicita a seleção de um círculo (de forma contínua) e, se
;;; esta seleção for válida, coloca textos informativos com o raio, o comprimento
;;; e a área de cada círculo selecionado...
;;; Desenvolvida a pedidos...
;;; *****************************************************************************
;;; *****************************************************************************
(DEFUN c:lcir (/ ent p10 p11 raio perimetro hfonte dimzin)
(SETVAR "CMDECHO" 0)
(IF (NOT g::hfonte::luciana)
;; Se não houver...
(SETQ g::hfonte::luciana 12.5)
;; cria uma variavel numérica de escopo global!
)
;; Abaixo, solicita a altura da fonte
(SETQ hfonte (GETREAL (STRCAT "\n-> Altura do texto < "
(RTOS g::hfonte::luciana 2 3)
" > : "
)
)
)
;; Se a altura não for fornecida ou se for inválida...
(IF (OR (NOT hfonte)
(NOT (NUMBERP hfonte))
(ZEROP hfonte)
(MINUSP hfonte)
)
;; então assume o valor da variável global...
(SETQ hfonte g::hfonte::luciana)
)
;; Agora atualiza o valor da variável global com o valor da variável local
(SETQ dimzin (GETVAR "DIMZIN"))
(SETVAR "DIMZIN" 8)
;; Ajusta dimzin para evitar zeros à direita dos valores numéricos...
(SETQ g::hfonte::luciana hfonte)
(WHILE (SETQ ent (CAR (ENTSEL "\n-> Selecione círculo a medir : ")))
(IF (= (CDR (ASSOC 0 (ENTGET ent))) "CIRCLE")
; Verifica se é circulo
(PROGN (SETQ ent (ENTGET ent)
raio (CDR (ASSOC 40 ent))
; Extrai o valor do raio
p10 (CDR (ASSOC 10 ent))
; Extrai o ponto central
p11 (POLAR p10 (* PI 0.25) (* 2. raio))
; Calcula um ponto externo
perimetro (* 2.0 PI raio)
; Calcula o comprimento do círculo
)
;; Abaixo, desenha uma linha como 'leader'
(ENTMAKE (LIST (CONS 0 "LINE")
(CONS 10 (POLAR p10 (* PI 0.25) raio))
(CONS 11 p11)
)
)
;; Abaixo, coloca um texto com o valor do raio
(ENTMAKE (LIST (CONS 0 "TEXT")
(CONS 1 (STRCAT "R=" (RTOS raio 2 4)))
; Texto com valor do raio
(CONS 10 p11)
(CONS 40 hfonte)
; hfonte é a altura do texto
(CONS 50 0.0)
; O ângulo do texto (em radianos)
)
)
;; Abaixo, coloca um texto com o valor do comprimento
(ENTMAKE
(LIST (CONS 0 "TEXT")
(CONS 1 (STRCAT "L=" (RTOS perimetro 2 4)))
; Texto com valor do raio
(CONS 10 (POLAR p11 (* PI 1.5) (* hfonte 1.5)))
(CONS 40 hfonte) ; hfonte é a altura do texto
(CONS 50 0.0) ; O ângulo do texto (em radianos)
)
)
;; Abaixo, coloca um texto com o valor da área
(ENTMAKE
(LIST (CONS 0 "TEXT")
(CONS 1 (STRCAT "S=" (RTOS (* PI raio raio) 2 4)))
; Texto com valor do raio
(CONS 10 (POLAR p11 (* PI 1.5) (* hfonte 3.0)))
(CONS 40 hfonte) ; hfonte é a altura do texto
(CONS 50 0.0) ; O ângulo do texto (em radianos)
)
)
)
(ALERT "Erro:\n\n\tEsta entidade não é círculo!\t\n\n")
;; Se a entidade selecionada não for um círculo, então avisa o operador...
)
)
(SETVAR "DIMZIN" dimzin)
;; Restabelece dimzin ao seu valor anterior...
(PRINC)
)
(PRINC "\n-> Digite LCIR e tecle ENTER para rodar...")
(PRINC)
Clique aqui para baixar o arquivo LCIR.LSP
Fim deste arquivo...