Aller au contenu

rotation du texte dans les blocs


serge77

Messages recommandés

Bonjour,

 

J'ai un problème avec les textes dans mes blocs.

Je souhaite les implanter plusieurs fois sur un schéma en les faisant pivoter d'une valeur X suivant emplacement. Et j'aimerai que les textes inclucs dans ces blocs restent horizontales.

Si vous pouviez m'aider.

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

ou plutôt que d'utiliser des textes utilises des ATTRIBUTS...

 

de plus si tu as une version 2006 grâce aux Blocs Dynamiques tu peux faire une rotation de n'importe quel objet à l'intérieur du bloc !

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Merci de vos reponse,

Les réacteurs, je ne suis vraiment pas au niveau pour me lancer la dedans.

Sinon j'ai bien les version 2006, je fais des blocs dynamiques et je peux donc tourner mes textes manuellement, c'est deja pas mal mais je voulais une facon plus automatique.

Je m'explique, je fais des implantations de circuits de convoyeurs et j'ai des blocs pour a peu pres tous les elements (ligne droite, courbes, aiguillage etc....), et dans ces blocs sont notés des information (longueur, rayon, reference) a plusieurs endroit du bloc donc suivant leur implatation dans le circuit ils se retroiuvent a l'endroit, en biais ou a l'envers.

Moi ce que j'aimerai c'est qu'une fois que j'ai fini mon implantation, je puisse mettre les textes de tous mes blocs composant le circuit de facon lisible comme pour une cotation.

Une grosse épine est plantée dans mon pied, si quelqu'un peut m'aider à la retirer ce serait tres mais alors tres gentil.

Lien vers le commentaire
Partager sur d’autres sites

avant de te proposer une solution ! pourrais-tu m'envoyer ton dessin (s'il n'est pas confidentiel) à cad123@wanadoo.fr

 

avec la situation des Blocs + Textes NON tournés, en fait plutôt avec des Attributs !

 

merci,

 

christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Si tes blocs ont des attributs (excepté ceux qui sont alignés ou fixés).

Les quelque lignes suivantes devrait remettre l'orientation de tes attributs à 0.0 quelque soit l'angle d'insertion du bloc.

Ceci n'est qu'une première ébauche

 

((lambda ( / js_blk ent_name n)

(defun block_update (block_record / s_e dxf_e)

(if (/= (getvar "ATTMODE") 1) (setvar "ATTMODE" 1))

(setq s_e block_record)

(while (/= (cdr (assoc 0 (entget (setq s_e (entnext s_e))))) "SEQEND")

(setq dxf_e (entget s_e))

(if (eq (cdr (assoc 0 dxf_e)) "ATTRIB")

(entmod (subst '(50 . 0.0) (assoc 50 dxf_e) dxf_e))

)

)

(entupd block_record)

)

(setq js_blk

(ssget "X"

'(

(-4 . "< AND")

(0 . "INSERT")

(66 . 1)

(-4 . "AND>")

)

)

)

(cond

(js_blk

(princ "\nMise à jour de l'orientation des attribut du Bloc.")

(if (eq (getvar "attmode") 2) (setvar "attmode" 1))

(if (zerop (getvar "pickstyle")) (setvar "pickstyle" 1))

(setq n 0)

(while (setq ent_name_blk (ssname js_blk n))

(block_update ent_name_blk)

(setq n (1+ n))

)

)

(T (princ "\nAucune insertion de bloc trouvé!"))

)

(princ)

))

 

NB Changer (-4 . "< AND") en virant l'espace aprés le signe inférieur.

 

Pour des bloc contenant du texte, je te conseille de les convertir en attribut. Ce sera plus simple!

 

[Edité le 25/11/2005 par bonuscad]

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

Salut

Je viens d'adapter uin de mes lisps à tes besoins

Tu as juste cette ligne (setq Nom_bloc "MON_BLOC" Eti_Bloc '("ETI1" "ETI2" "ETI3")) à modifier pour donner le bon nom du bloc et de ses etiquettes

Il y a juste une chose auquel je bute pour l'instant, c'est si ton scu est différent de ton sgc, je n'arrive pas encore à trouver la différence d'angle entre les deux

 

@+

 

(defun Attributs_ini(Rea Cde)
 (setq dernier_ent (entlast))
)

(defun Attributs_rot(Rea Cde / ang bl js i n)
 (cond
   ((eq (car Cde) "ROTATE")
     (setq js (ssget "_p"))
   )
   ((eq (car Cde) "GRIP_ROTATE")
     (setq js (cadr (ssgetfirst)))
   )
   ((eq (car Cde) "INSERT")
     (setq js (ssadd))
     (ssadd (entlast) js)
   )
   ((eq (car Cde) "COPY")
     (setq js (ssadd) n (entnext dernier_ent))
     (while n
       (ssadd n js)
       (setq n (entnext n))
     )
   )
 )
 (if js
   (progn
     (setq n 0)
     (while (ssname js n)
       (setq bl (entget (ssname js n)))
       (if (and (eq (cdr (assoc 0 bl)) "INSERT") (eq (strcase (cdr (assoc 2 bl))) (strcase Nom_bloc)))
         (if (cdr (assoc 66 bl))
           (progn (setq az bl)
             (while (not (eq (cdr (assoc 0 bl)) "SEQEND"))
               (if (eq (cdr (assoc 0 bl)) "ATTRIB")
                 (progn
                   (setq i 0)
                   (while (nth i Eti_Bloc)
                     (if (eq (strcase (cdr (assoc 2 bl))) (strcase (nth i Eti_Bloc)))
                       (progn
                         (setq bl (subst (cons 50 (angle '(0 0) (trans (getvar "UCSXDIR") 0 (trans '(0 0 1) 1 0 T)))) (assoc 50 bl) bl))
                         (entmod bl)
                         (entupd (cdr (assoc -1 bl)))
                       )
                     )
                     (setq i (1+ i))
                   )
                 )
               )
               (setq bl (entget (entnext (cdr (assoc -1 bl)))))
             )
           )
         )
       )
       (setq n (1+ n))
     )
   )
 )
 (princ)
)

