GautierVsr Posté(e) le 28 juin 2022 Posté(e) le 28 juin 2022 Bonjour, Néophyte sur Autolisp, je cherche à déplacer des objets 3D de mon espace graphique Autocad, sans que l'utilisateur n'ai à intervenir. L'utilisateur n'intervient qu'une seule fois, au début, pour sélectionner tous les objets qui seront à déplacer (tous les objets du jeu de sélection). Voici mon code pour le moment : (defun c:coffrage() (setq jeu (ssget)) (repeat (setq compteur (sslength jeu)) (setq objetadeplacer (ssname jeu 0)) ;déplacer objetadeplacer (nom du premier élément de ma liste de jeu) de la valeur d'un certain vecteur (setq jeu (cdr (jeu))) ) )
Luna Posté(e) le 28 juin 2022 Posté(e) le 28 juin 2022 Coucou, Il va falloir donner un peu plus d'explications car à ce stade, je ne comprends pas où on peut gagner du temps par rapport à la commande déplacer... Parce que sinon l'exercice peut se faire directement via un (command) >_< Bisous, Luna
GautierVsr Posté(e) le 29 juin 2022 Auteur Posté(e) le 29 juin 2022 Pas de soucis, je contextualise : Dans ma boite, nous faisons des pièces en bois qui étaient, jusqu'à maintenant, coupées et assemblées par nos menuisiers. La découpe est longue et fastidieuse et dans le but de faciliter cette tâche, nous avons acheté une machine de découpe de plaques de contreplaqués de 21mm d'épaisseur. Mon entreprise me demande de créer un programme sur AutoCad permettant plusieurs choses : À partir d'un assemblage de pièces 3D, séparer/éclater (en les déplaçant) tous les objets « solide 3D » afin qu’ils ne soient pas en conflit en vue en plan Orienter tous les pièces dans le même sens (pour chaque pièce, la plus petite épaisseur (de 21mm) doit être alignée avec l'axe Z ; reviendrait à dire "plus grande surface doit être normale à l'axe Z") Il me faut donc dans un premier temps, séparer chaque solide et les espaçant tous les uns des autres par en vecteur qui sera définit pas l'utilisateur de préférence. Suite à ca, il faudrait que mes pièces soient orientée dans le sens de Z. En fait, la machine va digérer le dwg final en analysant la géométrie de chaque pièce en vue en plan. Voili voilou, j'espère avoir été assez clair ! :))
didier Posté(e) le 29 juin 2022 Posté(e) le 29 juin 2022 Bonjour @GautierVsr Dans les explications il est question de 2D et de 3D, pourquoi ? Les solides sont simples ou plus évolués ? Cubes et parallélépipèdes ou surfaces gauches ? Je ne comprends pas le coup de "alignée en Z", ça veut dire "vue en plan" tout simplement ? Un fichier serait le bienvenu. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
GautierVsr Posté(e) le 29 juin 2022 Auteur Posté(e) le 29 juin 2022 Bonjour @didier, Il s’agit de solides simples, cubes et parallélépipèdes. Je viens de mettre en lien une note explicative imagée, j'espère être plus clair dans mes explications ! Explication LISP.pdf
didier Posté(e) le 29 juin 2022 Posté(e) le 29 juin 2022 Bonjour @GautierVsr OK, rien à voir avec la 3D donc. Je ne sais pas comment se nomme cette opération, mais je dirais "mise en plan des éléments". On peut avoir le DWG car j'ai pas spécialement envie de le refaire pour tester. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 29 juin 2022 Posté(e) le 29 juin 2022 @didier, tu t'en occupes ? 😉 Donc si je comprends bien, le but est de déplacer chaque pièce non pas d'une distance équivalente de la position initiale mais de N fois la distance spécifiée en fonction de la position des objets dans le jeu de sélection, right ? Donc le premier objet du jeu de sélection sera à 0 x Distance et le dernier objet N du jeu de sélection sera à N x Distance ? Bisous, Luna
GautierVsr Posté(e) le 29 juin 2022 Auteur Posté(e) le 29 juin 2022 Bonjour @didier, Non, rien à voir avec la forme des solides, je cherche juste à leur affecter un déplacement chacun, puis à bien les orienter indépendamment les uns des autres. S'il y a une fonction permettant cela, je suis preneur ! 😄 mais ca m'étonnerait...du moins de je la trouve pas 😢 Yes, je te mets le dwg en lien ! Coffrage 3D.dwg
GautierVsr Posté(e) le 29 juin 2022 Auteur Posté(e) le 29 juin 2022 C'est exactement ça pour la première étape @Luna ! Voici le code que j'ai pour le moment mais il ne fonctionne pas (je crois que le getreal ne va pas)...je sens quand même que je suis sur la bonne voie : (defun c:test() (setq distance_deplacement (getreal "Renseigner ecartement des objets")) (setq p0 '(0.0 0.0)) (setq p1 '(distance_deplacement 0.0)) (setq index_objet_a_deplacer (0)) (setq jeu (ssget)) (setq objet (ssname jeu index_objet_a_deplacer)) (repeat (setq i (sslength jeu)) (command "deplacer" objet "" p0 p1) (setq objet (ssname (1+ jeu index_objet_a_deplacer))) (setq distance_deplacement (* distance_deplacement jeu index_objet_a_deplacer)) ) ) Merci pour le temps que vous m'accordez ! 🙂
didier Posté(e) le 29 juin 2022 Posté(e) le 29 juin 2022 @GautierVsr Il semble que tu aies compris l'esprit, mais que tu ne saches pas transformer le langage naturel en lsp As-tu testé ton code ? Je dirais que non, car tu devrais poser des questions sur les messages d'erreur provoqués. En même temps je ne pense pas que le déplacement doit être une valeur constante en réfléchissant un petit peu. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
GautierVsr Posté(e) le 30 juin 2022 Auteur Posté(e) le 30 juin 2022 Bonjour @didier, J'ai essayé mon code, le message d'erreur en sortie est "erreur fonction incorrect: 0". Je ne sais pas comment interpréter ce message, ni comment desceller mon/mes erreurs. De l'aide serait la bien venue. Chaleureusement
didier Posté(e) le 30 juin 2022 Posté(e) le 30 juin 2022 Bonjour @GautierVsr De l'aide, pas de souci... Préférez-vous que j'explique en langage naturel ce qui ne va pas ? Ou dois-je fournir un code corrigé ? Les deux sont possibles et dépendent de votre implication dans l'apprentissage. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
GautierVsr Posté(e) le 30 juin 2022 Auteur Posté(e) le 30 juin 2022 Bonjour @didier, Un code corrigé serait bien, je comprendrai mes erreurs par la suite. Update, voici la dernière version de mon code qui s’exécute mais qui ne déplace pas les objets comme souhaité : (defun c:coffrage() (command "-purger" "tout" "*" "oui") (command "ZOOM" "etendu") (setq distance_deplacement (getreal "Renseigner ecartement des objets")) (setq p0 '(0.0 0.0)) (setq p1 '(distance_deplacement 0.0)) (setq index_objet_a_deplacer 0) (setq jeu (ssget)) (setq objet (ssname jeu index_objet_a_deplacer)) (repeat (sslength jeu) (command "deplacer" objet "" p0 p1) (setq index_objet_a_deplacer (1+ index_objet_a_deplacer)) (setq objet (ssname jeu index_objet_a_deplacer)) (setq distance_deplacement (* distance_deplacement index_objet_a_deplacer)) ) ) Chaleureusement
bonuscad Posté(e) le 30 juin 2022 Posté(e) le 30 juin 2022 Bonjour, Voici comment je corrige ton code actuel, je te laisse consulter (et comprendre) les nuances entre les deux. (defun c:coffrage ( / distance_deplacement p0 p1 index_objet_a_deplacer jeu objet) (command "_.-purge" "_all" "*" "_yes") (command "_.ZOOM" "_extent") (initget 7) (setq distance_deplacement (getreal "\nRenseigner ecartement des objets: ")) (setq p0 '(0.0 0.0)) (setq p1 (list distance_deplacement 0.0)) (setq index_objet_a_deplacer 0) (setq jeu (ssget)) (repeat (sslength jeu) (setq objet (ssname jeu index_objet_a_deplacer)) (command "_.move" objet "" p0 p1) (setq index_objet_a_deplacer (1+ index_objet_a_deplacer)) (setq p1 (list (+ (car p1) distance_deplacement) 0.0)) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
GautierVsr Posté(e) le 30 juin 2022 Auteur Posté(e) le 30 juin 2022 Super, merci beaucoup @bonuscad! Il fallait effectivement que je définisse un nouvel objet à chaque fois en début de boucle repeat et que je redéfinisse correctement P1 à chaque "moulinage" dans la boucle
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