lesourd2 Posté(e) le 4 septembre 2007 Partager Posté(e) le 4 septembre 2007 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.@+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 4 septembre 2007 Partager Posté(e) le 4 septembre 2007 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
lesourd2 Posté(e) le 5 septembre 2007 Auteur Partager Posté(e) le 5 septembre 2007 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. @+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 5 septembre 2007 Partager Posté(e) le 5 septembre 2007 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
lesourd2 Posté(e) le 6 septembre 2007 Auteur Partager Posté(e) le 6 septembre 2007 Salut gile Pile poil, c'est exactement ce que je recherchais.Là, je m'incline bien bas.MERCI ENCORE @+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
oran Posté(e) le 12 octobre 2007 Partager Posté(e) le 12 octobre 2007 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...? MerciOran ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 12 octobre 2007 Partager Posté(e) le 12 octobre 2007 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
oran Posté(e) le 12 octobre 2007 Partager Posté(e) le 12 octobre 2007 ..merci Gile, c'est clair, net et précis. Je ne pense pas tjs à faire des combinaisons de lisp.Oran ;) Lien vers le commentaire Partager sur d’autres sites More sharing options...
JUJUZAZA Posté(e) le 17 décembre 2007 Partager Posté(e) le 17 décembre 2007 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 18 décembre 2007 Partager Posté(e) le 18 décembre 2007 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
MarcoTic Posté(e) le 18 décembre 2007 Partager Posté(e) le 18 décembre 2007 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: Lien vers le commentaire Partager sur d’autres sites More sharing options...
JUJUZAZA Posté(e) le 18 décembre 2007 Partager Posté(e) le 18 décembre 2007 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] Lien vers le commentaire Partager sur d’autres sites More sharing options...
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