stephan35 Posté(e) le 16 février 2007 Posté(e) le 16 février 2007 Bonjour, voici mon code (repiqué) fournis dans la bible vlisp (defun ZOOMALL ( / $acad docs dnum this) (vl-load-com) (setq $acad (vlax-get-acad-object) docs (vla-get-documents $acad) this (vla-get-activedocument $acad) dnum (vla-get-count docs) ) (prompt "\n$acad :")(print $acad) (prompt "\ndocs :")(print docs) (prompt "\nthis :")(print this) (prompt "\ndnum :")(print dnum) (vlax-for each docs (prompt "\ndocs :")(print docs)(prompt " - each :")(print each) (vla-put-ActiveDocument each) (vla-ZoomExtents $acad) (vla-save each) ) (vla-put-activedocument this) (vlax-release-object docs) (vlax-release-object this) (vlax-release-object $acad) (princ (strcat "\nProcessed " (itoa dnum) " drawings.")) (princ) ) et ça plante lamentablement ........ :o $acad :#VLA-OBJECT IAcadApplication 00c2eb8cdocs :#VLA-OBJECT IAcadDocuments 0b1ce880this :#VLA-OBJECT IAcadDocument 0a9e4c04dnum :2docs :#VLA-OBJECT IAcadDocuments 0b1ce880 - each :#VLA-OBJECT IAcadDocument 0a9e4c04 ; [surligneur] erreur: Le serveur ActiveX a renvoyé l'erreur: nom inconnu: ActiveDocument[/surligneur] Pourquoi ????? :casstet: :casstet: :casstet: :casstet: :casstet: Je veux comprendre ! Merci à tous [Edité le 16/2/2007 par stephan35] [Edité le 16/2/2007 par stephan35]
Bred Posté(e) le 16 février 2007 Posté(e) le 16 février 2007 Variable each ? Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
stephan35 Posté(e) le 16 février 2007 Auteur Posté(e) le 16 février 2007 Variable each ? Oui, suivant la doc (recopié texto), cette variable récupère l'objet que l'on passe en document actif , #VLA-OBJECT IAcadDocument 0a9e4c04 dans notre cas ! et ça plante ..... :casstet:
(gile) Posté(e) le 16 février 2007 Posté(e) le 16 février 2007 Ce type de message d'erreur veut dire que la propriété (ActiveDocument en l'occurence) n'est pas disponible pour le type d'argument ou que la méthode n'est pas applicable. Regarde du côté des fonctions vlax-property-available-p et vlax-method-applicable-p Si tu veux en avoir le coeur net : (vlax-for each docs (if (vlax-property-available-p each 'ActiveDocument) (progn (vla-put-ActiveDocument each) (vla-ZoomExtents $acad) (vla-save each) ) (progn (princ (strcat "\n" (vla-get-Name each) " : Propriété \"ActiveDocument\" non disponible.")) (princ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 16 février 2007 Posté(e) le 16 février 2007 Pour Bred, (vlax-for ...) est une fonction qui fonctionne un peu comme (foreach ...) à ceci près qu'elle fonctionne avec des "collections" de vla-objects au lieu de listes. par exemple, pour dégeler tous les calques du document actif : (vlax-for lay (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)) ) (if (= :vlax-true (vla-get-lock lay) ) (vla-put-lock lay :vlax-false) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 16 février 2007 Posté(e) le 16 février 2007 merci (gile),j'étais en train d'éssayer de comprendre ce each, et j'avais trouvé ça : http:// http://www.afralisp.net/lisp/html3.htmce qui confirme ce que tu dis. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
stephan35 Posté(e) le 16 février 2007 Auteur Posté(e) le 16 février 2007 Comment faire alors ? (l'exemple fournis ne fonctionne pas :( )Si j'ai 3 fichier ouvert en même temps, je ne peut pas activer en lisp celui sur lequel j'ai des traitements à faire ???Je pense qu'il y a surement une solution ....... :casstet: Merci Ps: bon week end !
(gile) Posté(e) le 16 février 2007 Posté(e) le 16 février 2007 Même s'il est possible de faire certaines choses sur sur des fichiers autres que le dessin courant avec objectDBX ou par (open ...), un LISP s'exécute dans le dessin dans lequel il est lancé. Pour faire ton zoom dans d'autres dessins que le dessin courant depuis celui-ci, je passerais par un script du style : filedia 0 _open "C:\Test.dwg" _zoom _e _qsave _close filedia 1 [Edité le 16/2/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 16 février 2007 Posté(e) le 16 février 2007 Une solution est de jouer avec le AutoCAD.lspS'il y a déjà un AutoCAD.lsp, on le renomme, on créé celui qui nous intéresse (avev un vl-file-copy par exemple) et on ouvre le dessin via un (vla-get-documents (vlax-get-acad-object)) qui normalement chargera automatiquement le AutoCAD.lsp (si acadlspasdoc=1)Une sauvegarde, on retrouve l'ancien AutoCAD.lsp s'il existait et normalement, le tour est joué @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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