steelbe Posté(e) le 11 mai 2010 Posté(e) le 11 mai 2010 Bonjour,Je souhaite rendre un programme que j'ai initialement devellopé pour percer dix trous sur la semelle d'une poutrelle plus flexible qui fonction correctement suite à certaine explication que j'ai obtenu sur ce forum. (defun C: holes ( / HP DR ect....)(setq HP (getpoint "`\nHole starting point :")(setq DR (getreal "\nDiametre of hole :")(setq gbc (getreal "\nGap betxeen column :")Suit le rest des valeurs à entre.........(setq HP (polar HP Pi (/ gbc 2)suivie des autre points......(Command "_circle" HP1 ect(Command "_extrud" ...........)suivie entsel pour selectionner la poutrelle(Command "_subtract" ss0 "" ss1 ss2 ss3 ect ......) J'ai commence à le modifier en inserent INIGET 1 "2 4 6 8 10"'setq con_1 (getkword "2/4/6/8/10")INIGET fonctionne et il me demande de choisir le numbre de trous à percer(if (= con_1 2) (progn(setq HP (getpoint "\nHole starting point)suivie des autres valeurs à entresuivie des points ect....cependant le programme ne fonctionne pas ou realise des loop à l'infinie.Comment imbique des conditions pour percer le nombre de trous que je veux? 2 ou 4 ou 6 ou 8 ou 10 Merci d'avance pour l'aide que vous pourriez m'apporter sur cette fonction.
bseb67 Posté(e) le 12 mai 2010 Posté(e) le 12 mai 2010 Salut steelbe, Pour faire des boucles, tu peux utiliser :1) while (setq cpt 0 lg 10) (while (< cpt lg) mon_traitement (setq cpt (1+ cpt)) ) ; while 2) repeat (repeat nb_fois mon_traitement ) ; repeat autres possibilités :3) foreach, mais pour ce cas, il faut une liste4) mapcar, aussi avec une liste Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
bonuscad Posté(e) le 12 mai 2010 Posté(e) le 12 mai 2010 Salut, (if (= con_1 2) (progn Comment imbique des conditions pour percer le nombre de trous que je veux? 2 ou 4 ou 6 ou 8 ou 10 IF n'est pas l'idéal pour réaliser des conditions multiples, il vaudrait mieux te tourner vers COND (setq con_1 (getkword "[2/4/6/8/10]")) (cond ((eq con_1 2) (perce 2 trous)) ((eq con_1 4) (perce 4 trous)) ((eq con_1 6) (perce 6 trous)) ((eq con_1 8) (perce 8 trous)) ((eq con_1 10) (perce 10 trous)) (T (autre condition non prévue, faire l'action appropriée)) ) NB:L'ordre des évaluations peut être important, car dès que COND rencontre une condition valide, les autres conditions ne sont pas évaluées. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
steelbe Posté(e) le 13 mai 2010 Auteur Posté(e) le 13 mai 2010 Bonjour Bonuscad, Sur les deux réponses que j'ai reçu, ta réponse est la plus approprié.Cependant, je n'arrive pas à faire fonctionner le programme.un message d'erreur: erreur fonction....: AUTRE faisant référence à la dernière ligne des conditions:(T(........................))J'ai tenté de placerOu devrais-je placer l'ensemble des valeurs, points de références ainsi que les commandes pour exécuter le programme. Merci
bonuscad Posté(e) le 14 mai 2010 Posté(e) le 14 mai 2010 Salut steelbe, Voici un montage possible du code (en partant de tes quelques lignes originales) (defun c:holes ( / jsel HP DR gbc key_hole id_ent js) (princ "\nSélectionner un solide.") (while (null (setq jsel (ssget "_+.:E:S" '((0 . "3DSOLID"))))) (princ "\nCe n'est pas un solide!") ) (initget 9) (setq HP (getpoint "\nPoint du Trou de départ: ")) (initget 91) (setq DR (getdist HP "\nDiamètre du Trou: ")) (initget 91) (setq gbc (getdist HP "\nEcart entre colonne: ")) (initget "2 4 6 8 10") (setq key_hole (getkword "\nNombre de trous à percer[2/4/6/8/10]? : ")) (command "_.circle" "_none" HP (* DR 0.5)) (command "_.extrude" (entlast) "" pause) (setq id_ent (entlast) js (ssadd)) (cond ((eq key_hole "2") (command "_.-array" (entlast) "" "_rectangular" "2" "1" gbc) ) ((eq key_hole "4") (command "_.-array" (entlast) "" "_rectangular" "2" "2" gbc gbc) ) ((eq key_hole "6") (command "_.-array" (entlast) "" "_rectangular" "2" "3" gbc gbc) ) ((eq key_hole "8") (command "_.-array" (entlast) "" "_rectangular" "2" "4" gbc gbc) ) ((eq key_hole "10") (command "_.-array" (entlast) "" "_rectangular" "2" "5" gbc gbc) ) (T (ssadd (entlast) js) ) ) (if key_hole (progn (ssadd id_ent js) (while (setq id_ent (entnext id_ent)) (ssadd id_ent js) ) ) ) (command "_.subtract" jsel "" js "") (prin1) ) Décortique et si quelque chose t'échappes... Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 19 mai 2010 Posté(e) le 19 mai 2010 Pour répondre à ta demande par MP, il aurait été mieux de faire le suivi sur le forum Ainsi d'autre que moi aurait pu répondre... Donc le code pour un réseau irrégulier (defun c:PERCAGE ( / jsel key_hole id_ent js hole_point hole_diameter hole_depth column_dist column_point lst_pt row_dist1 row_point1 row_dist2 row_point2 row_dist3 row_point3 row_dist4 row_point4) (princ "\nSélectionner un solide.") (while (null (setq jsel (ssget "_+.:E:S" '((0 . "3DSOLID"))))) (princ "\nCe n'est pas un solide!") ) (initget "2 4 6 8 10") (setq key_hole (getkword "\nNombre de trous à percer[2/4/6/8/10]? : ")) (setq id_ent (entlast) js (ssadd)) (initget 9) (setq hole_point (getpoint "\nPoint du Trou de départ: ")) (initget 71) (setq hole_diameter (getdist "\nDiamètre du Trou: ")) (initget 71) (setq hole_depth (getdist hole_point "\nProfondeur du Trou: ")) (cond ((eq key_hole "2") (initget 71) (setq column_dist (getdist hole_point "\nEcart entre colonne: ")) (setq column_point (polar hole_point 0 column_dist)) (setq lst_pt (list hole_point column_point)) ) ((eq key_hole "4") (initget 71) (setq column_dist (getdist hole_point "\nEcart entre colonne: ")) (setq column_point (polar hole_point 0 column_dist)) (initget 71) (setq row_dist1 (getdist hole_point "\nEcart entre la 1ère rangée: ")) (setq row_point1 (polar hole_point (* pi 0.5) row_dist1)) (setq lst_pt (list hole_point column_point row_point1 (list (car column_point) (cadr row_point1) (caddr hole_point)) ) ) ) ((eq key_hole "6") (initget 71) (setq column_dist (getdist hole_point "\nEcart entre colonne: ")) (setq column_point (polar hole_point 0 column_dist)) (initget 71) (setq row_dist1 (getdist hole_point "\nEcart entre la 1ère rangée: ")) (setq row_point1 (polar hole_point (* pi 0.5) row_dist1)) (initget 71) (setq row_dist2 (getdist row_point1 "\nEcart entre la 2ème rangée: ")) (setq row_point2 (polar row_point1 (* pi 0.5) row_dist2)) (setq lst_pt (list hole_point column_point row_point1 (list (car column_point) (cadr row_point1) (caddr hole_point)) row_point2 (list (car column_point) (cadr row_point2) (caddr hole_point)) ) ) ) ((eq key_hole "8") (initget 71) (setq column_dist (getdist hole_point "\nEcart entre colonne: ")) (setq column_point (polar hole_point 0 column_dist)) (initget 71) (setq row_dist1 (getdist hole_point "\nEcart entre la 1ère rangée: ")) (setq row_point1 (polar hole_point (* pi 0.5) row_dist1)) (initget 71) (setq row_dist2 (getdist row_point1 "\nEcart entre la 2ème rangée: ")) (setq row_point2 (polar row_point1 (* pi 0.5) row_dist2)) (initget 71) (setq row_dist3 (getdist row_point2 "\nEcart entre la 3ème rangée: ")) (setq row_point3 (polar row_point2 (* pi 0.5) row_dist3)) (setq lst_pt (list hole_point column_point row_point1 (list (car column_point) (cadr row_point1) (caddr hole_point)) row_point2 (list (car column_point) (cadr row_point2) (caddr hole_point)) row_point3 (list (car column_point) (cadr row_point3) (caddr hole_point)) ) ) ) ((eq key_hole "10") (initget 71) (setq column_dist (getdist hole_point "\nEcart entre colonne: ")) (setq column_point (polar hole_point 0 column_dist)) (initget 71) (setq row_dist1 (getdist hole_point "\nEcart entre la 1ère rangée: ")) (setq row_point1 (polar hole_point (* pi 0.5) row_dist1)) (initget 71) (setq row_dist2 (getdist row_point1 "\nEcart entre la 2ème rangée: ")) (setq row_point2 (polar row_point1 (* pi 0.5) row_dist2)) (initget 71) (setq row_dist3 (getdist row_point2 "\nEcart entre la 3ème rangée: ")) (setq row_point3 (polar row_point2 (* pi 0.5) row_dist3)) (initget 71) (setq row_dist4 (getdist row_point3 "\nEcart entre la 4ème rangée: ")) (setq row_point4 (polar row_point3 (* pi 0.5) row_dist4)) (setq lst_pt (list hole_point column_point row_point1 (list (car column_point) (cadr row_point1) (caddr hole_point)) row_point2 (list (car column_point) (cadr row_point2) (caddr hole_point)) row_point3 (list (car column_point) (cadr row_point3) (caddr hole_point)) row_point4 (list (car column_point) (cadr row_point4) (caddr hole_point)) ) ) ) (T (setq lst_pt (list hole_point)) ) ) (setvar "cmdecho" 0) (mapcar '(lambda (x) (command "_.circle" "_none" x "_Diameter" hole_diameter) (command "_.extrude" (entlast) "" hole_depth) ) lst_pt ) (if key_hole (progn (ssadd id_ent js) (while (setq id_ent (entnext id_ent)) (ssadd id_ent js) ) ) (ssadd (entlast) js) ) (command "_.subtract" jsel "" js "") (setvar "cmdecho" 1) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
steelbe Posté(e) le 8 juin 2010 Auteur Posté(e) le 8 juin 2010 Merci BONUSCAD, Le code que tu à posté fonctionne à merveille. :)
steelbe Posté(e) le 27 août 2010 Auteur Posté(e) le 27 août 2010 Bonjour à tous, Toujours dans la même optique de rendre mes code lisp plus conviviale, j'ai crée un dcl à utiliser pour insérer des profiles IPE et HEA. ce dialogue comprend deux popup_list. Une regroupant les deux types de profile étant IPE et HEA et un deuxième popup_list avec les différentes hauteurs de poutrelle ex: 80 100 120 140 etc........ J'ai compris le fonctionnement de (COND) cependant, je me heurt à un problème pour l'évaluation de la condition à appliquer car le code devra évaluer deux conditions simultanément étant le type (I ou H) ainsi que la hauteur 100 120 etc ... provenant des popup_list. Apres de nombreux essais la boite de dialogue apparait, je définis les valeurs que je souhaite mais il ne me dessine qu'une section le HEA 100 cela provient peut être des valeurs initialisé dans le lisp. Peut-etre existe t-il un code pour effectuer cette étape. Merci pour l'aide que vous pourrez m'apporter sur se problème.
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