ASTERIXII Posté(e) le 25 avril 2014 Posté(e) le 25 avril 2014 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 objetSpé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 ‘TOTOEt sa ne marche pas.
bonuscad Posté(e) le 25 avril 2014 Posté(e) le 25 avril 2014 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
VDH-Bruno Posté(e) le 25 avril 2014 Posté(e) le 25 avril 2014 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
ASTERIXII Posté(e) le 25 avril 2014 Auteur Posté(e) le 25 avril 2014 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 ;**************************
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant