Aller au contenu

Erreur dans mon lisp


Messages recommandés

Posté(e)

Bonjour,

 

J'aurais besoin de votre aide :D

Comme je suis novice en lisp j'essaye d'apprendre et je comprend pas l'erreur :( .

J'ai un problème avec mon lisp (ci-joint) pour créer un rectangle une erreur de commande ?

 

Mercie d'avance de votre aide

Meilleures salutations

rect.lsp

  • Upvote 1
Posté(e)

Tu as une version anglaise ?

il faut mettre "_line" et ne pas oublier de gérer les accrochages aux objets.

Pour height et weight, utlise mieux GETREAL que GETINT. ;)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

et il faut changer (commande "line" pt1 pt2 pt3 pt4 pt1 "") par

(command "line" pt1 pt2 pt3 pt4 pt1 "").

 

 

Bonjour,

 

J'aurais besoin de votre aide :D

Comme je suis novice en lisp j'essaye d'apprendre et je comprend pas l'erreur :( .

J'ai un problème avec mon lisp (ci-joint) pour créer un rectangle une erreur de commande ?

 

Mercie d'avance de votre aide

Meilleures salutations

Posté(e)

Merci pour votre aide :D

En effet c'est plutôt "command" ;)

J'ai même changé le "line" par "_pline" c'est plus sympa une polyligne :) .

Pour ce qui est de la gestion des accrochages aux objets ça je sais pas encore faire :( .

 

Est-il possible de demander si il y a un angle ou par un clic par deux points ?

 

 

Merci d'avance

Posté(e)

Pour ce qui est de la gestion des accrochages aux objets ça je sais pas encore faire :( .

Le plus simple est de forcer l'accrochage sur "AUCUN" ("_NONE") pour chaque point spécifié :

(command "_pline" "_non" pt1 "_non" pt2 "_non" pt3 "_non" pt4 "_close")

 

Est-il possible de demander si il y a un angle ou par un clic par deux points ?

Regarde la fonction getangle (attention, l'angle retourné est exprimé en radians).

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

Posté(e)

Merci gile pour ton message.

 

Malheureusement l'accrochage aux objets est toujours active :(

 

Est-ce que j'ai raté quelques chose ?

 

(defun c:rect()

;Données utilisateur
(setq width (getreal "Entrer la largeur du rectangle: "))
(setq height (getreal "Entrer la longeur du rectangle: "))
(setq pt1 (getpoint "Specifiez le coin inferieur gauche du rectangle: "))

;traitement des données
(setq pt2 (polar pt1 0 width))
(setq pt3 (polar pt2 (/ pi 2) height))
(setq pt4 (polar pt3 pi width))

;Dessiner le rectangle
(command "_pline" "_non" pt1 "_non" pt2 "_non" pt3 "_non" pt4 "_close")

)

Posté(e)

L'utilisation de "_non" avant la spécification d'un point ne désactive pas les accrochages aux objets actif, ça force juste l'accrochage à "aucun" uniquement pour ce point.

Ainsi les accrochages courants ne sont pas modifiés.

 

Si tu veux désactiver les accrochages aux objets, tu peux te servir de la variable système OSMODE et la mettre à 0.

(setvar "OSMODE" 0)

Mais il serait souhaitable que le LISP restaure la valeur initiale à cette variable ce qui suppose que cette valeur soit d'abord récupérée et stockée dans une variable.

 

Voilà à quoi pourrait ressembler le code (note la déclaration des variables locales et l'utilisation de getdist avec un point de base) :

 

(defun c:rect (/ pt1 pt2 pt3 pt4 width height osmode) ; <- déclaration des variables locales

 ;; Données utilisateur
 (setq pt1 (getpoint "\nSpecifiez le coin inferieur gauche du rectangle: "))
 (setq width (getdist pt1 "\nEntrer la largeur du rectangle: "))
 (setq height (getdist pt1 "\nEntrer la longeur du rectangle: "))

 ;; traitement des données
 (setq pt2 (polar pt1 0 width))
 (setq pt3 (polar pt2 (/ pi 2) height))
 (setq pt4 (polar pt3 pi width))

 ;; stocker la valeur initiale de OSMODE
 (setq osmode (getvar "OSMODE"))
 ;; désactiver tous les accochages
 (setvar "OSMODE" 0)

 ;; Dessiner le rectangle
 (command "_pline" pt1 pt2 pt3 pt4 "_close")

 ;; restaurer la valeur initiale de OSMODE
 (setvar "OSMODE" osmode)

 (princ) ;_ <- "sortie silencieuse"
)

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

Posté(e)

Salut le forum,

 

Merci à vous tous pour votre aide :D

 

C'est exactement ça, merci Gile :) .

En ce qui concerne la possibilité de donné un angle je vais laisser tomber, en radian c'est pas terrible :( .

 

Meilleures salutations

Posté(e)

Salut,

 

En ce qui concerne la possibilité de donné un angle je vais laisser tomber, en radian c'est pas terrible :( .

J'ai dû mal m'exprimer (mais tu aurais dû tester la fonction getangle).

 

getangle invite l'utilisateur à spécifier un angle. L'utilisateur peut spécifier l'angle soit à l'écran à l'aide du pointeur ; soit en entrant un angle exprimé dans l'unité angulaire courante. C'est la valeur retournée par la fonction qui est toujours exprimée en radians.

 

Il faut savoir qu'AutoCAD (comme tous les logiciels ou les calculatrices qui utilisent des angles) travaille en interne avec des radians même si l'utilisateur final utilise une autre unité angulaire.

En programmation, ce n'est pas vraiment un problème. Il faut juste savoir que seules les fonctions liées à la ligne commande utilisent l'unité angulaire courante (en gros les fonctions getXXX et les fonctions command, command-s et vl-cmdf).

 

Certains utilisent abondamment des fonctions de conversion :

;; d2r
;; Convertit les degrés en radians
(defun d2r (d) (* d (/ pi 180.)))

;; r2d
;; Convertit les radians en degrés
(defun r2d (r) (* r (/ 180. pi)))

Personnellement je ne me souviens pas en avoir eu besoin. AutoCAD fournit des fonctions de conversions de chaîne en angle (angtof) ou d'angle en chaîne (angtos) qui font très bien l'affaire puisque les fonctions de commande acceptent des chaînes pour exprimer les nombres.

 

quand tu fais :

(setq a (getangle "\nSpécifiez l'angle: "))

si l'utilisateur entre 90 (et que l'unité courante est le degré), la valeur de a est : 1.570796326794896 mais tu n'auras jamais à l'utiliser sous cette forme. Soit tu passe a comme argument à des fonctions qui requièrent des radians ; soit tu utilises (angtos a) (qui retourne "90") dans une commande.

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

Posté(e)

Salut Gile,

 

Merci pour ses infos précieuses :D .

Je vais regarder la fonction getangle de plus près, mais étant novice il me faudra quelques jours voir quelques semaines :(rires forts):

 

Quoi qu'il en soit je te remercie pour ton aide et ne manquerait pas revenir pour des questions sur getangle ;)

 

Merci

Meilleures salutations

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é