Aller au contenu

vlax-get, vlax-invoke : liste vs variant


(gile)

Messages recommandés

Peut-être, que j'enfonce un porte ouverte, mais je suis tellement content de ma découverte, que j'ai envie de la partager.

 

Bruno Toniutti m'avais fait remarqué ici qu'en utilisant (vlax-get objet 'coordinates) il était retourné une liste de coordonnées plus directement exploitable en LISP que le variant retourné par (vla-get-coordinates objet).

 

Je viens de découvrir qu'il en est de même avec (vlax-invoke ...), attention, pas (vlax-invoke-method ...) qui retourne aussi un variant.

 

Par exmple :

 

(setq liste_objets (vlax-invoke bloc 'explode))

retourne directement la liste des objets composant bloc, que jusque là, j'obtenais en faisant :

 

(setq liste_objets (vlax-safearray->list
 (vlax-variant-value
   (vla-explode bloc)
 )
)
)

 

Et aussi, (vlax-invoke ...) accepte comme argument une liste là où (vla- ...) et (vlax-invoke-method ...) demandent un variant :

 

(vlax-invoke ModSpace 'addRegion liste_objets)

fonctionne comme :

 

(vla-addRegion ModSpace
 (vlax-make-variant
	  (vlax-SafeArray-fill
	    (vlax-make-SafeArray
	      vlax-vbObject
	      (cons 0 (- (length liste_objets) 1))
	    )
	    liste_objets
	  )
	)
 )

 

En espérant que cela puisse être aussi profitable à d'autres.

 

[Edité le 15/6/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Ca va être utilie à plus d'un :laugh:

Je ne connaissais pas cette manière et qui est bien plus courte :cool:

A tester, mais ça ne fonctionne que pour des listes type variants ? :exclam:

 

Ce qui est fou, je viens de regarder dans l'aide, le vlax-get et vlax-methode ne sont pas dans l'aide :o . On peut en déduire un vlax-put, un vlax-create, un vlax-curve , etc... ??? :casstet:

 

En tout cas, un grand merci pour ta déduction

 

@+

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

Extrait de l'aide pour vlax-invoke-method :

This function was known as vlax-invoke prior to AutoCAD 2000

C'est la même chose pour vlax-get-property et vlax-put-property, peut-être une survivance d'avant l'introduction de variant et safearray dans le VisualLISP ?

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Pratique !

 

tiens, une citation du Visual_Lisp_Developers_Bible :

 

Examples:
(vlax-invoke-method objLine “Move” point1 point2)
(vla-Move objLine point1 point2)
(vlax-invoke objLine “Move” point1 point2)
All of these of these examples do the same thing. This is generally true for most
AutoCAD objects, but not for objects created from imported TypeLib interfaces
or external applications or ActiveX components. You should use the first form
for working with external application objects, however you can use the second
form for internal objects. The third form is a leftover from R14 for compatibility
only.

 

Effectivement, c'est un reste du passé...

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
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é