Aller au contenu

Messages recommandés

Posté(e)

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 haut

Ma 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)

Posté(e)

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)

Posté(e)

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

Posté(e)

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)

Posté(e)

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)

Posté(e)

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

Posté(e)

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)

Posté(e)

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

nil

 

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

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é