Aller au contenu

Commande GROUP Petit casse tête


nakapuf

Messages recommandés

Pour des raisons de facilté et rapidité, et lorsque je n'ai pas à garder un ensemble d'entités par la suite j'utilise l'excellente commande GROUP.

A savoir, je sélectionne les objets désirés, et je tape GROUP, ou je clique sur l'icone que j'ai créée à cet effet. Ceci me produit un bloc qui prend la dénomination $GROUP01, $GROUP02, ....etc suivant le nombre de $GROUP qui existent déja.

Mon problème est le suivant : Comme je fais la même opération sur tous les dessins, et qu'en suite il reste toujours quelques $GROUPXX, lorsque je j'insére mon dessin dans un autre par la commande coller, je me retrouve avec des entités non désirées, a divers endrois. En fait les blocs se transformes en ceux qui ont le même nom dans le dessin.

Question : Existe t'il une variable qui annule ce changement d'un bloc par un autre quand il vient d'un autre dessin ?

Ou alors comment peut-on ecrire un programme en lisp permettant de renommer d'un coup tous les $GROUPXX avec un nom generique qui serait par example les premieres lettre de l'affaire de laquelle le plan est issu, tout en gardant les numeros des differents blocs. Il y a bien la commande renommer, mais losque qu'il y a une vingtaine de blocs, c'est un peu pénible. J'ai essayé de faire un lisp, mais je ne m'y connais pas assez pour pouvoir mener a bien ce programme.

Merci d'avance, à ceux qui connaissent bien le lisp, et qui pourront m'aider à résoudre ce casse tête. :casstet:

Lien vers le commentaire
Partager sur d’autres sites

C'est d'autant plus un casse tête que je ne comprend pas le sujet. Il s'agit de renommer des blocs, je suppose.

 

Le plus simple est d'insérer une commande _-RENAME dans une boucle WHILE.

 

(defun c:renblock ()

 

(setq PRE (getstring "PREFIXE : ")) ; le nouveau préfixe

(setq B (tblnext "block" T)) ; pointer sur le début du tableau des blocs

(While B

(setq NOM (cdr (assoc 2 B))) ; extraire le nom

(if (/= (substr NOM 1 1) "*") ; pas les blocs sans nom

(command "_-RENAME" "BL" NOM (strcat PRE NOM)) ; renommer

)

(setq B (tblnext "block")) ; pointer sur le suivant

)

)

 

 

Voilà, j'espère que ça convient. Un point que je n'ai pas vérifié : avant de faire le rename il faudrait vérifier si le nom de bloc n'existe pas déjà.

 

[Edité le 27/10/2003 par zebulon_]

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

Merci Zebulon pour ta réponse, ton programme fonctionne bien. C'est un peu ce que je voulais faire, mais je ne veux renommer que les blocs qui porte le nom $GROUP en leur laissant le numéros de création qu'ils ont reçu lor de l'incrémentation. Cepandant je desire supprimer la chaine "$GROUP" :casstet:

 

Example :

Si prefixe = "PAJ" Ton programme fait sur un liste de blocs quelconque :

 

PAJ$GROUP01

PAJ$GROUP08

PAJ$GROUP20

PAJBOULE

PAJCUBE

 

Alors que j'aimerais faire :

 

PAJ01

PAJ08

PAJ20

BOULE

CUBE

 

de sorte que les "vrais" nom de bloc ( boule ou cube ) garde leur nom d'origine.

 

S'il te reste quelques quelques minutes pour te pencher sur ton petit programme et surtout si ce que je cherche est possible, merci d'avance de bien vouloir essayer de faire une derniere modif qui accederait a ce que je souhaite.

Il faudrait d'ailleur que je me penche une fois pour toute sur la programmation, parce que j'ai plein d'idées de commande pour me simplifier la vie, mais je n'ai pas les connaissances nécéssaires pour les réaliser.

 

Merci encore.

Lien vers le commentaire
Partager sur d’autres sites

(defun c:renblock ()

 

(setq PRE (getstring "PREFIXE : ")) ; le nouveau préfixe

(setq B (tblnext "block" T)) ; pointer sur le début du tableau des blocs

(While B

(setq NOM (cdr (assoc 2 B))) ; extraire le nom

(if (= (strcase (substr NOM 1 6)) "$BLOCK") ; uniquement ceux qui doivent être renommés

(command "_-RENAME" "_BL" NOM (strcat PRE (substr NOM 7 (strlen NOM)))) ; renommer

)

(setq B (tblnext "block")) ; pointer sur le suivant

)

)

 

C'est presque pareil ... Attention, je n'ai toujours pas vérifié les éventuels doublons.

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Lien vers le commentaire
Partager sur d’autres sites

  • 6 ans après...

excellents lisp (les deux !)

 

Néanmoins j'ai un petit probleme... (va falloir que j'apprenne le language lisp !)

Dans le second lisp, l'application ne renomme QUE les blocs contenant "$" en remplacant $ par le nouveau préfixe rentré dans la commande.

 

dans mon cas les préfixes à modifier sont différents à chaque fois !

 

N'y a t'il pas moyen que le lisp demande le préfixe a remplacer avant de demander le nouveau au lieu d'aller modifier à chaque fois le préfixe dans le lisp ?

 

(dailleurs j'ai le meme probleme avec les calques... :casstet: )

poser une question c'est prendre le risque de paraitre bete 5 minutes. ne pas en poser c'est prendre le risque de le rester toute sa vie.

Lien vers le commentaire
Partager sur d’autres sites

(va falloir que j'apprenne le langage lisp !)

Bienvenu au club ;)

 

N'y a t'il pas moyen que le lisp demande le préfixe a remplacer

de la même manière qu'on demande le nouveau préfixe, avec la fonction getstring

 

d'ailleurs j'ai le même problème avec les calques..

Au lieu d'aller parcourir la table des "BLOCK", il faudra parcourir la table des "LAYER". Sinon, le principe est le même.

 

Amicalement

Vincent

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

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é