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