nen Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 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 aideMeilleures salutationsrect.lsp 1
Tramber Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 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 ./__\. (.°=°.)
ahbv Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 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 aideMeilleures salutations
nen Posté(e) le 10 octobre 2016 Auteur Posté(e) le 10 octobre 2016 Merci pour votre aide :DEn 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
(gile) Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 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
nen Posté(e) le 10 octobre 2016 Auteur Posté(e) le 10 octobre 2016 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") )
(gile) Posté(e) le 10 octobre 2016 Posté(e) le 10 octobre 2016 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
nen Posté(e) le 11 octobre 2016 Auteur Posté(e) le 11 octobre 2016 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
(gile) Posté(e) le 11 octobre 2016 Posté(e) le 11 octobre 2016 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
nen Posté(e) le 14 octobre 2016 Auteur Posté(e) le 14 octobre 2016 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 ;) MerciMeilleures salutations
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