Aller au contenu

Messages recommandés

Posté(e)

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!!

Posté(e)

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+

Posté(e)

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

Posté(e)

Salut

Et 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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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]

Posté(e)

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+

Posté(e)

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]

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é