DenisHen Posté(e) le 20 mai 2006 Posté(e) le 20 mai 2006 Bonsoir à tous, Voilà, j'ai fait un petit Lisp pour dessiner un pilier (carré ou rectangulaire) en :- cliquant le premier point du pilier- cliquant sa direction- en cliquant ou en entrant la première dimension- en cliquant ou en entrant la deuxième dimension Si la deuxième dimension est négative, le pilier sera du coté gauche de la première ligne, sinon il sera à droite.Si la deuxième dimension est nulle, elle sera égalle à la première dimension (donc un pilier carré)...Alors voilà le code que j'ai fais... Mais il ne fait pas de pilier mais une sorte de trapèze... Je pose une question à la fin de la routine pour savoir s'il faut dessiner un croisillon dans le pilier.. Mais là Lisp me dit qu'il y a trop d'argument... Voici mon code : (defun c:PhPile (); (nom = PhPile) (setvar "cmdecho" 0) (setq p1 (getpoint "\nCoin de la pile : ")) (setq Ori (getorient p1 "\nDirection de la pile : ")) (setq Ori (atof (angtos Ori (getvar "AUNITS") 2))) ;(angtos ang (getvar "AUNITS") 4) (setq Lo (getdist "\nLongeur de la pile : " p1)) (setq p3 (polar p1 Ori Lo)) (setq La (getdist "\nLargeur de la pile : " p1)) (if (= La 0) (setq Lo La)) ;(princ "Ori= ") (princ Ori) (cond ((< La 0) (princ "\nCoté négatif") (setq p4 (polar p3 (- Ori 100) La)) ) ((= La 0) (princ "\nCoté positif") (setq p4 (polar p3 (+ Ori 100) Lo)) ;(setq p4 (polar p3 (+ (atof Ori) 100) Lo)) ) ((> La 0) (princ "\nCoté positif") (setq p4 (polar p3 (+ Ori 100) La)) ) ) (princ "\nPoint 5") (setq p5 (polar p1 (+ Ori 100) La)) (command "-calque" "e" "Limites (Mur)" "") (command "_.pline" "_non" p1 "_non" p3 "_non" p4 "_non" p5 "c") (initget "Oui Non") (if (= (getkword "\nDessiner un croisillon ? (Oui/Non): ") "Oui") ;(if (= Rep "Oui") (command "-calque" "e" "Limites (Mur Hachure)" "co" "8" "" "") (command "_.line" "_non" p1 "_non" p4 "") (command "_.line" "_non" p3 "_non" p5 "") ) ) Nota : je travail en grade, sens horaire et le nord en hautMa ligne de menu qui configure mon dessin est : [Conven&tion topo]^C^C-unites;2;2;3;2;0,0;@0,1;O;pdmode;32;pdsize;.1;PLINEGEN;1;-couleur;ducalque;^C^Cfiledia;1;attdia;1;-typeligne;a;ducalque;;ecrangra;-calque;e;"Titre Cache";co;6;;t;a;;ch;0;; Un grand merci d'avance pour vos réponses... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 20 mai 2006 Auteur Posté(e) le 20 mai 2006 J'ai oublié... Je pense que le problème vient de là : (setq Ori (atof (angtos Ori (getvar "AUNITS") 2))) Je n'arrive pas à rester en grades et dans le sens horaire avec l'origine au nord... Merci Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 20 mai 2006 Posté(e) le 20 mai 2006 Salut, Juste en jetant un coup d'oeil. L'argument angle pour POLAR doit être exprimé en radians (/ pi 2) et pas 100. La fonction if : (if testexpr thenexpr [elseexpr]) n'accepte que 2 ou 3 arguments :- condition- action si la condition est remplie- action si elle ne l'est pas (optionnel)Dans ton code il y a 3 (command ... après le if.Si tu veux exécuter plusieurs choses dans une même action il faut les grouper dans un (progn ... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 20 mai 2006 Auteur Posté(e) le 20 mai 2006 Mille merci à toi (gile) ! ! C'est vraiment génial quand ça marche... J'ai encore un petit problème de sens (figure à droite ou à gauche...) Et un autre pour le cas ou "La" (largeur) égalle rien...Mais c'est génial ! ! Voici donc la routine corrigée : (defun c:PhPile () (setvar "cmdecho" 0) (setq p1 (getpoint "\nCoin de la pile : ")) (setq Ori (getorient p1 "\nDirection de la pile : ")) (setq Lo (getdist "\nLongeur de la pile : " p1)) (setq p3 (polar p1 Ori Lo)) (setq La (getdist "\nLargeur de la pile : " p1)) (if (= La 0) (setq La Lo)) (cond ((< La 0) (setq p4 (polar p3 (+ Ori (/ pi 2)) (abs La))) (setq p5 (polar p1 (+ Ori (/ pi 2)) (abs La))) ) ((= La 0) (princ "\nLa=0") (setq p4 (polar p3 (- Ori (/ pi 2)) (abs Lo))) (setq p5 (polar p1 (- Ori (/ pi 2)) (abs Lo))) ) ((> La 0) (setq p4 (polar p3 (- Ori (/ pi 2)) (abs La))) (setq p5 (polar p1 (- Ori (/ pi 2)) (abs La))) ) ) (command "-calque" "e" "Limites (Mur)" "") (command "_.pline" "_non" p1 "_non" p3 "_non" p4 "_non" p5 "c") (initget "Oui Non") (if (= (getkword "\nDessiner un croisillon ? (Oui/Non): ") "Oui") (progn (command "-calque" "e" "Limites (Mur Hachure)" "co" "8" "" "") (command "_.line" "_non" p1 "_non" p4 "") (command "_.line" "_non" p3 "_non" p5 "") ) ) ) Encore un grand MERCI à (gile) ! ! Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 21 mai 2006 Auteur Posté(e) le 21 mai 2006 Je n'ai pas testé la version qui est ci-dessus... Tout fonctionne à merveille, sauf pour le cas ou "La" est nul. Il ne dessine rien, j'ai pourtant mis (if (= La 0) (setq La Lo)) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 21 mai 2006 Posté(e) le 21 mai 2006 Si tu veux qu'on ne puisse pas affecter 0 à la variable La, tu peux faire un :(initget 2) juste avant :(setq La (getdist "\nLargeur de la pile : " p1)) Voir la fonction INITGET dans l'aide, il peut être interressant de l'utiliser pour tous les (getXXX.... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 21 mai 2006 Auteur Posté(e) le 21 mai 2006 Bonjour (gile) Merci de tes réponses En fait, j'aimerai pouvoir ne rien entrer pour la largeur ce qui induirait un carré, La = Lo... (setq Lo (getdist "\nLongeur de la pile : " p1)) [surligneur] =>Saisi de la longueur [/surligneur] (setq p3 (polar p1 Ori Lo)) (setq La (getdist "\nLargeur de la pile : " p1)) [surligneur] =>Saisi de la largeur [/surligneur] (if (= La 0) (setq La Lo)) [surligneur] =>Si la largeur est "" ou 0, alors c'est un carré donc La = Lo [/surligneur] Je pense mon code correcte, mais si rien est entré à la demande setq La, quid de La, c'est vide, nul, égal à 0, à "" ? ? (if (= La 0) (setq La Lo)) Merci encore et bon dimanche.... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 21 mai 2006 Posté(e) le 21 mai 2006 mais si rien est entré à la demande setq La, quid de La, c'est vide, nul, égal à 0, à "" ? ? Essaye,avec la console VisualLISP qui sert à çà, ou directement à la ligne de commande. Tu entres (setq La (getdist "\nLargeur de la pile : ")) puis tu interroges pour avoir la valeur de La, à la ligne de commande : Commande: (setq La (getdist "\nLargeur de la pile : ")) Largeur de la pile :nil Commande: !Lanil avec la console : http://img106.imageshack.us/img106/6808/console8qz.png Ce sachant, deux solutions, exiger une entrée valide avec (initget (+ 1 2)) ou accepter 0 ou nil comme entrée et affecter la valeur de Lo dans un cas ou dans l'autre. Je te laisse chercher. [Edité le 21/5/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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