Aller au contenu

Rotation d'un attribut de bloc


Netparty

Messages recommandés

Bonjour à tous

 

Voila, je suis à la recherche d'un LISP qui permet de faire une rotation d'un attribut d'un bloc.

J'ai déjà trouver se genre de LISP mais il fait une rotation de tous les attributs du bloc,

ce que je souhaite c'est de faire une rotation uniquement sur l'attribut sur lequel je clic.

 

Si vous avez une idée pour moi.

 

Je vous en remercie d'avance.

 

Bon weekend à tous

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

En préambule il faudrait savoir si tu veux apprendre ou si tu es à la recherche d'un truc "clés en main"

Si tu as un LSP qui fait tous les attributs il ne reste qu'à bidouiller sur le jeu de sélection

Tu ne dis pas si tu veux pouvoir donner la valeur de rotation graphiquement ? une valeur angulaire précise ? se référer à une entité existante ?

Dis tout ça et la solution arrivera

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Netparty,

 

Il n'y a pas besoin de lisp pour faire ce que tu souhaites.

Tu peux te créer un bloc dynamique en créant un paramètre de rotation et une action de rotation sur ton attribut.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Sinon, il y a aussi le lisps de notre regretté Patrick_35, rot0, si tu souhaites que l'attribut ou les attributs de ton bloc soit toujours horizontaux.

 

ou sinon, tu peux te créer un style de texte annotatif pour tes attributs et cocher faire correspondre à la présentation, si tu souhaites que l'attribut soit toujours horizontal.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous

 

merci pour vos réponses, un peu plus de précision dans ma demande par rapport à vos réponse :

 

- Le Lisp que j'ai trouvé fonctionne bien si je veux changer tous les attributs du bloc en une fois, mais comme je n'y connais rien en programmation lisp je suis incapable de le modifier

- pour la rotation je souhaiterais qu'au clic l'attribut sur le quel je clic fasse une rotation de 90°

- je n'utilise pas de bloc dynamique, car je fait beaucoup d'extraction de quantité et j'ai déjà rencontré quelques soucis

 

donc je cherche un truc simple et rapide a chaque clic 90° de plus à l'attribut

 

Merci

 

bonne journée

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Il s'agit d'un code basique mais fonctionnel pour ce que tu recherches :

(defun c:ATTROT (/ name)

   (while (and (setq name (car (nentsel "\nVeuillez cliquer sur un attribut : ")))
               (= (cdr (assoc 0 (entget name))) "ATTRIB")
          )
       (entmod (subst (cons 50 (+ (cdr (assoc 50 (entget name))) (/ pi 2.0))) (assoc 50 (entget name)) (entget name)))
   )
   (if name
       (prompt "\nErreur : L'objet sélectionné n'est pas un attribut")
       (prompt "\nFin de la commande")
   )
   (princ)

)

 

Bisous,

Luna

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Pas mieux,

Le temps de l'écrire Luna a déjà publié, bravo

Je pense que c'est résolu mais on va attendre l'avis de l'auteur de la question.

Je proposais (sans vérification du genre de la sélection)

---------------------------------


(defun c:rotatt ( / att )
 (setq att (car (nentsel "\nAttribut ?\n")))
 (entmod (subst (cons 50 (+ (/ pi 2) (cdr (assoc 50 (entget att)))))(assoc 50 (entget att))(entget att) ))
 )
[/color][/font][font="Courier New"][color="#0000FF"] 

---------------------------------

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

La question de départ portait sur une rotation d'un quart de tour de l'attribut et on a répondu dans ce sens mais je ne vais pas faire la mauvaise tête

Je te propose donc ça :

----------------------------------

(defun c:rotattdir ( / att)
 (setq att (car (nentsel "\nAttribut ?\n")))
 (if ( equal '(0 0 0) (cdr (assoc 11 (entget att))))
(setq pins (cdr (assoc 10 (entget att))))
(setq pins (cdr (assoc 11 (entget att))))
)
 (setq dir (+ (/ pi 2)(getangle pins "\nDirection ?\n")))
 (entmod (subst (cons 50 dir) (assoc 50 (entget att))(entget att)))
 (entupd att)
 )

----------------------------------

Ça va te permettre de choisir dynamiquement une direction

Soit dit en passant : si tu veux bien relire la réponse 4 de REBCAO elle est très efficace.

 

Amicalement

Modifié par (gile)
Suppression des bbcodes à l'intérieur du code
Lien vers le commentaire
Partager sur d’autres sites

Hello Mr Pineau / Cognac

 

1) MERCI pour ta routine RotAttDir !

 

2) Maitre Didier : SVP puis je solliciter de ta haute bienveillance une version 2 !?

 

