TextBox2

Outro dia estava precisando desenhar um retângulo tal que circunscrevesse um TEXT ou MTEXT... pois bem, existe a função textbox no autolisp, mas esta so funciona com TEXT... e ainda, ele devolve uma lista com a diagonal do retângulo ocupado pelo texto, como se ele estivesse na origem (0,0) e tivesse rotação zero...

aí desenvolvi esta rotinazinha:
(defun textbox2  (ent / box w h pt ang al)
  (
if (setq ent (ename-of ent))
    (
progn
      (setq pt  (3d-of-vla
                  (vla-get-insertionpoint
                    (vlax-ename->vla-object ent)))
            ang (dxf 50 ent))
      (
if (= (dxf 0 ent) "TEXT")
        (
setq box (textbox (list (cons -1 ent)))
              w   (- (caadr box) (caar box))
              h   (- (cadadr box) (cadar box)))
        (
setq w   (dxf 42 ent)
              h   (dxf 43 ent)
              ang (angle (trans '(0 0) 1 0)
                         (
trans
                           (polar '(0 0) ang 1)
                           1 0))
              al  (1- (dxf 71 ent))
              pt  (polar
                    (polar pt ang
                           (* w -0.5 (rem al 3)))
                    (
- ang (/ pi 2))
                    (
* h 0.5 (- 2 (/ al 3))))))
      (
list pt
            (polar pt ang w)
            (
polar pt
                   (+ ang (atan (/ h w)))
                   (
sqrt (+ (expt h 2)
                            (
expt w 2))))
            (
polar pt (+ ang (/ pi 2)) h)))))
 
ela devolve uma lista com os quatro vértices do retângulo, esteja o texto onde estiver e a rotação que for... serve para TEXT e MTEXT...

Um comentário:

  1. Neyton, não abusando, tem como postar as sub-funções?

    ex.: ename-of

    Valeu e obrigado,

    Rogério Z.

    ResponderExcluir