Aller au contenu

Messages recommandés

Posté(e)

Bonsoir à tous,

 

 

Je me lance en ActiveX et je me suis enfin décidé à lâcher mon bon vieux fichier d’aide version R14 (français), pour les fichiers d’aides plus actuels mais en anglais, la bonne nouvelle c’est qu’à force d’insister je commence timidement à déchiffrer l’anglais.. La mauvaise c’est que je ne saisie pas encore bien toutes les subtilités de language..

 

J’aurais une question de syntaxe toute bête à soumettre au sujet d’ActiveX, prenons un code simple (qui peut ce généraliser à la plupart des propriétés) par exemple rendre le calque 0 inactif dans le dessin courant. Pour faire cela j’ai testé qu’avec ActiveX deux syntaxes sont possibles.

 

 

La syntaxe avec vlax du type:

(vlax-put-property object property argument) ou (vlax-get-property object property)

 

Le code

;; Calque 0 courant avec syntaxe vlax-
(defun calque0 (/ document calques)
 (vl-load-com)
 (setq	document (vlax-get-property (vlax-get-acad-object) 'activedocument))
 (setq calques (vlax-get-property document 'layers))
 (vlax-put-property document 'activelayer (vla-item calques "0"))
)

 

Ou privilégier la syntaxe vla du type:

(vla-put-propr object argument) ou (vla-get-propr object)

 

Le code

;; Calque 0 courant avec syntaxe vla-
(defun calque0 (/ document calques)
 (vl-load-com)
 (setq document (vla-get-activedocument (vlax-get-acad-object)))
 (setq calques (vla-get-layers document))
 (vla-put-activelayer acaddocument (vla-item calques "0"))
)

 

 

Mes questions sont les suivantes pourquoi faire 2 syntaxes, laquelle privilégier, et sont elles toujours possible.. (à priori je suis tenté de dire oui).

 

Merci à ceux qui pourront m’éclairer.

Bruno

Apprendre => Prendre => Rendre

Posté(e)

Salut,

 

Il n'y a pas deux mais trois syntaxes, les deux que tu cites plus la plus ancienne : vlax-get, vlax-put, vlax-invoke.

 

Les fonction vla-* ne fonctionnent qu'avec l'API COM d'AutoCAD.

Si tu utilises des objets COM externes (application Excel par exemple) il faut utiliser les fonctions vlax-get-property, vlax-put-property, vlax-invoke-method.

 

Ces méthodes peuvent aussi être utilisées avec des listes de propriétés, par exemple pour copier les propriétés d'un objet sur un autre :

(foreach p '(Layer Color LineType) (vlax-put-property obj1 p (vlax-get-property obj2 p)))

 

Les "vieilles" methodes vlax-get, vlax-put, vlax-invoke dont Autodesk promet depuis belle lurette la suppression (ce qu'il ne fait heureusement pas) s'utilisent comme les "nouvelles" méthodes vlax-*, mais présentent parfois un avantage certain quand les propriétés ou les arguments des méthodes sont des collections : elle prennent ou retournent ces collections sous forme de listes LISP plutôt que de variants ou safearrays.

Par exemple :

(vlax-get- circle 'Center) retourne une liste de 2 réels là où (vlax-get-property circle 'Center) ou (vla-get-Center circle) retournent un variant qui contient un safearray de doubles (nombres réels).

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

Posté(e)

J'oubliais, les fonctions vla-* ont un avantage : elles permettent d'éviter plus facilement les fautes d'orthographe quand on utilise l'éditeur Visual LISP en s'affichant en bleu si elles sont correctement orthographiée ce que ne font pas les propriétés et méthodes sous forme de symboles ou de chaînes.

De plus, elles permettent l'accès direct à l'aide avec Ctrl+F1, enfin permettaient jusqu'à la version 2010 (merci encore à Autodesk pour la nouvelle aide :angry: ).

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

Posté(e)

Merci (gile) pour ta réactivité et toutes ces précisions je vais tester et décortiquer tes exemples. Histoire de m’imprégner un peu plus de tous cela..

A+ Bruno

Apprendre => Prendre => Rendre

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é