serge77 Posté(e) le 23 novembre 2005 Partager Posté(e) le 23 novembre 2005 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 More sharing options...
Patrick_35 Posté(e) le 23 novembre 2005 Partager Posté(e) le 23 novembre 2005 Salut Tu as une réponse en lisp qu'il suffit d'adapter à tes besoins @+ Les Lisps de PatrickLe 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 More sharing options...
rebcao Posté(e) le 24 novembre 2005 Partager Posté(e) le 24 novembre 2005 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 More sharing options...
serge77 Posté(e) le 24 novembre 2005 Auteur Partager Posté(e) le 24 novembre 2005 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 More sharing options...
rebcao Posté(e) le 24 novembre 2005 Partager Posté(e) le 24 novembre 2005 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 More sharing options...
bonuscad Posté(e) le 25 novembre 2005 Partager Posté(e) le 25 novembre 2005 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 More sharing options...
serge77 Posté(e) le 25 novembre 2005 Auteur Partager Posté(e) le 25 novembre 2005 Merci Bonuscad Je ne suis pas très doué apparemment, quand je charge l'application tel que tu me l'a ecrite, autocad me répond "Aucune insertion de blocs trouvé" pourtant j'ai des blocs avec des attributs dans mon dessinsQu'est ce qu je fait mal ??? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick_35 Posté(e) le 25 novembre 2005 Partager Posté(e) le 25 novembre 2005 SalutJe viens d'adapter uin de mes lisps à tes besoinsTu 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 etiquettesIl 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 PatrickLe 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 More sharing options...
bonuscad Posté(e) le 25 novembre 2005 Partager Posté(e) le 25 novembre 2005 "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 More sharing options...
(gile) Posté(e) le 25 novembre 2005 Partager Posté(e) le 25 novembre 2005 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 là 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 More sharing options...
(gile) Posté(e) le 26 novembre 2005 Partager Posté(e) le 26 novembre 2005 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 More sharing options...
Patrick_35 Posté(e) le 28 novembre 2005 Partager Posté(e) le 28 novembre 2005 Merci (gile), c'est exactement ce que je cherchaiJ'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 PatrickLe 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 More sharing options...
(gile) Posté(e) le 28 novembre 2005 Partager Posté(e) le 28 novembre 2005 J'avoue ne pas encore tout comprendre avec la fonction trans Moi non plus, je finis souvent par trouver à force de tâtonnements. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant