Aller au contenu

Multiple Copier-Aligner


bonuscad

Messages recommandés

Bonjour,

 

Une routine toute simple, mais qui pourra peut être vous rendre service.

 

Elle vous permet de sélectionner un ou plusieurs objets, d'en effectuer une copie et de l'aligner suivant 2 points: c'est à dire sans changement d'échelle.

Ceci d'une manière répétitive en donnant à chaque fois les 2 points de destination.

 

Elle utilise l'ARX standard geom3d.arx

 

(defun c:Mult_Align ( / pt_o1 pt_o2 pt_d1 pt_d2)
(setvar "cmdecho" 0)
(if (not (member "geom3d.arx" (arx))) (arxload "geom3d.arx"))
(princ "\nChoisir les objets à aligner de façon multiple.")
(cond
	((ssget)
		(initget 9)
		(setq pt_o1 (getpoint "\n1er point origine: "))
		(initget 9)
		(setq pt_o2 (getpoint "\n2ème point origine: "))
		(initget 8)
		(while (setq pt_d1 (getpoint "\n1er point destination: "))
			(command "_.copy" "_previous" "" "*0.0,0.0,0.0" "*0.0,0.0,0.0")
			(initget 9)
			(setq pt_d2 (getpoint "\n2ème point destination: "))
			(command "_.align" "_previous" "" pt_o1 pt_d1 pt_o2 pt_d2 "" "_no")
			(setq
				pt_o2 (polar pt_d1 (angle pt_d1 pt_d2) (distance pt_o1 pt_o2))
				pt_o1 pt_d1
			)
			(initget 8)
		)
	)
	(T (princ "\nSélection vide!"))
)
(setvar "cmdecho" 1)
(princ)
)

 

 

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

J'ai testé le lisp et il fonctionne bien chez moi.

 

Par contre, ça sert à quoi de faire le arxload ? J'ai mis cette ligne en remarque chez moi et ça continue de marcher.

Peut-être ça sert à s'assurer de disposer de la commande align ?

 

Mais pourquoi vouloir utiliser la commande align, s'il n'y a pas de mise à l'échelle. La commande rotation devrait faire l'affaire.

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 du retour,

 

Concue sous une 2002, je n'ais pas ce problème, donc difficile d"en identifier la cause.

 

Cependant je penche pour 2 hypothèses, soit

1-

(if (not (member "geom3d.arx" (arx))) (arxload "geom3d.arx"))

pose problème si la commande "_align" ne fait plus partie d'un ARX. Pour faire le test, virer cette ligne,

vérifier que la commande _align est bien effective avant de lancer la routine.

 

2-

Le message d'erreur parlant de caractère, il pourrait s'agir de "*" qui est mal interprété

Tu peux alors essayer de faire le test en remplacant les 2 chaines "*0.0,0.0,0.0" par (trans '(0.0 0.0 0.0) 1 0)

 

Si toujours pas concluant, alors pas de solution, il faudrait qu'un lispeur sous 2004 ou 2005 puisse t'aider

 

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

Lien vers le commentaire
Partager sur d’autres sites

Effectivement je suis bien sur 2004

 

et c'est l'hypothèse 1 qui est la bonne.

1-

(if (not (member "geom3d.arx" (arx))) (arxload "geom3d.arx"))

pose problème si la commande "_align" ne fait plus partie d'un ARX. Pour faire le test, virer cette ligne,

vérifier que la commande _align est bien effective avant de lancer la routine.

 

Merci. ;)

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é