Invité pleche.damien Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Bonjour, je veux récupérer un style de côte que j'ai dans un notre dessin qui se nome: [surligneur] gabaritcote.dwg[/surligneur]se DWG est placé dans se chemin de parcours: [surligneur] L:\\PLECHE Damien PROJET FONDATION\\WBLOC.gabaritcote.dwg[/surligneur] ; j'ai rajouté 1 antislash devant chaque antislash. Et le nom du style de côte que je veux importer se nôme: [surligneur] 1-20[/surligneur] Il me marque l'érreur suivante: Erreur: Erreur Automation. Aucune description n'a été entrée. Comment faire???? :casstet: Ci-joint ma routine: (defun Ouvrir_dessin_dbx(dwg / dbx) (vl-load-com) (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16) (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2)))) ) (vla-open dbx dwg) dbx ) ;(defun c:qqq () ((vl-load-com) ;L:\PLECHE Damien PROJET FONDATION\WBLOC (setq Dbx (ouvrir_dessin_dbx "L:\\PLECHE Damien PROJET FONDATION\\WBLOC.gabaritcote.dwg")) (vla-CopyObjects Dbx (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 0)) (list (vla-item (vla-get-dimstyles Dbx) "1-20")) ) (vla-get-dimstyles (vla-get-activedocument (vlax-get-acad-object))) ) (vlax-release-object dbx) ) Merci pour vos réponsePS: je débute en lisp
Invité pleche.damien Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 DSL je réctifi immédiatement ma routine, je voulais écrire (setq Dbx (ouvrir_dessin_dbx "L:\\PLECHE Damien PROJET FONDATION\\WBLOC\\gabaritcote.dwg")) a la place de (setq Dbx (ouvrir_dessin_dbx "L:\\PLECHE Damien PROJET FONDATION\\WBLOC.gabaritcote.dwg")) [surligneur] voila il me mette fonction incorrecte mintenant[/surligneur]!!!!
(gile) Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Si un humain courageux peut arriver à te lire et comprendre ce que tu dis malgré une orthographe abominable, il n'en va pas de même pour du code passé à un interpréteur : là, aucune faute n'est acceptable. Comme certains, tu sembles vouloir courir avant de savoir marcher et copies/colles des routines (sans en citer l'auteur) et/ou des extraits de codes sans certainement les avoir compris, sans, en tout cas dans cet exemple avoir compris certains fondamentaux de la syntaxe du LISP. Extrait de Eléments de syntaxe AutoLISP : l’interpréteur recherche la définition de la fonction (premier terme de la liste). Si cette définition n’est pas trouvée, un message d’erreur est retourné Les arguments pouvant être aussi des applications de fonction, celles-ci seront évaluées tour à tour et les résultats retournés à l’endroit même de chaque expression. L’évaluation procède de façon récursive en réduisant chaque appel de fonction à une expression autoévaluante à partir des expressions les plus imbriquées. Ton code commence comme ceci :((vl-load-com) ...)Comme dit dans les citations ci-dessus, l'interpréteur cherche une fonction dès qu'il lit une parenthèse ouvrante et trouve : (vl-load-com).Il évalue donc l'expression et retourne le résultat à l'endroit de l'appel de fonction : (vl-load-com) -tout comme (princ)- retourne un symbole vide (aucun caractère).C'est donc pour ce symbole vide que l'interpréteur va chercher une définition de fonction. Évidemment, il ne va pas en trouver et renvoie donc le message d'erreur : ; erreur: fonction incorrecte: où le blanc après les deux point correspond au nom de la fonction (vide). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité pleche.damien Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Tu oubli Gile que je débute en lisp et comme tu dis si bien De chacun selon ses moyens, À chacun selon ses besoins c'est vrai que j'ai trouvé cette routine sur se forum mais je vais pas en faire un patacaisse parsque c'est un peut le principe des forums de farfouiller partout NON!!! bon, merci pour tes explication tout de même, même si sa ne m'avance pas beaucoup (tu oubli que j'ai seulement une ceinture orange malgré ma soif d'aprendre)
(gile) Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Ne t'énerves pas, et si tu lis calmement mon message, tu y trouveras l'explication de ton erreur. Relis à partir de "Ton code commence comme ceci...", c'est là qu'est l'erreur. Les mêmes choses dites autrement :Toute expression LISP est un appel de fonction dont la syntaxe est :(fonction [arguments ...])- Elle commence donc toujours* par une parenthèse ouvrante et se termine par une parenthèse fermante.- La parenthèse ouvrante est toujours suivie d'un symbole (ou d'une autre expression) qui est lié à une fonction (native ou définie par l'utilisateur ou encore une expression lambda).- Suivent ensuite les arguments requis par la fonction : parfois aucun (ce qui est symbolisé par les crochets) parfois un ou plusieurs. Ces arguments peuvent, bien sûr, être d'autres expressions. Quand tu modifies la routine que tu as copié en mettant en commentaire : (defun c:qqq () et en le remplaçant simplement par une parenthèse ouvrante, tu modifies complètement la structure du code.Ce qui était un appel de la fonction defun devient un appel du résultat de l'expression (vl-load-com), à savoir 'rien' (en fait un symbole vide). Oui, j'ai bien compris que tu étais débutant et c'est pour ça que je reprends à partir des fondamentaux de la syntaxe LISP.Si tu copies des extraits de code et que tu les modifies sans faire attention aux conséquences de ces modifications il y a peu de chance que ça fonctionne. Il faut que tu comprennes ce que tu fais et pourquoi tu le fais. Te donner directement le code corrigé ne t'aiderait aucunement dans ton apprentissage : c'est en comprenant et en corrigeant ses erreurs qu'on apprend. * l'apostrophe devant une liste de données : '(1 2 3) est une fausse exception. Il s'agit d'une abréviation de l'expression (quote (1 2 3)) qui est bien un appel de fonction. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Coucou que je débute en lisp décidément on va passer pour des rabat-joie, (Gile) et moi puisque tu débutes, ne mets pas la barre si hautdonne toi un objectif simple et réalisable [surligneur] et surtout le copier-coller est tabou. [/surligneur] pour ce qui est de ta demande, elle n'est pas vraiment justifiéeil te suffit d'insérer ton dessin gabaritcote dans ton dwgillico presto tu le supprimeset ton style de cotation se trouve copié (s'il n'existe pas de définition homonyme dans le dwg d'accueil) pour mémoire, car il n'y a pas qu'AutoCAD dans la viela véritable orthographe est pataquès en lieu et place de patacaisserien à voir avec la pataphysique ou les patapoufs Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
VDH-Bruno Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Bonjour, bon, merci pour tes explication tout de même, même si sa ne m'avance pas beaucoup Au contraire cela t’avance énormément c’est même fondamental de comprendre comment fonctionne l’évaluation d’une fonction Lisp, personnellement c’est ce type d’explication qui m’a permis de décoller dans ma compréhension du Lisp, bien plus que l’emploie de telle ou telle fonction plus ou moins sophistiqué.. Pour en revenir à ton problème lorsque l’on débute la règle doit être de faire simple pour aboutir et comprendre. Sais-tu que si tu insères ton dessin gabaritcote.dwg dans ton dessin courant tu vas insérer également les styles de cotes qu’il contient. Donc si tu fais : (command "_insert" "L:\\PLECHE Damien PROJET FONDATION\\gabaritcote.dwg" '(0.0 0.0) "" "" "" ) Cela devrait également bien marché (à la condition que ton fichier ne contienne que des définitions de style de cote). Sinon pour une remarque d’ordre plus général, une bonne utilisation des fichiers gabarit (dwt) permet de faire gagner beaucoup de lignes de code.A+ -------------------------------------------------------------EditOupss, désolé pour l’écho je n’avais pas réactualisé la page et je n’avais pas vu les réponses précédentes. [Edité le 23/8/2011 par VDH-Bruno] Apprendre => Prendre => Rendre
Invité pleche.damien Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Oui pourcoi faire compliqué quand on peut faire simple: j'utilise donc tas méthode Bruno (command "_insert" "J:\\documents\\formation licence cao dao\\pleche damien projet fondation\\wbloc\\gabaritcote.dwg" '(0.0 0.0) "" "" "" ) Et j'insert cette ligne sup. pour charger ma côte automatiquement: (command "-dimstyle" "R" "1-20") Merci
VDH-Bruno Posté(e) le 23 août 2011 Posté(e) le 23 août 2011 Bonsoir, j'utilise donc tas méthode Bruno C’est une méthode parmi d’autres ( d’ailleurs didier l’avait donné avant), celle que tu envisageais au départ me semblant encore un peu ardu pour un début. Néanmoins je te conseil de ne pas faire l’impasse sur les précieux conseils de (gile) car si tu ne veux pas macroter éternellement avec command, il te faudra bien en passer par un peu de théorie Lispienne. A+(Ps : Perso j’utilise plutôt les gabarits et les palettes d’outils pour ce type de besoin). Apprendre => Prendre => Rendre
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