CadXP: Rotation d'un attribut de bloc - CadXP

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Rotation d'un attribut de bloc

#1 L'utilisateur est hors-ligne   Netparty 

  • ceinture orange
  • Groupe : Membres
  • Messages : 20
  • Inscrit(e) : 07-avril 19

Posté 20 juin 2020 - 08:44

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
0

#2 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8 589
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 20 juin 2020 - 09:29

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
0

#3 L'utilisateur est hors-ligne   Steven 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3 901
  • Inscrit(e) : 03-mars 03
  • LocationDans le TARDIS

Posté 20 juin 2020 - 11:26

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 la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.
En rêve; AutoCAD sous Linux.
0

#4 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 7 301
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

Posté 20 juin 2020 - 13:48

Bonjour,

Tu peux aussi utiliser cette MACRO :

*^C^C-attedit;_Y;;;;\;_A;0;;

Christian
Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger des Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#5 L'utilisateur est hors-ligne   Steven 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3 901
  • Inscrit(e) : 03-mars 03
  • LocationDans le TARDIS

Posté 20 juin 2020 - 14:06

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 la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.
En rêve; AutoCAD sous Linux.
0

#6 L'utilisateur est hors-ligne   Netparty 

  • ceinture orange
  • Groupe : Membres
  • Messages : 20
  • Inscrit(e) : 07-avril 19

Posté 20 juin 2020 - 14:20

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
0

#7 L'utilisateur est hors-ligne   Luna 

  • ceinture bleue
  • Groupe : Membres
  • Messages : 190
  • Inscrit(e) : 27-février 20

Posté 20 juin 2020 - 14:46

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
0

#8 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8 589
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 20 juin 2020 - 14:53

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

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

A
micalement

0

#9 L'utilisateur est hors-ligne   Netparty 

  • ceinture orange
  • Groupe : Membres
  • Messages : 20
  • Inscrit(e) : 07-avril 19

Posté 20 juin 2020 - 15:57

Merci Luna et Didier pour votre aide,
les 2 lisp fonctionne à merveille.

Encore une petite question est-il possible de choisir l'angle de rotation avant de cliquer sur l'attribut.

Encore un tout grand merci

Bon weekend
0

#10 L'utilisateur est hors-ligne   didier 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8 589
  • Inscrit(e) : 18-décembre 02
  • LocationPlanète : Terre

Posté 20 juin 2020 - 16:06

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

Ce message a été modifié par (gile) - 20 juin 2020 - 16:33 .
Raison de l'édition : Suppression des bbcodes à l'intérieur du code

0

#11 L'utilisateur est hors-ligne   Netparty 

  • ceinture orange
  • Groupe : Membres
  • Messages : 20
  • Inscrit(e) : 07-avril 19

Posté 21 juin 2020 - 07:19

Bonjour Didier

Encore merci

Bonne fin de week-end
0

#12 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 9 447
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42) Forez

Posté 24 juin 2020 - 08:06

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
0

#13 L'utilisateur est hors-ligne   JPhil 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 17
  • Inscrit(e) : 11-octobre 17

Posté 26 novembre 2020 - 12:47

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

0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)