Aller au contenu

aide pour grand debutant


Messages recommandés

Posté(e)

bonjours a tous,

je suis vraiment ce qui s'appelle un debutant en autolisp,

mon but est de faire une serie de commande pour accelerer le dessin dans un bureau des methodes.

j'ai fait un tout petit "programme" qui est censé dessiner une corniere vue de profil par entree de ces dimensions (je vous le livre ci-dessous)

Malheureusement il ne marche pas.

Je souhaite aussi dessiner 2 autres vues (face et dessus), d'où la demande de la longueur.

Est-il possible de definir un point ou des commandes par des variables (ex: (setq pt1 '(0 long)) ou bien (command "_rectang" "0,0" "long,larg") ) sachant que larg et long serait demandees avant a l'utilisateur.

 

 

mon code:

 

[surligneur] (defun c:corniere()

(setq aile1 (getint "longueur de la premiere aile:"))

(setq aile2 (getint "longueur de la deuxieme aile:"))

(setq ep (getint "epaisseur:"))

(setq long (getint "longueur de la corniere:"))

(setq pt1 '(aile1 0))

(setq pt2 '(aile1 ep))

(setq pt3 '(ep ep))

(setq pt4 '(ep aile2))

(setq pt5 '(0 aile2))

(setq pt6 '(0 0))

(command "_pline" pt6 pt1 pt2 pt3 pt4 pt5 pt6)

)[/surligneur]

 

merci pour votre aide eventuelle.

[surligneur] [/surligneur]

 

[Edité le 23/10/2005 par binocles]

Posté(e)

Salut,

 

La commande pline nécessite des points, soit sous la forme de coordonées absolues dans le SCU (x y [z]) soit sous la forme de coordonnées polaires (polar PointDépart AngleRadians Distance).

Au vu des entrées utilisateurs de ton code la seconde méthode s'impose.

 

D'autre part, il est prudent, de désactiver l'accrochage aux objets pour éviter qu'un accrochage actif (extrémité par exemple) ne prime sur les coordonnées définies dans le code.

 

Il est aussi préférable de déclarer les variables locales (après le slash) pour qu'elle soient "anihilées" (renvoyée à nil) à la fin de la routine.

 

Ton code "corrigé" :

(defun c:corniere (/ accrobj aile1 aile2 ep long pt1 pt2 pt3 pt4 pt5); Déclaration des variables locales
 ;; Enregistrement de l'accochage aux objets
 (setq accrobj (getvar "osmode"))
 ;; Désactivation des accrochages aux objet
 (setvar "osmode" 0)
 ;; Entrées utilisateur
 (setq aile1 (getint "longueur de la premiere aile:"))
 (setq aile2 (getint "longueur de la deuxieme aile:"))
 (setq ep (getint "epaisseur:"))
 (setq long (getint "longueur de la corniere:"))
 ;; Positionnement des points
 (setq pt1 (polar '(0 0) 0 aile1))
 (setq pt2 (polar pt1 (/ pi 2) ep))
 (setq pt3 (polar pt2 pi (- aile1 ep)))
 (setq pt4 (polar pt3 (/ pi 2) (- aile2 ep)))
 (setq pt5 (polar pt4 pi ep))
 ;; Création de la polyligne fermée, "_c" pour clore
 (command "_pline" '(0 0) pt1 pt2 pt3 pt4 pt5 "_c")
 ;; Restauration de l'accrochage aux objets
 (setvar "osmode" accrobj)
 (princ)
) 

 

Il serait aussi possible de faire choisir à l'utilisateur le point d'origine de la cornière avec un

(setq pt0 (getpoint "\nCoin de la cornière: "))

pour remplacer le '(0 0).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

merci, je pense comprendre ton code

en fait j'ai pas pris de securite et j'ai ecrit comme si je parlais ce qui ne convient pas vraiment

2 questions encore:

 

la fonction polar, peut on dire que c'est une redefinition de l'origine, un peu comme un changement d'origine sur une machine cn???

 

que veut dire le therme (/ pi 2)?

 

merci de ton aide,je comprends mieu la logique lisp (enfin un peu...)

 

Posté(e)

Re,

 

Ton code n'était pas si loin d'être fonctionnel. La principale erreur vient de la manière dont tu définis les points : l'apostrophe avant les paranthèses est l'équivalent de la fonction (quote) qui retourne une expression sans l'évaluer. C'est nécessaire, par exemple, quand un point est définis par des nombres réels ou entiers '(0 0) ou (quote (0 0)) retourne (0 0), mais '(aile1 0) retourne (aile1 0) sans évaluer aile1. Il eut fallu écrire (list aile1 0) pour définir un point avec la valeur de aile1.

 

la routine aurait pu être (sans définir de nouvelles variable pour chaque point) :

(defun c:corniere (/ accrobj aile1 aile2 ep long)
 (setq accrobj (getvar "osmode"))
 (setvar "osmode" 0)
 (setq aile1 (getint "longueur de la premiere aile:"))
 (setq aile2 (getint "longueur de la deuxieme aile:"))
 (setq ep (getint "epaisseur:"))
 (setq long (getint "longueur de la corniere:"))
 (command "_pline"
   '(0 0)
   (list aile1 0)
   (list aile1 ep)
   (list ep ep)
   (list ep aile2)
   (list 0 aile2)
   '(0 0)
   ""  ; Équivalent de "Entrée" pour clore la commande
   )
 (setvar "osmode" accrobj)
) 

 

Le choix que j'ai fait d'utiliser la fonction (polar) plutôt que les coordonnée absolues, est lié au fait que cette fonction est plus facile à utiliser en cas de point de départ défini par l'utilisateur, comme pourrait l'être l'angle de la première ailette par exemple.

Tu pourrais insérer dans ton code :

(setq pt0 (getpoint "\nCoin de la cornière: ")
angle (getangle pt0 "\nAngle de la première ailette: ")
pt1 (polar pt0 angle aile1)
pt2 (polar pt1 (+ angle (/ pi 2)) ep)
pt3 (polar pt2 (+ angle pi) (- aile1 ep))
etc...

 

La fonction polar est un peu l'équivalent de la saisie des coordonnées polaires relative (quand on fait : @40

 

Je ne peux pas te dire par rapport à une machine cn (commandes numériques, c'est çà ?), je n'en ai jamais utilisé.

 

que veut dire le therme (/ pi 2)?

Çà veut dire pi (3.14159...) divisé par 2, pour pi sur 2 radians soit 90°.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour Binocles, Bienvenu sur CADxp,

 

Si tu veux développer le LISP ? Tu pourras trouver ton bonheur dans ce Support LISP Base, à l'adresse ci-dessous. Il contient justement un exercice qui consiste à dessiner une "pièce Paramétrée"...

 

http://perso.wanadoo.fr/rebcao/site06-telpaie.htm

 

;) Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

merci a tous pour votre aide,

je suis arrivé à bout de ma corniere (aux autres profils maintenant...).

Il faut encore que je bosse le lisp pour les angles mais je cherche par moi meme avant de demander de l'aide.

Je me demande aussi si on peut faire passer la ligne de la vue de face en trait interrompu?

Je place le code ci-dessous pour une petite critique eventuelle...

 

[surligneur] (defun c:corniere (/ accrobj aile1 aile2 ep long rec1 rec2 rec3 rec4 l1 l2)

(setq accrobj (getvar "osmode"))

(setvar "osmode" 0)

(setq aile1 (getint "longueur de la premiere aile:"))

(setq aile2 (getint "longueur de la deuxieme aile:"))

(setq ep (getint "epaisseur:"))

(setq long (getint "longueur de la corniere:"))

(command "_pline"

'(0 0)

(list aile1 0)

(list aile1 ep)

(list ep ep)

(list ep aile2)

(list 0 aile2)

'(0 0)

"" ; Équivalent de "Entrée" pour clore la commande

)

(setq rec1 (+ aile1 100))

(setq rec2 (+ aile1 100 long))

(command "_rectang"

(list rec1 0)

(list rec2 aile2)

)

(command "_line"

(list rec1 ep)

(list rec2 ep)

""

)

(setq rec3 (- 0 100))

(setq rec4 (- rec3 aile1))

(command "_rectang"

(list rec1 rec3)

(list rec2 rec4)

""

)

(setq l1 (+ rec4 ep))

(command "_line"

(list rec1 l1)

(list rec2 l1)

""

)

(setvar "osmode" accrobj)

) [/surligneur]

 

et merci encore.

Posté(e)

Salut,

 

Je me demande aussi si on peut faire passer la ligne de la vue de face en trait interrompu?

 

Tu peux utiliser la commande _CHPROP en insérant ce bout de code juste après la création de la ligne concernée :

(command "_chprop"
   (entlast)  ; Dernière entité créée
   ""  ; Validation de la sélection
   "_lt"  
   "cache"  ; Type de ligne
   ""
 ) 

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Salut,

 

Je t'encourage fortement à persévérer dans ton apprentissage du LISP et te souhaite d'y trouver autant de plaisir que moi...

 

Mais pour te faire gagner du temps dans le dessin des profilés, tu peux trouver ici un utilitaire plutôt bien fait.

 

 

[Edité le 27/10/2005 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

merci, mais j'avais deja trouvé ce programme.

Malheureusement, il ne dessine que la vue de cote et pas les vues suivant la longueur.

Je continue de toute facon avec autolisp en essayant de compliquer un peu plus a chaque fois.

Je veux pouvoir dessiner des profils avec des angles et pourquoi pas des percages.

 

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é