Debut = IDEM de la v1

 

- Traitement des blocs statiques et dynamiques

 

- Mais apres on pose une autre question, selection des eventuels autres blocs + attributs a traiter ?

(MEME Nom de Bloc Statique ou Dynamique + Meme Nom d attribut bien sur)

et TOUS les Attributs de Blocs concernes tournent aussi relativement avec l angle ...

( Attention 1 seul Attribut TOURNE par Bloc : celui designe au DEPART )

 

Vois tu ce que je veux dire ??

 

Merci d'avance, LA SANTE, Bye, lecrabe "triste"

Automne 2020, la retraite

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 5 mois après...

Voici le LISP modifié qui demande l'angle avant de l'appliquer sur les attributs qu'on souhaite faire une rotation.

Un clic en dehors d'un attribut ou la touche échap pour sortir.

 

;;; 
;;; Change la rotation d'un attribut de bloc
;;; 
;;; 

(defun c:ROTATT ( / newrotatt selatt objatt)

 (vl-load-com)
 (setq newrotatt (getangle "\nAngle : "))
 (while (/= (setq selatt (nentsel "\nSélectionner l'attribut à changer de rotation :")) nil)
   (setq objatt (vlax-ename->vla-object (car selatt)))
   (if (= (vla-get-ObjectName objatt) "AcDbAttribute")
     (progn
       (vla-put-rotation objatt newrotatt)
     )
   )
 )
 (princ)
)

;;; 
;;; Fin Lisp ROTATT
;;; 

 

 

Voici le LISP source dont j'ai modifié la finalité :

 

;;; 
;;; Change le calque d'un attribut à partir d'un nouveau calque
;;; Le calque doit être créé avant, pas de déroulement de liste pour le choisir
;;; 

(defun c:layatt ( / newcal selatt objatt)

 (vl-load-com)
 (setq newcal (getstring "\nNom du nouveau calque : "))
 (while (/= (setq selatt (nentsel "\nSélectionner l'attribut à changer de calque:")) nil)
   (setq objatt (vlax-ename->vla-object (car selatt)))
   (if (= (vla-get-ObjectName objatt) "AcDbAttribute")
     (progn
       (vla-put-layer objatt newcal)
     )
   )
 )
 (princ)
)

;;; 
;;; Fin Lisp LAYATT
;;; 

 

Une version "améliorée" de ce LISP au passage :

 

;;; 
;;; Change le calque d'un attribut à partir d'un attribut source
;;; 

(defun c:coplayatt ( / selattsource objattsource newcal selatt objatt)

 (vl-load-com)
 (setq selattsource (nentsel "\nSélectionner l'attribut source:"))
 (setq objattsource (vlax-ename->vla-object (car selattsource)))
 (setq newcal (vla-get-layer objattsource))
 (while (/= (setq selatt (nentsel "\nSélectionner l'attribut à changer de calque:")) nil)
   (setq objatt (vlax-ename->vla-object (car selatt)))
   (if (= (vla-get-ObjectName objatt) "AcDbAttribute")
     (progn
       (vla-put-layer objatt newcal)
     )
   )
 )
 (princ)
)

;;; 
;;; Fin Lisp COPLAYATT
;;; 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

Bonjour,

Super le lisp

Le 20/06/2020 à 17:06, didier a dit :

 

(defun c:rotattdir ( / att)
 (setq att (car (nentsel "\nAttribut ?\n")))
 (if ( equal '(0 0 0) (cdr (assoc 11 (entget att))))
(setq pins (cdr (assoc 10 (entget att))))
(setq pins (cdr (assoc 11 (entget att))))
)
 (setq dir (+ (/ pi 2)(getangle pins "\nDirection ?\n")))
 (entmod (subst (cons 50 dir) (assoc 50 (entget att))(entget att)))
 (entupd att)
 )
 

 

 

Ma question est comment le modifier pour faire un déplacement au lieu d'une rotation.

Merci

Lien vers le commentaire
Partager sur d’autres sites

En super basique, sans lisp, tu ctrl+clique sur tous les attributs dont tu veux modifier l'orientation (ils apparaissent sélectionnés en rouge) et dans les propriétés tu changes la rotation, et il va tourner chaque attribut à l'angle que tu as rentré dans les propriétés.

Tout est dans le ctrl+clique.

Anciennement ZZA427 sur CADXP, je ne fais quasiment plus d'Autocad, mais je viens voir si la partie REVIT du Forum est active.

 

Un crédo que j'aime bien : Nul n'est si vieux qu'il ne puisse apprendre, nul n'est si jeune qu'il ne puisse enseigner.

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é