Aller au contenu

fonctionnement CMDACTIVE


Luna

Messages recommandés

Bonjour,

 

Selon l'aide AutoCAD sur la variable système CMDACTIVE, on a ceci :

0 No active command

 

1 Ordinary command is active

 

2 Transparent command is active

 

4 Script is active

 

8 Dialog box is active

 

16 DDE is active

 

32 AutoLISP is active (only visible to an ObjectARX-defined command)

 

64 ObjectARX command is active

 

Donc au niveau de ma compréhension (limitée), ce que AutoCAD considère comme une commande "ordinaire" (bit 1) correspond aux commandes natives d'AutoCAD. Donc cela ne prend pas en compte les commandes custom (defun c:cmd () [...] ) si je comprend bien..

Mais dans ce cas, comment savoir si une commande custom est en cours d'exécution ? Car je n'arrive pas bien à comprendre les bit 16, 32 et 64...

Car si je fait un code simple comme ceci :

(defun fun ()
 (getvar "CMDACTIVE")
)

(defun c:cmd ()
 (getvar "CMDACTIVE")
)

command: (fun)
0
command: CMD
0
commande: POLYLIGN
Spécifiez le point de départ:
La largeur courante est de 0.000.
Spécifiez le point suivant ou [Arc/Demi-larg/LOngueur/annUler/LArgeur]: (getvar "CMDACTIVE")
1
Spécifiez le point suivant ou [Arc/Clore/Demi-larg/LOngueur/annUler/LArgeur]:

 

Du coup je n'arrive pas bien à saisir dans quel contexte on pourrait savoir si une commande (quelqu'elle soit) est active..

 

Merci pour vos éclaircissements :3

 

Bisous,

Luna

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

(defun c:cmd () ...) ne crée par une vrai commande AutoCAD (seuls ObjectARX et .NET permettent de définir de véritables commandes).

Il s'agit d'une fonction LISP qu'on peut appeler directement depuis la ligne de commande, mais si tu fais (command "cmd" ...) ça ne fonctionnera pas.

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

Lien vers le commentaire
Partager sur d’autres sites

On ne peut les "voir" avec CMDACTIVE que depuis une commande définie avec ObjectARX (code 32).

En LISP, tu lances une commande avec (command ...) et tu peux "voir" la commande en cours, classiquement avec:

(while (

Mais pendant l'exécution d'une routine LISP il ne peut pas y avoir d'autres fonctions LISP que celle appelées par la routine qui s'exécutent (aucun traitement LISP asynchrone ou parallèle).

Autrement dit, si le code 32 de CMDACTIVE fonctionnait en LISP (getvar 'cmdactive) renverrait toujours 32. De la même façon que dans une commande définie en ObjectARX ou (.NET) CMDACTIVE renvoie toujours au moins le bit 1.

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

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é