Aller au contenu

DEPLACEMENT ATTRIBUT


Messages recommandés

Posté(e)

Salut a TOUS,

 

J'ai decouvert hier soir un LISP de gile (que je remercie au passage) suite au post de lili2006 concernant la modif de hauteur des attributs de blocs.

J'aurai une requete dans le meme genre à savoir: un LISP qui permettrait de deplacer (sens haut/bas & gauche/droite, au choix) les attributs spécifiés d'une selection de blocs.

BATTMAN et synchroniser ne convient pas cela fait changer tous les attributs.

 

Merci par avance.

@+

Posté(e)

Salut,

 

Je ne vois pas bien ce que tu veux faire précisément, donc voici deux petits LISP pour un usage général.

Le premier déverrouille la position de l'attibut sélectionné et "gripp" le bloc, il suffit donc de prendre l'attribut par sa poignée pour le déplacer.

Le second vérouille la position de l'attribut sélectionné.

 

(defun c:dever-att (/ att elst)
 (and
   (setq att (car (nentsel "\nSélectionnez un attribut: ")))
   (setq elst (entget att))
   (= "ATTRIB" (cdr (assoc 0 elst)))
   (entmod (subst '(280 . 0) (assoc 280 elst) elst))
   (sssetfirst nil (ssadd (cdr (assoc 330 elst))))
 )
 (princ)
) 

 

(defun c:ver-att (/ att elst)
 (and
   (setq att (car (nentsel "\nSélectionnez un attribut: ")))
   (setq elst (entget att))
   (= "ATTRIB" (cdr (assoc 0 elst)))
   (entmod (subst '(280 . 1) (assoc 280 elst) elst))
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Je ne vois pas bien ce que tu veux faire précisément

 

En fait j'ai recu un plan avec une bonne centaine de blocs et les attributs sont calés par-dessus ,donc on en vois qu'une partie(cela m'arrive assez souvent).

Cela m'aurait evité de selectionner chaque attribut pour les deplacer.

Une selection des blocs concernés et une commande de decalage et le tour est joué.

 

Mais bon on peut toujours rever.

 

MERCI quand meme.

 

@+

Posté(e)

Salut,

 

Le problème avec les attributs (ou tout autre composant d'un bloc) c'est qu'en LISP on ne peut les sélectionner qu'un par un. Un jeu de sélection fonctionne sur les blocs insérés, pas sur les "sous-entités".

On peut donc aisément récupérer tous les attributs de tous les blocs d'un jeu de sélection, mais pour n'en avoir que certains il faudrait les trier (par leurs étiquettes par exemple).

Je te propose donc un LISP vite fait qui déplace tous les attributs des blocs du jeu de sélection, si tu souhaitait une sélection plus pointue, fais moi signe, j'essayerais de trouver le temps de faire quelque chose.

 

(defun c:move-att (/ ss p1 p2 dep)
 (vl-load-com)
 (if (and
(setq ss (ssget '((0 . "INSERT") (66 . 1))))
(setq p1 (getpoint "\nSpécifiez le point de base: "))
(setq p2 (getpoint p1 "Spécifiez le deuxième point: "))
     )
   (progn
     (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
     (vla-StartUndoMark acdoc)
     (vlax-for	ref (vla-get-ActiveSelectionSet acdoc)
(if (setq att (vlax-invoke ref 'getAttributes))
  (foreach a att
    (vla-move a (vlax-3d-point p1) (vlax-3d-point p2))
  )
)
     )
     (vla-EndUndoMark acdoc)
   )
 )
 (princ)
) 

 

[Edité le 5/9/2007 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 1 mois après...
Posté(e)

Bonjour,

....il n'est pas évdent pour nous d'être tjs demandeur lorsque l'on y connait rien en programmation , on a l'impression de passer pour des " casse pieds " . Mais lorsque l'on tombe sur tous ces lisp (les tiens et ceux des autres également), tous aussi intérressants les uns que les autres on ne peut pas s'empêcher de demander des améliorations afin d'adapter ceux-ci selon nos besoins particuliers et c'est encore le cas ici :cool:

Ne pourrait-on avoir l'alternative du choix, je m'explique:

- 1) soit l'on déplace l'attribut (ou les attributs) des blocs sélectionnés uniquement.

- 2) soit l'on déplace l'attribut (ou les attributs) de tous les blocs portant le même nom que celui sélectionné. ;)

It's possible...? Merci

Oran

;)

Posté(e)

Salut,

 

Si tu travailles avec PICKFIRST à 1 (sélection nom-verbe) tu peux utiliser SsMatch (commandes ssm ou ssmm) pour faire ta sélection de tous les blocs du même nom, et ensuite lancer move-att

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 2 mois après...
Posté(e)

bonsoir à tous

 

je trouve super intéressant le lisp de gile.

moi, je voulais juste savoir si on pouvais déplacer uniquement les attributs sélectionnes ,

par exemple, dans mon cas, j'ai des blocs avec ++ attributs , et très souvent je dois décaler certains attributs, mais pas tous,

est-ce possible gile?

 

Merci d'avance

 

Posté(e)

Salut,

 

Voilà, les attributs doivent être sélectionnés un par un.

 

(defun c:move_att (/ lst p1 p2)
 (while (setq att (car (nentsel "\nSélectionnez un attribut: ")))
   (and
     (= (cdr (assoc 0 (entget att))) "ATTRIB")
     (setq lst (cons att lst))
     (redraw att 3)
   )
 )
 (if (and lst
   (setq p1 (getpoint "\nSpécifiez le point de base: "))
   (setq p2 (getpoint p1 "Spécifiez le deuxième point: "))
     )
   (progn
     (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
     (vla-StartUndoMark acdoc)
     (foreach a lst
(redraw a 4)
(vla-move (vlax-ename->vla-object a)
	  (vlax-3d-point p1)
	  (vlax-3d-point p2)
)
     )
     (vla-EndUndoMark acdoc)
   )
 )
 (princ)
) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bravo (Gile)

Bien vu à tout les intervenant de ce post, j'ai aussi parfois le même problème et ce lisp va m'aider.

Mais comme Oran Je me permet de passé pour un casse pied.

En plus du déplacement des attributs selectionnés est-il envisageable de leur appliquer une rotation.

Lorsque certains blocs sont proches les un des autres, et que pour des raison d'echelle, on ne puisse réduire la hauteur des attributs, appliquer une rotation à ces attributs pour qu'ils soit verticale permet d'éviter qu'ils ne se chevauchent.

C'est pas clair tout ça :exclam:

Posté(e)

RE

 

Super gile , tes 2 lisps fonctionnent super bien, je prends ...!!!

 

si j'ai bien compris , on ne peut pas obtenir 1 déplacement suite à un jeu de sélection, c'est soit le bloc entier soit un attribut à la fois.

 

et si, en forçant le déplacement de certaines étiquettes uniquement , c'est faisable ?

 

dans mon cas, j'ai 1 bloc avec 3 étiquettes à déplacer qui se nomment:

 

"numeroPorte"

"etage"

"escalier"

 

nom du bloc "chambre"

 

c'est faisable d'avoir le jeu de sélection des blocs pour déplacer uniquement qq. étiquettes (attributs) ?

Merci d'avance

 

[Edité le 18/12/2007 par JUJUZAZA]

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é