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...