Blaise31 Posté(e) le 15 mars 2007 Posté(e) le 15 mars 2007 Bonjour tout le monde, :) J'ai un lisp qui permet de réaliser une insertion multiple d'un bloc a partir d'un fichier mais je voudrais avoir la possibilité d'exploser tous les blocs que je viens d'insérer avec une procédure du type:insertion multiple>> Exploser oui/non>>terminer voici le lisp dont je dispose: :casstet: (defun c:INSERTM () (setvar "cmdecho" 0) (if (= XSF nil) (setq XSF 1.0)) (if (= YSF nil) (setq YSF 1.0)) (if (= RTA nil) (setq RTA 0.0)) (if BLK (progn (setq TYP (strcat "\nBlock to Insert: <" BLK "> ")) (setq BLK (if (= (setq CTP (getstring TYP)) "") BLK CTP)) ) (setq BLK (getstring "\nBlock to Insert: ")) ) (setq XS (rtos XSF 2 2)) (setq XSS (strcat "\nX Scale Factor: <" XS "> ")) (setq SFX (atof (getstring XSS))) (if (/= SFX 0.0) (setq XSF SFX)) (setq YS (rtos YSF 2 2)) (setq YSS (strcat "\nY Scale Factor: <" YS "> ")) (setq SFY (atof (getstring YSS))) (if (/= SFY 0.0) (setq YSF SFY)) (setq RA (rtos RTA 2 2)) (setq RAS (strcat "\nRotation Angle: <" RA "> ")) (setq ATR (atof (getstring RAS))) (if (/= ATR 0.0) (setq RTA ATR)) (setq IPT (getpoint "Insertion point: ")) (command "INSERT" BLK IPT XSF YSF RTA "") (command "COPY" "L" "" "M" IPT) ) Merci d'avance!!
stephan35 Posté(e) le 15 mars 2007 Posté(e) le 15 mars 2007 Salut ! Tu rajoutes * devant le nom du bloc pour le décomposer à l'insertion ! (command "INSERT" (strcat "*" BLK) IPT XSF YSF RTA "") oops !tu devras supprimer un des facteurs d'échelle dans la commande .... à toi de trouver lequel ;) A+
stephan35 Posté(e) le 15 mars 2007 Posté(e) le 15 mars 2007 Oops Je veux aller top vite ! (command "COPY" "L" "" "M" IPT) Ne fonctionnera plus àprès l'insertion ! Mais pourquoi le copier ????? :casstet: Tu fais une routine qui demande le point d'insertion,et pour chaque point, tu réinsère ton bloc en le décomposant !et si ton point est nil tu ne fait rien !Voilà ! :D
Patrick_35 Posté(e) le 15 mars 2007 Posté(e) le 15 mars 2007 SalutEt il faudra aussi changer le last de la commande copy, et en plus, une insertion avec "*Nom_du_bloc" ne permet plus de faire la sélection de ce qui à été décomposé, donc actuellement le copy multiple tombe a l'eau.Pour remédier à ce problème, tu fais un (entlast) avant la commande insérer et une fois la manip faite avec insérer "*Nom_du_bloc", un entnext de l'entlast puis des entnext de l'entnext (jusqu'au nil) te permettent de retrouver ce qui à été décomposé afin de pourvoir faire la copie multiple. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Blaise31 Posté(e) le 15 mars 2007 Auteur Posté(e) le 15 mars 2007 Merci beaucoup pour toutes ces réponses, j'ai testé la première solution et en effet, l'insertion du premier élément se réalise nickel :) :) mais a partir de la seconde un seul élément qui compose le bloc est inséré. Je vais essayer les autres solutions. Le but de la copie est de faire une insertion multiple et rapide des éléments. Par contre, j'avoue ma grande inculture mais le entlast et entnext ne sont pas des notions très parlantes pour moi... :red: amicalement, [Edité le 15/3/2007 par Blaise31]
stephan35 Posté(e) le 15 mars 2007 Posté(e) le 15 mars 2007 Malgré la solution de patrick_35 qui fonctionne ... Je continue dans mon explication Tant que je donne cliq point j'inserer le bloc ! boucle du getpoint (while (setq point (getpoint "Donner le point")) (print point) ) boucle d'insertion (while (setq IPT(getpoint "Donner le point")) (command "INSERT" BLK IPT XSF YSF RTA "") (command "_explode" "_l") ) Ce qui donne : (defun c:INSERTM () (setvar "cmdecho" 0) (if (= XSF nil) (setq XSF 1.0)) (if (= YSF nil) (setq YSF 1.0)) (if (= RTA nil) (setq RTA 0.0)) (if BLK (progn (setq TYP (strcat "\nBlock to Insert: <" BLK "> ")) (setq BLK (if (= (setq CTP (getstring TYP)) "") BLK CTP)) ) (setq BLK (getstring "\nBlock to Insert: ")) ) (setq XS (rtos XSF 2 2)) (setq XSS (strcat "\nX Scale Factor: <" XS "> ")) (setq SFX (atof (getstring XSS))) (if (/= SFX 0.0) (setq XSF SFX)) (setq YS (rtos YSF 2 2)) (setq YSS (strcat "\nY Scale Factor: <" YS "> ")) (setq SFY (atof (getstring YSS))) (if (/= SFY 0.0) (setq YSF SFY)) (setq RA (rtos RTA 2 2)) (setq RAS (strcat "\nRotation Angle: <" RA "> ")) (setq ATR (atof (getstring RAS))) (if (/= ATR 0.0) (setq RTA ATR)) (while (setq IPT(getpoint "Donner le point :")) (command "INSERT" BLK IPT XSF YSF RTA "") (command "_explode" "_l") ) ) Que je trouve beaucoup plus propre ! ;) A+
Blaise31 Posté(e) le 15 mars 2007 Auteur Posté(e) le 15 mars 2007 Un grand merci a Stephan35 et Patrick35 pour leurs réponses, j'ai utilisé celle de Stephan qui marche du feu de dieu. Très propre en effet!! Encore merci!! :D :D :D a+ Sujet résolu!!! (L'icone de l'enveloppe est toujours orange mais bon...) [Edité le 15/3/2007 par Blaise31]
stephan35 Posté(e) le 15 mars 2007 Posté(e) le 15 mars 2007 De rien ! Cependant, lorsqu"un problème est résolu, n'oublie pas de cliquer sur l'ampoule ! "Sujet résolu" Merci et à +
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