lili2006 Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Bonjour à toutes et tous, Je me retrouve souvent confronté à aligner mes textes "attributs" (mais ce sont des blocs, bien entendu !) dans des directions différentes. Je ne connais que la commande "rotation avec référence", comment procédez-vous vous autres ? J'ai posté sur ce forum car il existe peut-être une routine qui le fait et que je ne connais pas ! Exemple sur l'image ci-dessous pour les repères des poteaux (P xx) et des poutres (B xx (xx X xx ht) http://images4.hiboox.com/images/3408/d3f8229d98189d7e8cac77d0aab204cd.jpg Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Tramber Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Tu peux le faire en macro.Mais si tu connais un peu le lisp, tu peux adapter une routine du genre : (defun c:tex () (command "texte" pause 40 (/(* 180(getangle))pi) (getstring)) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Re, Merci de ta réponse Tramber, C'est un bloc avec attribut que je voudrais pouvoir orienter à l'insertion, par exemple,... J'ai testé ta routine, le texte est par défaut à 40 °, c'est ça ? De plus, il faut taper le texte, non ? A la fin, je me retrouve avec un texte du style "208.9960271670121" ? Bref, j'ai pas tout compris,... Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Tramber Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 40, c'est la hauteur.Mais, vu ton message, y a un problème (peut-être cela dépend-t-il de la version) et effectivement, il faut taper le texte.Ton erreur vient peut-être du nombre de clic, 3 au total avant de taper le texte. 1 clic de posisiton, 2 clics pour l'angle en longeant le mur. Evidement, je n'avais pas compris que c'était un bloc. Du coup, cela n'a rien à voir.C'est facile de faire une routine du même genre pour un bloc portant un nom unique mais je n'ai pas assez d'infos. Je suppose que c'est un bloc avec 1 seul attrib ?Auquel cas : ((command "inserer" "nomdubloc" pause 1 1 (/(* 180(getangle))pi) pause "") devrait fonctionner pour un bloc avec 1 attrib non prédéfini ni constant. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Salut lili & Tramber Un truc vite fait (defun c:alb(/ at bl qs) (vl-load-com) (and (setq bl (entsel "\nVeuillez sélectionner le bloc : ")) (setq bl (car bl)) (assoc 66 (entget bl)) (foreach at (vlax-invoke (vlax-ename->vla-object bl) 'getattributes) (initget 1 "Réference") (redraw (vlax-vla-object->ename at) 3) (setq qs (getreal "\nAngle / Référence [b]<[/b]Angle> : ")) (if (eq qs "Réference") (and (setq pt1 (getpoint "\nPremier point : ")) (setq pt2 (getpoint pt1 "\nSecond point : ")) (setq qs (angle (trans pt1 1 0) (trans pt2 1 0))) ) (setq qs (* pi (/ qs 180.0))) ) (vla-put-rotation at qs) (redraw (vlax-vla-object->ename at) 4) ) ) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Re, Ci-joint quelques blocs représentatifs ! Je n'arrive pas à faire fonctionner ta commande Tramber,.... :mad: Commande: ((command "inserer" "nomdubloc" pause 1 1 (/(* 180(getangle))pi) pause "")(_>(_>(_> Merci encore, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Tramber Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Je n'arrive pas à faire fonctionner ta commande Tramber Hihihi, on voit que tu as copié collé ! Y a juste une parenthèse de trop au tout début ! Patrick est passé par le Vlisp, c'est moins sensible aux différentes versions d'acad et aux attrib. Je regarde tes fichiers mais n'oublie pas de changer "nomdubloc" en "levrainomdetonblocatoi" ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Salut, Je ne comprends pas bien la demande, si le bloc ne contient que l'attribut, c'est au bloc qu'il faut faire subir la rotation, et ça, on peut le faire à l'insertion du bloc, non ?... Il suffit de décaler le point d'insertion en dessous de l'attribut dans les blocs et quand tu insères ton bloc tu spécifies le point d'insertion en t'accrochant à la ligne (PRO ou _NEA) de même pour la rotation. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Re, Merci Patrick_35, Comme mon bloc est constitué, soit de plusieurs attributs (cas du repère poutre, par exemple (B xx (xx X xx ht)), soit d'une lettre fixe et d'un attribut (cas du repère poteau, par exemple (P xx)), voici le résultat de ta routine => http://images4.hiboox.com/images/3408/2d307582061b7c6c0a441328a51f6a86.jpg On voit que ici, le N° du poteau est bien Aligné suivant sa longueur et l'équarrissage de la poutre par rapport à sa longueur,... Problème donc pour le "P" et le "B38" !!! Autrement pour un bloc avec un attribut, c'est parfait ! Pensez-vous que je puisse résoudre mon problème sur ce genre de blocs ? Si oui, peut-on mettre en commande par défaut "R" plutôt que angle ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Tramber Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 J'ai vu tes blocs, malheureusement je dois partir, il y a 2 attrib par bloc, faut juste adapter la routine. Non, je viens de regarder rapidos (command "inserer" "repère Poutre" pause 1 1 (/(* 180(getangle))pi) ) Si ATTREQ est bien à 1, ca va rouler tout seul, il te demandera juste les valeurs d'attrib restantes. Hop, je pars en clientèle, bon WE ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Re, Ok Tramber, j'ai compris l'esprit ! Merci encore ! Bon WE également à toi et ça, on peut le faire à l'insertion du bloc, non ?... Absolument (gile) ! Si je développe ma méthode de travail, tu comprendras mieux mon besoin => 1) J'insère depuis une palette ou autre le bloc "repère" qui m'intéresse,2) Je le copie là ou j'en ai besoin, donc sans me soucier de l'orientation dans un premier temps,3) J'aligne mes blocs "repères" sur les entités concernées4) J'incrémente avec "INCSEL", par exemple. Après plusieurs tests concernant la méthode de travail à utiliser, celle décrite ci-dessus reste la plus rapide pour moi ! Il est fréquent d'avoir 200 ou 300 repères sur un plan de bâtiment et passer son temps à insérer suivant un angle de rotation ou changer de SCU n'est pas satisfaisant ! D'où ma question ! Et si on peut résoudre le problème, alors le 3) sera bien plus rapide et la méthode de travail approuvée ! Merci à vous, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Re, Je ne suis pas sur qu'il soit plus rapide de copier les blocs (2) puis de revenir dessus ensuite (3) pour les aligner, que de les insérer et les aligner dans la foulée. Essaye ce LISP (la routine GetBlock (dans Dialog.lsp en bas de la page) doit être chargée) (defun c:insrot (/ *error* os blk scl ins) (defun *error* (msg) (princ (strcat "\nErreur: " msg)) (setvar "osmode" os) (princ) ) (and (setq blk (getblock nil)) (setq scl (getreal "\Facteur d'échelle: ")) (setq os (getvar "osmode")) (setvar "osmode" 512) (while (setq ins (getpoint "\nPoint d'insertion: ")) (command "_.insert" blk ins scl "" pause) ) ) (setvar "osmode" os) (princ) ) [Edité le 22/8/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Re LiliAvec tous les intervenants, j'ai du mal à comprendre ce que tu souhaites :exclam: Ce serait bien de dire à qui tu donnes ta réponse. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Re, Désolé Patrick_35, La réponse N° 8 t'étais destiné, la 10 à Trambert en premier, puis (gile) ! Ta routine fonctionne parfaitement (gile) ! Mais, elle reprend la valeur des attributs par défaut ! C'est la raison pour laquelle il est plus rapide pour moi de copier-coller un bloc déjà en place car je le renseigne déjà en équarrissage, par exemple pour une poutre (20 x 75 ht) ou encore (35 x 85 ht), etc,... Mais, c'est déjà très bien ainsi ! En fait, l'idéal serait de pouvoir uniquement mettre en rotation un bloc avec attribut déjà en place ! Il m'arrive aussi souvent de reprendre des plans existants, donc cette routine pourrait servir dans plusieurs cas de figure ! Merci encore de vos réponses,. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
bipbip Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Salut Voila un post qui attire plein de specialistes ..... Alors je profite pour vous demander ou je peuxtrouver ce que Lilian appel "Une commande INCSEL ? ou Un lisp de meme nom ? " C'est la reponse qu fait Lilain a Gilles dans ce post. En fait je cherche une possibilite de traiter une moyenne de 200 etiquettes de reservations(passage de chemin de cable dans plan beton) et pour ce faire je dois attribuer un numeroa chaque reservations en incrementation de 1. J'ai suppose que Lilian se servait d'une Commande/Lisp qui est denommer INCSEL ???? J'ai consulte les lisp de Gilles et Patrick ...... Pas vu ????? Merci pour Gilles/Patrick j'ai mis en place le lisp Tabloblo et LSTATT ..... Pures MERVEILLES @+ de vous lire .......
Patrick_35 Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Re, Si j'ai bien compris, tu insères ton bloc et ensuite tu alignes les attributs de ton bloc suivant différents angles. Autrement pour un bloc avec un attribut, c'est parfait !Ou plusieurs. Problème donc pour le "P" et le "B38" !!!Comme c'est un texte dans le bloc, il suffit de sonner l'angle comme l'indique (gile) dans sa réponse 7. Si oui, peut-on mettre en commande par défaut "R" plutôt que angle ?(defun c:alb(/ at bl pt1 pt2 qs) (vl-load-com) (and (setq bl (entsel "\nVeuillez sélectionner le bloc : ")) (setq bl (car bl)) (assoc 66 (entget bl)) (foreach at (vlax-invoke (vlax-ename->vla-object bl) 'getattributes) (setq qs (vla-get-rotation at)) (redraw (vlax-vla-object->ename at) 3) (initget "Angle") (and (/= (vla-get-textstring at) "") (setq pt1 (getpoint "\nRéférence / Angle : ")) (if (eq pt1 "Angle") (and (setq qs (getreal "\nAngle : ")) (setq qs (* pi (/ qs 180.0))) ) (and (setq pt2 (getpoint pt1 "\nSecond point : ")) (setq qs (angle (trans pt1 1 0) (trans pt2 1 0))) ) ) ) (vla-put-rotation at qs) (redraw (vlax-vla-object->ename at) 4) ) ) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Patrick_35 Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Salut bipbipINCSEL se trouve dans Increment sur la page de (gile) En fait je cherche une possibilite de traiter une moyenne de 200 etiquettes de reservations(passage de chemin de cable dans plan beton) et pour ce faire je dois attribuer un numeroa chaque reservations en incrementation de 1.Tu as aussi LATT Merci pour Gilles/Patrick j'ai mis en place le lisp Tabloblo et LSTATT ..... Pures MERVEILLESMerci @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 bipbip, Tu trouveras INCSEL et d'autres commande pour incrémenter des chaînes numériques, alphabétiques ou alphanumériques dans Incrément sur cette page Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 lili2006, Maintenant que j'ai compris ce que tu désires, j'essaye d'y répondre mieux. La routine suivante permet de faire des copies multiple d'un bloc, texte ou mtexte en l'alignant sur les objets (arcs, cercles, ellipses, lignes polylignes, splines) sélectionnés. (defun c:copyalign (/ *error* obj ins a0 ent par ang) (vl-load-com) (defun *error* (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "Erreur: " msg)) ) (vla-EndUndoMark *acdoc*) (princ) ) (and (setq obj (car (entsel))) (setq obj (vlax-ename->vla-object obj)) (member (vla-get-ObjectName obj) '("AcDbBlockReference" "AcDbText" "AcDbMText") ) (or (and (setq ins (getpoint "\nPoint de base ou [b]: ")) (setq ins (vlax-3d-point (trans ins 1 0))) ) (setq ins (vla-get-InsertionPoint obj)) ) (setq a0 (vla-get-Rotation obj)) (while (and (setq ent (entsel "\nSélectionnez la ligne: ")) (setq pt (osnap (cadr ent) "_nea")) (not (vl-catch-all-error-p (setq par (vl-catch-all-apply 'vlax-curve-getParamAtPoint (list (setq ent (car ent)) (setq pt (trans pt 1 0))) ) ) ) ) ) (vla-StartUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) (setq ang (angle '(0 0 0) (vlax-curve-getFirstDeriv ent par))) (if (minusp (cos ang)) (setq ang (- (+ ang pi) a0)) (setq ang (- ang a0)) ) (setq cop (vla-copy obj)) (vla-Move cop ins (vlax-3d-point pt)) (vla-Rotate cop (vlax-3d-point pt) ang) (vla-EndUndoMark (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ) (princ) ) [Edité le 23/8/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Re, Merci Patrick_35 ! ;) Pour moi la V2 de "alb", nickel chrome dans certains cas que j'entrevoi déjà,.... (gile) , c'est presque ça ! Le bloc se positionne bien en fonction de l'entité de "direction" choisi, mais avec un angle par rapport à celle-ci ?? http://images4.hiboox.com/images/3408/43c9f7ac5b338f586b3d8297520b0fbb.jpg Sinon, j'utilise très souvent des multilignes , c'est possible ?? Encore un grand merci à tous les participants, me voilà avec plusieurs solutions qui fonctionnent et que j'utiliserai suivant les besoins,.... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Rere, bipbip J'ai suppose que Lilian se servait d'une Commande/Lisp qui est denommer INCSEL ???? Patrick_35 & (gile) on répondut ! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Rerere, Est-ce que quelqu'un d'autre à tester la routine de (gile) donné dans la réponse N° 18 ? En effet sur ma V2008, j'ai systématiquement un angle entre la ligne d'appui et l'attribut du bloc (Réponse N° 19),... Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lesourd2 Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Salut Est-ce que quelqu'un d'autre à tester la routine de (gile) donné dans la réponse N° 18 ?Pour ma part pas de probleme ni d'angle NICKEL.(MEP 2008) @+ [Edité le 22/8/2008 par lesourd2]
pascool Posté(e) le 22 août 2008 Posté(e) le 22 août 2008 Comme tu as covadis il me semble tu peut faire la rotation soit d'un texte , d'un bloc , d'un attribut selon une polyligne ou tu peut aussi utliser la commande align
lili2006 Posté(e) le 22 août 2008 Auteur Posté(e) le 22 août 2008 Re, Qu'est-ce que c'est que ce cirque,... :mad: Effectivement, j'ai testé sur un autre fichier que celui en cours (je précise, tous les deux en SCG), pas de pb ???!!! Alors, c'est nickel ! Je suis encore tributaire des multilignes, mais cela fonctionne normalement pour les différentes entités que cite (gile) en message N° 18 Merci encore à tous et merci à toi, lesourd2,... pour tes tests qui m'ont fait songer à tester sur un autre plan (mais, ou avais-je la tête,...) EDIT: Ce n'est même pas ça ! En fait, il faut selectionner le bloc de base parallèle à l'axe "X" ! Si l'on Copie-Aligne (Super (gile), cette nouvelle fonction AutoCAD digne [au minimum !] de AutoDESK,... ;) ) depuis un bloc déjà orienté, il garde son angle en plus ! C'est exactement ce qui c'est passé sur l'image ci-dessus !!! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
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