Aller au contenu

Ecarter Textes confondus de façon dynamique


fabcad

Messages recommandés

As-tu essayé en créent un bloc, ton texte pourrais être un bloc, l'origine tu la places au centre du point de rotation, puis dans le bloc tu crées un attribut pour ton texte et tu lui crées un jeux de paramètres dynamique.

J'ai fais un petit test mais c'est con je me rappelles plus qu'elles jeux de paramètres j'ai utilisé mais bon c'est un début. :unsure:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Un embryon de code écrit rapidement, voir si cela convient !

 

((lambda ( / js_mt nb_text inc_ang ang ent obj_vlax dxf_ent mnpt mxpt mintpt maxpt offset)
 (setq js_mt (ssget '((0 . "MTEXT"))))
 (cond
   (js_mt
     (cond
       ((> (setq nb_text (sslength js_mt)) 1)
         (setq inc_ang (/ (* 2 pi) nb_text) ang 0.0)
         (repeat nb_text
           (setq
             ent (ssname js_mt (setq nb_text (1- nb_text)))
             obj_vlax (vlax-ename->vla-object ent)
             dxf_ent (entget ent)
             pt_ins (cdr (assoc 10 dxf_ent))
           )
           (vla-GetBoundingBox obj_vlax 'mnpt 'mxpt)
           (setq
             minpt (trans (safearray-value mnpt) 0 1)
             maxpt (trans (safearray-value mxpt) 0 1)
           )
           (setq offset (* (distance minpt maxpt) 2.0))
           (entmod (subst (cons 10 (polar pt_ins ang offset)) (assoc 10 dxf_ent) dxf_ent))
           (setq ang (+ ang inc_ang))
         )
       )
     )
   )
 )
))

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

Lien vers le commentaire
Partager sur d’autres sites

Merci bonuscad,

 

La première fonction de placement est impeccable,

- il faudrait que la ligne imaginaire entre le centre du cercle imaginaire et les textuels soient la distance dynamique entre le centre et les textuels

 

et comme deuxième option faire tourner les textuels comme les rayons d'une bicyclette (tour de France) depuis ce point centre en conservant leur angle d'origine.

 

Merci par un Homo-(MAP)piens

 

Fabrice

Lien vers le commentaire
Partager sur d’autres sites

- il faudrait que la ligne imaginaire entre le centre du cercle imaginaire et les textuels soient la distance dynamique entre le centre et les textuels

 

Désolé, j'ai beau être imaginatif, je n'ai rien compris. Un petite illustration ?...

 

faire tourner les textuels comme les rayons d'une bicyclette

Ça, à priori, je pense avoir compris, il suffit de rajouter (après (entmod) )

(entmod (subst (cons 50 ang) (assoc 50 dxf_ent) dxf_ent))

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

Lien vers le commentaire
Partager sur d’autres sites

Alors voici le corps principal de la fonction, je te laisse peaufiner si besoin est. Tu en es capable, je sais que tu manie en tant soit peu le lisp.

 

(defun c:dispach_text ( / js_mt nb_text inc_ang pt_or nb key ang ent dxf_ent pt_ins offset)
 (setq js_mt (ssget '((0 . "*TEXT"))))
 (cond
   (js_mt
     (cond
       ((> (setq nb_text (sslength js_mt)) 1)
         (setq
           inc_ang (/ (* 2 pi) nb_text)
           pt_or (cdr (assoc 10 (entget (ssname js_mt 0))))
           nb nb_text
         )
         (while (and (setq key (grread T 4 0)) (/= (car key) 3))
           (setq ang (angle pt_or (cadr key)))
           (repeat nb
             (setq
               ent (ssname js_mt (setq nb (1- nb)))
               dxf_ent (entget ent)
               pt_ins (cdr (assoc 10 dxf_ent))
               offset (distance pt_or (cadr key))
             )
             (entmod (subst (cons 10 (polar pt_or ang offset)) (assoc 10 dxf_ent) dxf_ent))
             (setq ang (+ ang inc_ang))
           )
           (setq nb nb_text)
         )
       )
     )
   )
 )
 (prin1)
)

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Pour ceux qui préfèrent avoir comme points de base la moyenne de tous les points d’insertion des textes, plutôt que le point d’insertion de la première entité sélectionné vous pouvez substituer ces lignes de codes :

(setq inc_ang (/ (* 2 pi) nb_text)
     pt_or   (cdr (assoc 10 (entget (ssname js_mt 0))))
     nb      nb_text)

 

 

Par ces dernières :

;; calcul le centre de gravité des points d'insertions des textes sélectionnés
(setq inc_ang (/ (* 2 pi) nb_text)
     pt_or   (mapcar '(lambda (x) (/ x (float (length pt_or))))
                     (apply 'mapcar
                            (cons '+
                                  (repeat (setq nb nb_text)
                                    (setq pt_or (cons (cdr (assoc 10 (entget (ssname js_mt (setq nb (1- nb)))))) pt_or))))))
     nd      nb_text)

 

(Ps : Au cas où vous relanceriez la commande une seconde fois sur la même sélection, ou sur des sélections de textes non superposés)

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Merci à vous pour les compliments.

 

Peaufiner ? je ne sais pas car elle remplit avec brio mon attente.

 

Je l'ai écrite vraiment rapidement depuis le SCG sans beaucoup de tests. Je n'ai même pas essayé dans et depuis des SCU particulier ou depuis des points de vues, voir si le comportement était bon. C'est en cela que j'ai évoqué le terme de peaufiner. (si besoin est!...)

Il y a aussi peut être la justification de texte fixé (forcée sur 2 points) qui pourrait poser problème, et accessoirement l'état de calque verrouillé et j'en oubli peut être encore.

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

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité