Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J'ai une macro qui me permet d'insérer un bloc avec une répétition * : la commande est répétée jusqu'à ce que l'utilisateur appuie sur Echap.

 

 *^C^C-INSERER;MON_NOM_DE_BLOC;E;1;R;0;

 

Le problème, c'est que si le bloc n'existe pas dans le dessin, autocad indique qu'il n'a pas trouvé le bloc et la commande recommence en boucle. Et il est impossible de l'arrêter (Ctrl-C ou Echap ne répondent pas)

 

Bilan, on est obligé de tuer autocad (à moins que l'on ait défini BARRESTACHES à 1 et que l'on appuie sur Alt-Tab).

Attention, pour tuer Autocad, il faut préalablement réduire la fenêtre avec les touches Windows-M (je vous le dit parce si vous essayez, vous risquez d'être embêté).

 

Comment pourrai-je faire pour stopper la macro ? Est-ce que INSERER peut retourner une info utilisable dans une expression conditionnelle ?

 

Merci pour votre aide !

 

Thomas

Posté(e)

Salut,

 

Je ne suis pas sûr qu'on puisse tester la présence d'un bloc dans la collection en Macro/Diesel.

 

Si tu es sur une version pleine, on peu faire ça en LISP, mais le plus simple est de mettre ton bloc (fichier créé avec WBLOC) dans un répertoire du chemin de recherche et il sera toujurs disponible.

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

Posté(e)

Salut

 

Une astuce d'un vieux routier ;)

Tu mets le chemin complet pour le nom du bloc.

 

Par exemple

*^c^c_.-insert;"c:/test/dwg/armoire/bobine/bob1.dwg";_s[i];[/i]1;_r;0;

 

Si le bloc est existant dans le dessin, Autocad l'insère sans le redéfinir.

S'il n'existe pas, il va le rechercher à l'emplacement désigné et l'insérer.

 

ps :

Le chemin complet peut-être mis avec des guillements afin de permettre les espaces dans les noms de répertoires et/ou fichiers.

La version de la macro que je donne est le même que la tienne mais en langage international (cela permet d'être tranquille lors de changement de version et nos amis canadiens sont contents).

 

_.-insert = .-inserer

_s = scale = échelle

_r = rotate = rotation

 

@+

 

Edit : correction d'une faute d'orthographe

 

[Edité le 7/2/2008 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Peut être une ruse en employant la variable "INSNAME"

En plus cela permettrait à la macro de fonctionner avec n'importe quel bloc (sans attribut et sans espace dans le nom)

 

INSNAME contient le dernier nom utilisé ET valide de la commande INSERER.

 

Ce qui pourrait donner:

 

*^C^C_.-INSERT;$M=$(if,$(strlen,$(getvar,insname)),$(getvar,insname),$(eval,^C^C));/1;1;0; 

 

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Ben, on saura jamais quelle solution a résolu ton problème :exclam:

 

Le chemin complet ou l'usage de "insname"....

 

Les LTésiens resteront sur leur faim. :mad: à moins que la précision soit apportée. :P

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Oups...

 

Mille excuses, j'ai posté un peu vite. J'ai implémenté la solution de Patrick, qui remplit parfaitement son office.

 

Et j'ai copié sur mon bureau la solution de Bonuscad pour l'analyser plus finement en temps perdu car il me faut comprendre les expressions LISP. Je ne connais que la signification de l'acronyme LISP :-), pas plus. Pour l'utilisation d'un langage structuré, je me suis contenté de VBA.

 

Merci en tout cas !

 

Thomas

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é