• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

Répéter la séquence AutoLisp insérée dans l'élément de menu

  • Auteur du sujet Auteur du sujet Gio_S
  • Date de début Date de début

Gio_S

Guest
Bonsoir à tous, je me suis demandé s'il y avait une chance de répéter, clic droit, non seulement la dernière commande exécutée, mais aussi les éléments de menu que j'ai créés avec des séquences courtes dans autolisp.
Je suis né du problème parce que je voudrais agir continuellement, avec des tirs répétés, en sélectionnant les unités de cadauna, en rappelant simplement l'élément de menu qui vient d'être exécuté.
Malheureusement, si je viens d'exécuter le code de fichier inséré dans l'élément de menu personnalisé, et que je clique sur le bouton droit de la souris, mon intellicad va certainement reproposer la dernière commande exécutée, mais se référant à la commande automatique régulière, dernière, que j'avais exécutée plus tôt. ma commande "custom" écrite dans autolisp ne "se souvient plus".
Je ne sais pas si j'étais clair...
Je vous remercie !
G.
 
Je ne sais pas si ça marche en k... mais en autocad dans un élément de menu en appliquant un * au code / commande d'élément de menu vous obtenez la répétition jusqu'à ce que vous entrez ctrl-c.

une alternative peut définir une commande (c:...) ie:
Code:
[voce di menu]^c(defun c:mio_comando ( ) . . . . . (c:mio_comando)
afin qu'en l'envoyant soit répété .
 
Merci pour les conseils, mais où dois-je mettre l'astérisque dans le menu? C'est la voix.[Block positive X scale]^c^c^p(setq spex(entget(car(entsel))))(setq ox (assoc 41 spex))+ (prompt (strcat "écriture positive x")(setq nx (* -1(cdr ox)))+ (setq spex(subst(cons 41 nx)(assoc 41 spex)spex)+ (entmod spex)(setq ox (assoc 41 spex))(principaux) ^pavec la commande c dans le lisp que j'ai essayé, et cela fonctionne la répétition, mais j'utilise pour mettre autant de fonctionnalités dans un édit sololisp défunt. . donc, ça marche oui, mais ça me donne le choix entre toutes mes commandes du lisp de fichier.
Je devrais rompre cette fonction moi-même, mais je suis réticent à rompre mes extensions ..
De toute façon dans le c, je viens d'entrer la commande avec la sélection habituelle, donc elle agit sur les blocs que j'ai envoyés à la boucle, et cela m'accélère quand même... et par la façon dont elle évite l'erreur si elle ne trouve pas les blocs (ce qui m'arrive dans le menu s'ils choisissent une autre entité qui n'est pas un bloc).

Mais je suis curieux pour l'astérisque... J'ai essayé différentes positions, dans certains donne une erreur de commande non reconnue, dans d'autres ne prend pas en compte et la commande ne fait rien .. Je ne comprenais pas bien où mettre l'astérisque
Je vous remercie !
 
mille mercis ! testé maintenant, rien, mon intellicad ne donne pas d'erreur mais l'ignore, la répétition utilise la commande précédente, donc j'ai enlevé le doute et vous remercie, et à la fin j'ai rendu l'édition robuste au moyen d'un bloc de lisp inséré dans mon extension d'utilisation générale.
mon code "short" du menu a de nombreux inconvénients, donne erreur si ce n'est pas un bloc, ne met pas en évidence l'objet, et surtout échange le signe de x, au cas où il est déjà positif le rend négatif. pour ne bénéficier de personne, mais je mets le code final correct.
J'ai trouvé une étrange éventualité dans tant de modèles de mes archives pour stl. souvent en utilisant le miroir de tout le modèle, par exemple pour une demi-voiture, tous les blocs miroirs avaient le signe de x transformé en négatif.
sans conséquences pour le cad de conception parce qu'il s'agit de blocs symétriques, spéculaires dans l'axe ... mais tout faux dans le stl parce que chaque face du bloc a échangé l'intérieur/extérieur en raison de l'ordre opposé qui a supposé les sommets. Quel désastre dans l'ardoise.
J'ai fait une routine pour réparer les visages après un miroir, mais évidemment m'a laissé les blocs "inverses". une fois explosé (dans les archives je ne tiens certainement pas les blocs explosés) pour transférer le tout dans le stl, chacun leur visage était faux (vert 1,2,3 est devenu 3,2,1)

Code:
(défun positivexgrid()(setq memblock 0)
(prompt "\nrende positive la scala x nei blocchi selezionati <point cro="" las="" pre="" win="">.")
(setq selez(ssget))
(si(/= selz zéro)
(progrès)
(modalite)(setq l(longueur selez)(setq l(1-l))(setq a 0)
(alors que (<= a l))
(progrès)
(setq ename(sssname selez a))(setq alist(entget ename)))
(si(= "insérer"(cdr(assoc 0 alist)))
(progrès)
(setq ename(ssname selez a)))
(setq spex(nom d'entget))
(setq ox (assoc 41 spex))
(si (< (cdr ox) 0)
(progrès)
(prompt (strcat "\nwriting x signe"))
(setq nx (* -1(cdr ox))))
(setq spex(subst(cons 41 nx))
(assoc 41 spex)spex)
(Entmod spex)
(setq ox (assoc 41 spex))
(setq memmblock 1)
)
)
)
)
)
(setq a(1+ a))
)
(si(/= memblock 0)
(prompte "\nx réussi".)
(prompt "\nno bloc sélectionné". ")
)
(ripristine)
)
)
)</point>
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut