Aller au contenu

ALIGNEMENT ATTRIBUTS


lili2006

Messages recommandés

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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 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

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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ées

4) 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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Voila un post qui attire plein de specialistes ..... Alors je profite pour vous demander ou je peux

trouver 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 numero

a 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 .......

Lien vers le commentaire
Partager sur d’autres sites

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 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

Salut

 

bipbip

INCSEL 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 numero

a 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 MERVEILLES

Merci

 

@+

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

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

Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

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é