Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

 

J'ai une question sur la fonction transparente ' dans une commande.

 

Cela faisait longtemps que je n’avais pas utilisé cette fonction dans une commande, et je viens de voir quelle ne fonctionne pas avec une commande lisp.

Exemple :

J’ai une nouvelle « fonction/commande » en lisp

(defun c :TOTO ()

…….

) ; fin defun

 

Dans Autocad je lance une commande pour déplacer un objet

Spécifiez le point de base ou [Déplacement] <Déplacement>:

Spécifiez le deuxième point ou <utiliser le premier point comme déplacement>:

Sur la ligne de commande je tape ‘TOTO

Et sa ne marche pas.

Posté(e)

Bonjour,

 

Pour que ta fonction lisp puisse être transparente, il faut que celle-ci soit conçue en conséquence. Elle ne doit en aucun cas faire appel à un (command) surtout si celui-ci concerne la création ou la modification d'un objet, je n'ai jamais testé avec (entmake) ou (entmod), mais je pense que la restriction est la même.

 

De plus certaines commandes Autocad peuvent être elle même des fonctions lisp, ce qui empêchera ta fonction lisp en transparence: tu auras un message du style qu'il ne peut ré-entrer dans Autolisp.

 

Un (ancien) exemple basique de fonction qui fonctionne en transparence:

(defun c:xmil ( / p1 p2 p)
(prompt "\nPoint milieu entre ")
(setq p1 (getpoint "premier point : "))
(setq p2 (getpoint p1 "\nsecond point : "))
(setvar "osmode" (+ 16384 (rem (getvar "osmode") 16384)))
(setq p (list (/ (+ (car p1) (car p2)) 2)
              (/ (+ (cadr p1) (cadr p2)) 2)
              (/ (+ (caddr p1) (caddr p2)) 2)
	)
)
(setvar "lastpoint" p)
)

 

Avec ceci tu pourra par exemple dans l'exécution de la commande LIGNE taper 'XMIL pour éxecuter le code en transparence.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Bonjour,

 

Pour mettre déjà bien creusé la tête sur ces questions, je ferai la même réponse que bonuscad, sauf pour les fonctions entmod et entmake.

 

Car ces fonctions supportent le mode transparent, d’ailleurs c’est un moyens de substitution aux appels à la fonctions command dans le cas de la prise en compte du mode transparent.

 

Un petit exemple dessine un objet, puis déplace-le en exécutant les fonctions suivantes en transparence :

(defun c:rouge () (entmod (append (entget (entlast)) '((62 . 1)))) (princ))
(defun c:duplique () (entmake (entget (entlast))) (princ))

 

Te peux également recommencer en redessinant un autre objet puis déplace le et en cours de commande exécute la fonction suivante en transparence :

(defun c:les2 () (c:rouge) (c:duplique) (princ))

 

Là tu constateras que le mode transparent s’exécute également sur toute les fonctions appelé du moment que ces dernières le peuvent.

A+

Apprendre => Prendre => Rendre

Posté(e)

Ok merci pour les réponses.

 

J'ai bien "la fonction" Commande dans le lisp d'ou l'erreur.

;**************** fonction zoom

; Fonction sur les zoom

; sauvegarde une zone de dessin en memoire

(defun c:zo1 ()

(setq zone1 (ssget))

);fin defun

; retourne à la zone sauvée

(defun c:z1 ()

(COMMAND "_zoom" "_object" zone1 "")

);fin defun

 

;**************************

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é