(defun c:srot(/ i j n)
 (if (setq i (vlr-reactors :vlr-Command-Reactor))
   (progn
     (setq n 1 i (nth n (car i)))
     (while i
       (setq j nil)
       (if (or (eq (cdr (car (vlr-reactions i))) 'ATTRIBUTS_ROT) (eq (cdr (car (vlr-reactions i))) 'ATTRIBUTS_INI))
         (setq j i)
       )
       (if j
         (vlr-remove j)
         (setq n (1+ n))
       )
       (if (setq i (vlr-reactors :vlr-Command-Reactor))
         (setq i (nth n (car i)))
       )
     )
     (if mrea_rot
       (princ (strcat "\n\tDésactivation de la Rotation des Attributs du bloc " Nom_bloc "."))
     )
     (setq mrea_rot nil)
   )
 )
 (princ)
)

(defun c:rot()
 (if (not mrea_rot)
   (progn
     (c:srot)
     (vlr-command-reactor nil '((:vlr-commandwillstart . Attributs_ini)))
     (setq mrea_rot (vlr-command-reactor nil '((:vlr-commandEnded . Attributs_rot))))
     (princ (strcat "\n\tActivation de la rotation des Attributs du bloc " Nom_bloc "."))
   )
   (princ (strcat "\n\tLa mise à jour de la rotation des Attributs du bloc " Nom_bloc " est déjà activée."))
 )
 (princ)
)

(vl-load-com)
(setq Nom_bloc "MON_BLOC" Eti_Bloc '("ETI1" "ETI2" "ETI3"))

(princ (strcat "\n\tPour activer la mise à jour des Attributs du bloc " Nom_bloc ", lancez la commande ROT.\n\tPour revenir à la normale, faites la commande SROT."))
(princ)

 

[Edité le 28/11/2005 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

"Aucune insertion de blocs trouvé"

 

3 Possibilités:

1 - tu n'as pas tenu compte du Nota Bene concernant le caractère "espace" en trop.

2 - tu confonds peut être Texte et Attribut (défini par Attdef)

3 - Il n'y a rééllement pas de bloc avec attributs dans ton dessin.

 

Mon code est juste un essai pour voir si cela peut convenir à ton souhait.

Il faudra l'améliorer si cela convient.

En l'état, il concerne TOUS les blocs (avec attributs) du dessin (espace papier et objet).

 

Il pourra être affiné pour ne cibler qu'un seul nom de bloc

 

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

Salut Patrick_ 35,

 

Je n'ai pas encore décortiqué ton lisp (que je ne suis pas sûr de comprendre), mais j'ai peut-être une piste pour ta question :

Il y a juste une chose auquel je bute pour l'instant, c'est si ton scu est différent de ton sgc, je n'arrive pas encore à trouver la différence d'angle entre les deux

 

Bonuscad en parle ici

Ce code devrait fonctionné même dans un SCU non parralèle au SCG. (je suis assez content de moi sur ce coup là), j'ai réussi a déterminer le vecteur d'extrusion (code DXf 210) du scu courant.

où il définit une variable :

(setq dxf_210
(list
(caddr (trans '(1.0 0.0 0.0) 0 1 0))
(caddr (trans '(0.0 1.0 0.0) 0 1 0))
(caddr (trans '(0.0 0.0 1.0) 0 1 0))
)
) 

 

Pour ma part, j'avais déjà été confronté au problème ici ou et j'avais préféré un (defun) pour pouvoir m'en servir dans plusieurs routines.

 

La "synthèse" de nos deux méthode se résume simplement à ce qui s'appellerait UCSZDIR si c'était une variable système, c'est le vecteur normal du plan XY du SCU courant:

 

(defun ucszdir ()
(trans '(0 0 1) 1 0 T)
) 

 

Çà me sert pour créer des entités en 3D quelque soit le scu courant, avec (entmake) ou, en Vlisp :

 

 (vla-put-Normal
   ent
   (vlax-3d-point (ucszdir))
 ) 

 

[Edité le 25/11/2005 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Par exemple, en remplaçant dans ton LISP:

 

(setq bl (subst (cons 50 0) (assoc 50 bl) bl)) 

 

par :

 

(setq bl (subst
			     (cons 50 (angle '(0 0) (trans (getvar "UCSXDIR") 0 (ucszdir))))
			     (assoc 50 bl) bl)
			) 

 

avec UCSZDIR comme défini plus haut, les textes s'affichent parallèlement à l'axe des X du SCU courant quelqu'il soit, même s'il n'est pas parallèle au SCG.

 

Et encore, un grand bravo, les réacteurs, c'est de la bombe !!!

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci (gile), c'est exactement ce que je cherchai

J'avoue ne pas encore tout comprendre avec la fonction trans, mais je vais m'y pencher dessus

 

ps: hje viens de modifier le lisp

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é