Desvirar textos de cabeça para baixo

Uma rotininha que já existe no civil 3d para as "labels" que eu imitei para funcionar com textos... É assim: você desenha os textos e tal, mas no layout, devido ao formato do desenho, rotaciona a viewport e os textos ficam de cabeça pra baixo (ou de ponta-cabeça, dependendo de onde tu mora, tchê!!!)... na mão ia demorar um bocado, mas assim é covardia:
Deixa eu ver!!!
(defun c:rottxt  (/ ss rot ent)
;controle de erros:
  (tbn:error-init (list (list "cmdecho" 0) t))
;seleciona textos:
  (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  (
repeat (if ss (sslength ss) 0)
    (
setq ent (ssname ss 0)
          rot (dxf 50 ent);rotação em radianos
          rot (if (= "MTEXT" (dxf 0 ent));rotação em UCS
                (angle (trans '(0 0) 1 0)
                       (
trans (polar '(0 0) rot 1) 1 0))
                rot));text tem rotação em WCS
;| se a rotação encontrada é
   diferenta daquela que o texto tem:|;

    (if (/= rot (rot-of-ucs rot))
      (
progn
;assim é mais facil obter o ponto do centro do texto:
        (setq box (textbox2 ent))
;rotaciona em 180º:
        (vla-rotate
          (vlax-ename->vla-object ent)
          (
vlax-3d-point (media (car box) (caddr box)))
          pi)))
;contador na barra inferior:
    (grtext -2 (itoa (sslength ss)))
    (
ssdel ent ss))
;restaura sem erros:
  (tbn:error-restore t))


Link(s) da(s) subrotina(s) usada(s):
tbn:error-init, dxf, rot-of-ucs, textbox2, media, tbn:error-restore


Atenção, ela não muda a rotação para 0, mas sim vê se o texto ficou de cabeça pra baixo, se ficar, rotaciona em 180 graus!!

Nenhum comentário:

Postar um comentário