pierrevigneux Posté(e) le 24 mars 2010 Posté(e) le 24 mars 2010 Bonsoir! J'ai un lisp que J'ai pris sur le forum et je veux le modifier en insérant une autre petite routine.Ce que je n'arrive même pas à faire!http://dl.free.fr/mbpb7Ppb6http://dl.free.fr/tKXcG5M1v Le problème est que je veux remplacer les coordonnée en dim pour mon petit lisp, de façon à retourner les coordonnée Nord et Est, si possible y inclure le Rayonde la courbe en question. Merci! Acadnadien
Tramber Posté(e) le 24 mars 2010 Posté(e) le 24 mars 2010 Tu veux une réponse franche ?! Ca m'enquiquine d'aller ouvrir des fichiers qui font 3 lignes et de les manipuler là comme ça alors que ttu n'avais qu'à publier le code.Normal pour un débutant d'avoir des questions. Enthousiasme de ma part quant à donner des coups de mains aux novices :cool: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
pierrevigneux Posté(e) le 24 mars 2010 Auteur Posté(e) le 24 mars 2010 Bonjour Tramber C'est que je ne voulais pas prendre trop de place dans le forum.J'essayais d'être bref le plus possible, mais enfin, c'est le deuxième fichier qui est le plus important pour moi. Le problème est que je veux remplacer les coordonnée en dim pour mon petit lisp, de façon à retourner les coordonnée Nord et Est, si possible y inclure le Rayonde la courbe en question. Merci de ton attention Acadnadien
pierrevigneux Posté(e) le 26 mars 2010 Auteur Posté(e) le 26 mars 2010 Bonjour!Je demande juste de corriger mon erreur sur le lisp suivant, suite à ma demande du début (vl-load-com) (defun c:Dim_PolyCenArc ( / js ename obj pr pt_sel seg_bulge pt_cen) (princ "\nSélectionner une polyligne.") (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))) (princ "\nCe n'est pas une LWPolyLine!") ) (setq ename (ssname js 0) obj (vlax-ename->vla-object ename) pr -0.5 ) (command "_.undo" "_begin") (repeat (fix (vlax-curve-getEndParam obj)) (setq pt_sel (vlax-curve-GetPointAtParam obj (setq pr (1+ pr))) seg_bulge (vla-GetBulge obj (- pr 0.5)) ) (setvar "clayer" "0") (if (not (tblsearch "LAYER" "cen_arc")) (command "_layer" "_N" "cen_arc" "_CO" "3" "cen_arc" "") ) (setvar "clayer" "cen_arc") (if (not (zerop seg_bulge)) (command [surligneur] "_.shape" "coin"(osnap "_cen") "1" "0" "_.point" "0" "1" "0" "0" [/surligneur] (setq pt1(getpoint pt1 p_cen )) (initget 16) ( setq pt2 (getpoint "La Location du text? ") e (strcat "N " (rtos (cadr pt1))) n (strcat "E " (rtos (car pt1))) ) ( command "text" pt2 0 E "text" "" N ) ) ) ) (command "_.undo" "_end") (prin1) ) Le problème est que je ne peux pas l'insérer au centre de mon rayon, pour ensuite continuer la commande c.a.d. retourner les coordonnées Nord et Est, j'aimerais également y retourer le rayon, si possible. Merci à l'avance! Acadnadien
(gile) Posté(e) le 26 mars 2010 Posté(e) le 26 mars 2010 Salut, À vue de nez, - il manque une parenthèse fermante- il manque un argument pour la fonction LISP osnap (regarde l'aide pouer cette fonction)- les arguments pour la commande "_.point" ne sont pas valides. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 26 mars 2010 Auteur Posté(e) le 26 mars 2010 Bonjour Gile Si j'ajoute "_.shape" "coin"(osnap osmode "_center") "1" "0" Est-ce correcte? Acadnadien
(gile) Posté(e) le 26 mars 2010 Posté(e) le 26 mars 2010 Non, Si tu veux apprendre le LISP, tu as intérêt à apprivoiser l'éditeur Visual LISP et l'aide aux développeurs d'AutoCAD, notamment la rubrique AutoLISP Reference, chaque fonction LISP y est décrite (arguments requis et type de retour). Par exemple pour la fonction osnap, on lit (extrait) :(osnap pt mode) Arguments pt A point. mode A string that consists of one or more valid Object Snap identifiers, such as mid, cen, and so on, separated by commas. Return Values A point; otherwise nil, La fonction osnap requiert donc 2 arguments : - un premier de type point (à savoir une liste de 2 ou 3 nombres ou une variable à laquelle est affectée un point valide)- un second de type chaîne de caractère représentant un ou plusieurs modes d'accrochage.Elle retourne un point ou nil. Je te recommandes aussi la lecture de ce sujet. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pierrevigneux Posté(e) le 26 mars 2010 Auteur Posté(e) le 26 mars 2010 Merci Gile J'ai toujour des erreurs, je ne suis vraiment pas doué. @+ Acadnadien
(gile) Posté(e) le 26 mars 2010 Posté(e) le 26 mars 2010 Ce n'est pas un question de don et tu t'attaques à quelque chose qui n'est pas si simple. Il faut un peu de logique et de méthode.Dans l'éditeur, tu peux sélectionner chaque expression de ta routine en double cliquant devant la parenthèse ouvrante du début de l'expression. Ça permet tout d'abord de vérifier l'appariement des parenthèse et, l'expression étant sélectionnée de l'évaluer (Ctrl+Maj+E ou icône "Charger la sélection") tu auras le résultat de l'évaluation dans la console et dans la fenêtre d'AutoCAD. En faisant ça pour chaque expression de ta routine dans l'ordre d'exécution tu localiseras les erreurs et pourras essayer de les résoudre avant de passer à la procédure suivante.Si tu sélectionnes le symbole d'une fonction (en bleu) et que tu fais Ctrl+F1, l'aide s'ouvrira directement à la page de cette fonction. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 26 mars 2010 Posté(e) le 26 mars 2010 Ah bah non !Tu édites ton lisp dans l'éditeur ou pas ?Fais expression par expression (doublie-clic sur l'ensemble de parenthèses et CTRL+MAJ+E) et dis-nous où ca coince.De mon côté, je n'ai pas de fichier de forme pour tester jusqu'au bout. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 26 mars 2010 Posté(e) le 26 mars 2010 Ah bah non ! Non quoi ?! Tu dis la même chose que moi. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 26 mars 2010 Posté(e) le 26 mars 2010 Ah ben oui ! :cool: J'avais pas vu que tu avais posté entre 2 !Il m'arrive d'ouvrir une réponse et de trainer à la poster... (courriel, coup de fil, eau qui boue,...etc). Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
pierrevigneux Posté(e) le 27 mars 2010 Auteur Posté(e) le 27 mars 2010 Re-bonsoir!À tout hasard j'envoie mon fichier exemple, parce que plus j'essaie et moins j'y comprend http://dl.free.fr/bJPIREodu @+ Acadnadien
pierrevigneux Posté(e) le 31 mars 2010 Auteur Posté(e) le 31 mars 2010 Bonsoir ! Toujours le même problème, non solutionné.Il me manque encore le Rayon de l'arc? (while (null (setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))) (princ "\nCe n'est pas une LWPolyLine!") ) (setq ename (ssname js 0) obj (vlax-ename->vla-object ename) pr -0.5 ) (command "_.undo" "_begin") (repeat (fix (vlax-curve-getEndParam obj)) (setq pt_sel (vlax-curve-GetPointAtParam obj (setq pr (1+ pr))) seg_bulge (vla-GetBulge obj (- pr 0.5)) ) (setvar "clayer" "0") (if (not (tblsearch "LAYER" "cen_arc")) (command "_layer" "_N" "cen_arc" "_CO" "3" "cen_arc" "") ) (setvar "clayer" "cen_arc") (if (not (zerop seg_bulge)) (command "_.dimordinate" "_none" (setq p_cen (osnap (trans pt_sel 0 1) "_cen")) "_none" (polar p_cen 0 (getvar "dimtxt")) "_.dimordinate" "_none" p_cen "_none" (polar p_cen (* pi 0.5) (getvar "dimtxt")) "_.shape" "coin" "0" "1" "0" "_.point" "0" ( command "text" -4 325 "R= " [surligneur] [/surligneur] ) ) ) ) (command "_.undo" "_end") (prin1) ) Quelqu'un pourrais m'aider ?Merci! [Edité le 31/3/2010 par pierrevigneux] Acadnadien
Tramber Posté(e) le 1 avril 2010 Posté(e) le 1 avril 2010 (strcat "R="(rtos(abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5)) (vlax-curve-GetDistAtParam obj(- pr 0.5))) (* 4.0 (atan seg_bulge))))2 2)) Rayon de l'arc ? le bulge est la tangente du quart de l'angle décrit.Donc l'angle est 4 x atan bulge. Puis R est la distance / angle car D=2piR Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
pierrevigneux Posté(e) le 1 avril 2010 Auteur Posté(e) le 1 avril 2010 Bonjour Tramber Si j'ajoute ton code à ( command "text" -4 325 "R= " strcat "R="(rtos(abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5)) (vlax-curve-GetDistAtParam obj(- pr 0.5))) (* 4.0 (atan seg_bulge))))2 2)) ) ) C'est bien mais il ne m'imprime pas la réponse, le calcul est parfait ?Command: R=90 Unknown command "R=90". Pierre [Edité le 1/4/2010 par pierrevigneux] Acadnadien
Tramber Posté(e) le 1 avril 2010 Posté(e) le 1 avril 2010 Dis-donc, j'ai voulu te laisser un peu te débrouiller. Mais (stract te sort un texte tout prêt. A toi de le rentrer dans une variable avec setq juste avant le command et de le glisser au bon endroit dans ce command. T'es presque arrivé :P Je t'aiderai uniquement si tu fais un gros effort mais sans y arriver. :cool: Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
pierrevigneux Posté(e) le 2 avril 2010 Auteur Posté(e) le 2 avril 2010 Bon j'ai essayé tout ce que je crois être le mieux mais zut sans livre ni, prof. et seul je n'y arrive pas, je suis réellement bouché, je commence à penser que je deviens trop vieux pour ce genre d'exercice, pourtant je suis très trenace habituellement, mais il y une certaine limite quand même.Je déclare forfait pour l'instant. T'es presque arrivé je t'aiderai uniquement si tu fais un gros effort mais sans y arriver. Voilà ce que ça me retourne error: bad argument value: AutoCAD command: # (setq R= ( command "text" -4 325 "R= " strcat "R="(rtos(abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5)) (vlax-curve-GetDistAtParam obj(- pr 0.5))) (* 4.0 (atan seg_bulge))))2 2)) Voilà le gros effort ! Acadnadien
(gile) Posté(e) le 2 avril 2010 Posté(e) le 2 avril 2010 Salut, Il y a un problème de parenthèse. Tu sembles avoir du mal avec les imbrications d'expressions (c'est normal au début). Peut-être serait-il plus facile/compréhensible, de décomposer l'expression en définissant quelques variables : (setq rayon (abs (/ ...))) (setq texte (strcat "R=" rayon)) (command ...) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 2 avril 2010 Posté(e) le 2 avril 2010 En effet ! Ceci devrait fonctionner : (setq rayon (abs (abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5)) (vlax-curve-GetDistAtParam obj(- pr 0.5))) (* 4.0 (atan seg_bulge)))))) (setq texte (strcat "R=" (rtos rayon 2 2))) (command "_text" (getpoint) 100 0 texte "") Ce que n'a pas dit (gile) et moi non-plus, c'est qu'il vaut mieux éviter rentrer trop de code dans un COMMAND.Est-ce plus clair maintenant ?Tu en profiteras pour nous dire si le calcul est bel et bien correct. Je l'ai recalculé pour la Nième fois sur un bout de papier. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
pierrevigneux Posté(e) le 2 avril 2010 Auteur Posté(e) le 2 avril 2010 Merci Tramber et (gile) Mais je suis encore au même résultat qu'hier.Le calcul est bon y as pas de problème, la commande getpoint d'après mes connaissances est censée interrompre la tâche pour saisir un point manuellement dans le dessin, moi ce que je souhaite est d'ajouter sa valeur dans mon dessin juste après avoir obtenus ses coordonnées l Donc le code que j'ai ajouté va comme ceci. (setq rayon (abs (abs(/(-(vlax-curve-GetDistAtParam obj (+ pr 0.5)) (vlax-curve-GetDistAtParam obj(- pr 0.5))) (* 4.0 (atan seg_bulge)))))) (setq texte (strcat "R=" (rtos rayon 2 2))) (command "_text" (getpoint ) 100 0 texte "") Salutations ! Acadnadien
Tramber Posté(e) le 2 avril 2010 Posté(e) le 2 avril 2010 J'ai mis (getpoint) pour montrer ce que l'on peut mettre dans un COMMAND mais c'est surtout parce que je ne comprenais pas ton -4 ! Et pourquoi pas la variable p_cen ?As-tu essayé la commande -LIGNE pour débugger ton programme et comprendre comment on enchaine avec exactitude les réponses ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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