Aller au contenu

Aide sur vla-put-ActiveDocument


stephan35

Messages recommandés

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 00c2eb8c

docs :

#VLA-OBJECT IAcadDocuments 0b1ce880

this :

#VLA-OBJECT IAcadDocument 0a9e4c04

dnum :

2

docs :

#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]

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Une solution est de jouer avec le AutoCAD.lsp

S'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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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é