CADxp: Coup de "Stabilo" sur un texte - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Coup de "Stabilo" sur un texte Surligner façon stabilo du texte déjà écrit.

#1 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4504
  • Inscrit(e) : 20-juin 03

Posté 15 mai 2012 - 16:02

Bonjour,

Suite à une demande sur le forum Autodesk, je me suis amusé à essayé d'écrire une fonction pour réaliser cela.
Si celle-ci fonctionne bien (quelque soit le SCU) sur des textes simples, j'aurais trouvé intéressant de l'étendre aux textes multi-lignes. Mais je ne vois pas comment appréhender ceux-ci..., un challenge ?

Voici déjà le code pour les textes simples

(vl-load-com)
(defun transpts (apt matrix / )
  (list
    (+
      (* (car (nth 0 matrix)) (car apt))
      (* (car (nth 1 matrix)) (cadr apt))
      (* (car (nth 2 matrix)) (caddr apt))
      (cadddr (nth 0 matrix))
    )
    (+
      (* (cadr (nth 0 matrix)) (car apt))
      (* (cadr (nth 1 matrix)) (cadr apt))
      (* (cadr (nth 2 matrix)) (caddr apt))
      (cadddr (nth 1 matrix))
    )
    (+
      (* (caddr (nth 0 matrix)) (car apt))
      (* (caddr (nth 1 matrix)) (cadr apt))
      (* (caddr (nth 2 matrix)) (caddr apt))
      (cadddr (nth 2 matrix))
    )
  )
)
(defun c:stabilo ( / js dxf_ent dxf_210 dxf_10 dxf_50 txt_box mat entline PathObj EndDist StartPoint EndPoint
                     tmp tmp0 e_last dxf_last)
  (setq js (ssget "_+.:E:S" '((0 . "TEXT"))))
  (cond
    (js
      (setq
        dxf_ent (entget (ssname js 0))
        dxf_210 (cdr (assoc 210 dxf_ent))
        dxf_10 (trans (cdr (assoc 10 dxf_ent)) dxf_210 0)
        dxf_50 (cdr (assoc 50 dxf_ent))
        txt_box (textbox dxf_ent)
        mat
        (mapcar
          '(lambda (n x d / )
            (append n (list x) (list d))
          )
          (mapcar '(lambda (v) (trans v dxf_210 0)) '((1 0 0) (0 1 0) (0 0 1)))
          dxf_10
          '(0 0 0 1)
        )
      )
      (entmake
        (list
          '(0 . "LINE")
          '(100 . "AcDbEntity")
          (assoc 67 dxf_ent)
          (assoc 410 dxf_ent)
          (assoc 8 dxf_ent)
          '(100 . "AcDbLine")
          (cons 10 (transpts (car txt_box) mat))
          (cons 11 (transpts (polar (car txt_box) dxf_50 (- (caadr txt_box) (caar txt_box))) mat))
          '(39 . 0)
          '(60 . 1)
          (assoc 210 dxf_ent)
        )
      )
      (setq
        entline (entlast)
        PathObj (vlax-ename->vla-object entline)
        EndDist (vlax-curve-getDistAtParam PathObj (vlax-curve-getEndParam PathObj))
        StartPoint nil
        EndPoint nil
      )
      (princ "\nDonnez le debut du surlignage du texte")
      (while (= 5 (car (setq tmp (grread t 5 1))))
        (cond
          ((= 5 (car tmp))
            (if StartPoint (grdraw (trans StartPoint 0 1) (trans tmp0 0 1) -1))
            (setq
              StartPoint (vlax-curve-getClosestPointTo PathObj (trans (cadr tmp) 1 0))
              tmp0 (polar (trans StartPoint 0 dxf_210) (+ (* 0.5 pi) dxf_50) (- (cadadr txt_box) (cadar txt_box)))
            )
            (grdraw (trans StartPoint 0 1) (trans tmp0 dxf_210 1) -1)
          )
          (T (princ "\nArrêt anormal de la commande "))
        )
      )
      (entmake
        (list
          '(0 . "SOLID")
          '(100 . "AcDbEntity")
          (assoc 67 dxf_ent)
          (assoc 410 dxf_ent)
          (assoc 8 dxf_ent)
          '(62 . 2)
          '(100 . "AcDbTrace")
          (cons 10 (trans StartPoint 0 dxf_210))
          (cons 11 (trans StartPoint 0 dxf_210))
          (cons 12 tmp0)
          (cons 13 tmp0)
          '(39 . 0)
          (assoc 210 dxf_ent)
        )
      )
      (setq
        e_last (entlast)
        dxf_last (entget e_last)
      )
      (princ "\nDonnez la fin du sulignage du texte")
      (while (= 5 (car (setq tmp (grread t 5 1))))
        (cond
          ((= 5 (car tmp))
            (setq
              EndPoint (vlax-curve-getClosestPointTo PathObj (trans (cadr tmp) 1 0))
              tmp0 (polar (trans EndPoint 0 dxf_210) (+ (* 0.5 pi) dxf_50) (- (cadadr txt_box) (cadar txt_box)))
            )
            (setq
              dxf_last (subst (cons 11 (trans EndPoint 0 dxf_210)) (assoc 11 dxf_last) dxf_last)
              dxf_last (subst (cons 13 tmp0) (assoc 13 dxf_last) dxf_last)
            )
            (entmod dxf_last)
          )
          (T (princ "\nArrêt anormal de la commande "))
        )
      )
      (entdel entline)
      (sssetfirst nil js)
      (ai_draworder "_front")
    )
  )
  (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
0

#2 L'utilisateur est hors-ligne   Dinosor 

  • ceinture noire 2em dan
  • Groupe : Moderateurs
  • Messages : 1155
  • Inscrit(e) : 26-mars 07
  • LocationSuisse - Vaud

Posté 15 mai 2012 - 16:30

Hello bonuscad,

Tout d'abord, merci pour ce code ;) .

Pour le multiligne j'ai une fois bidouillé cela ainsi, afin d'éviter de devoir dessiner des trames de fonds derrière des textes. Mais attention, accroche-toi, c'est de la bricole pure... :blink: :blink:

J'ai créé un style de cote sans aucune ligne de cote ou d'attache, j'ai imposé un fond en arrière plan pour les textes de cotation. Après je créé une cote sur mon dessin, double clique sur le texte de cote et j'ai mon multiligne avec fond... Seul hic, c'est le centrage horizontal du texte, mais bon, c'était de la bricole qui m'avait dépanné sur le moment. :)

Je suis sûr que vous trouverez mieux bien sûr, mais je trouvais rigolo d'en parler...
Hi, hi, il y en a qui vont me trouver cinglé après ça, mais j'adore sortir des sentiers battus ! B)
Seuls nous allons vite, ensemble nous allons plus loin...
AutoCad (Architecture) 2018 - Lumion 8 PRO
BMW R-1200-RT, c'est moche, oui... je sais...

www.neda.ch
0

#3 L'utilisateur est hors-ligne   Tramber 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8433
  • Inscrit(e) : 29-mars 03
  • LocationStrasbourg

Posté 15 mai 2012 - 17:05

Chapeau bas en tous les cas ;)

Un défi serait d'accrocher mieux à chaque lettre....

Ce message a été modifié par Tramber - 15 mai 2012 - 17:06 .
Raison de l'édition : défi

Image IPB

Bureau d'études dessin.
Spécialiste Escaliers
Développement - Formation

./__\.
(.°=°.)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)