Aller au contenu

Modifier Commande Autocad... Réacteur ?


Messages recommandés

Posté(e)

Salut,

Lorsque l'on imprime avec "CutePDF", je me suis écrit un petit lisp permettant de proposer le chemin et le nom du fichier (incrémenter " - +1") correspondant au chemin et au nom du dessin actif.

(le lisp n'a pas l'air de fonctionner pareil selon les versions de cutePDF : il propose bien le répertoire où est enregistrer le plan, mais il ne propose pas automatiquement le nom du fichier... c'est bizarre.... mais ce n'est pas mon problème actuel)

 

(defun Chem_File_CutePDF (/ New_Filname_PDF x)
  
 (setq New_Filname_PDF (vl-string-subst "" ".dwg"
		  (vlax-get-property
		    (vla-get-activedocument
		      (vlax-get-acad-object)) 'FullName))
x 1)
 (While (findfile (strcat New_Filname_PDF " - " (rtos x) ".pdf"))
   (setq x (+ x 1))
   )
 (setq New_Filname_PDF (strcat New_Filname_PDF " - " (rtos x) ".pdf"))  
 ; écriture nouveau nom (.pdf)
 (vl-registry-write "HKEY_CURRENT_USER\\SOFTWARE\\ACRO SOFTWARE INC\\CPW" "FILENAME" New_Filname_PDF)
)

 

Mon "problème" vient du fait que je voudrais que ce lisp ce lance au moment où la commande de tracer est activer (_plot ou TRACEUR)...

 

j'étais partis sur :

(defun c:_plot ()
 (FileName_CutePDF)
 (command "traceur")
 (princ)
)

(defun-q S::STARTUP ()
 (command "undefine" "_plot")
)

 

... mais ça ne fonctionne bien sûr pas vu que je lance la commande "traceur" qui est une commande traduite de _plot ....

 

donc je pense qu'avec les réacteurs... :casstet:

 

Mais l'aide Autolisp est pour moi imcompréhensible, j'ai aperçu :

 

Réacteurs d'éditeur

Notifient votre application chaque fois qu'une commande AutoCAD est appelée.

 

:vlr-commandWillStart

 

...

 

mais alors l'exploiter :( :casstet: :P

 

.. merci de votre aide !

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut Bred

Je pense que tu devrais changer de rubrique vu le niveau de ta question. Ce n'est plus dans la gamme débutant ;)

 

Je ne vois pas en quoi le fait d'intervenir avec un réacteur :vlr-commandWillStart pourrait t'aider, mais je vais te donner quelques exemples qui pourront t'aider à comprendre

 

Les routines qui vont "s'incruster" lors de l'appel d'une commande

 

(defun Un_reacteur_pour_bred_Debut (Rea Cde)
 (alert (strcat "Je viens de lancer la commande " (getcname (strcat "_" (car Cde)))))
)

(defun Un_reacteur_pour_bred_Fin (Rea Cde)
 (alert (strcat "La commande " (getcname (strcat "_" (car Cde))) " vient de se terminer"))
)

 

La création du réacteur avant que la commande commence

(setq Rea_Bred_Debut (vlr-command-reactor nil (list (cons :vlr-commandWillStart (function Un_reacteur_pour_bred_Debut)))))

 

La création du réacteur une fois que la commande s'est bien passé

(setq Rea_Bred_Fin (vlr-command-reactor nil (list (cons :vlr-commandEnded (function Un_reacteur_pour_bred_Fin)))))

 

Et pour effacer ces réacteurs

(vlr-remove Rea_Bred_Debut)
(vlr-remove Rea_Bred_Fin)

 

ps : si tu lances plusieurs fois la création d'un réacteurs dans l'effacer auparavant de la mémoire, il s'additionne

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

Posté(e)

:o ...

Par mon Autocad....

J'ai juste chargé ta démonstration et je l'ai testé....

 

C'est FABULEUX !!!!

 

ça ouvre des possibilités infini !!!!

 

Merci ! :D

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Alors... :casstet:

 

Pour mon problème, si j'ai bien compris la logique :

 

Je crées un réacteur lors du chargement de mon dessin (dans AutoCAD.lsp par ex) :

;;; Création réacteur pour lancement de Chem_File_CutePDF.
(setq Rea_Impression_CutePDF (vlr-command-reactor nil
		      (list (cons :vlr-commandWillStart (function Chem_File_CutePDF)))))

 

Et je fais un test sur la commande lancé pour lancer ou pas mon lisp :

;;; Proposition Chemin et Nom pour impression avec CutePDF.
(defun Chem_File_CutePDF (Rea Cde / New_Filname_PDF x)
 [b](if (equal (getcname (strcat "_" (car Cde))) "TRACEUR")[/b]
   (progn
     (setq New_Filname_PDF (vl-string-subst "" ".dwg"
		      (vlax-get-property
			(vla-get-activedocument
			  (vlax-get-acad-object)) 'FullName))
    x 1)
     (While (findfile (strcat New_Filname_PDF " - " (rtos x) ".pdf"))
(setq x (+ x 1))
)
     (setq New_Filname_PDF (strcat New_Filname_PDF " - " (rtos x) ".pdf"))
     ; écriture nouveau nom (.pdf)
     (vl-registry-write "HKEY_CURRENT_USER\\SOFTWARE\\ACRO SOFTWARE INC\\CPW" "FILENAME" New_Filname_PDF)
     )
   )
 )

 

Par contre cela veut dire que pour n'importe quel fonction Autocad lancé, le test se fait.... N'est-ce pas un peu lourd ?

 

si tu lances plusieurs fois la création d'un réacteurs dans l'effacer auparavant de la mémoire, il s'additionne

? tu veux dire que le réacteur ne fait pas partie QUE du dessin actif ?

si c'est le cas je dois donc uriliser le "réacteur de fin" afin de les supprimers de la mémoire lors de (la fin de la) commande "quitter" ?

 

merci

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut

C'est FABULEUX !!!!

 

ça ouvre des possibilités infini !!!!

N'est-ce pas ;)

Et encore, ce n'est qu'un aperçu :cool:

 

(equal (getcname (strcat "_" (car Cde))) "TRACEUR")

Ca peut être simplifié par

(eq (car Cde) "PLOT")

 

Par contre cela veut dire que pour n'importe quel fonction Autocad lancé, le test se fait.... N'est-ce pas un peu lourd ?

Comme tu regardes si c'est la commande traceur qui à été lancé et que si c'est la cas, tu lances ta routine, cela n'alourdi pas AUtocad.

Ca fait un test de plus pour regarder quelle commande a été lancé, c'est tout. Et à la vitesse où fonctionne nos machines, on ne s'en aperçois même pas

 

tu veux dire que le réacteur ne fait pas partie QUE du dessin actif ?

Oui.

 

si c'est le cas je dois donc uriliser le "réacteur de fin" afin de les supprimers de la mémoire lors de (la fin de la) commande "quitter" ?

Pas obligatoirement. Ce que je veux dire, c'est que si tu charges trois ou quatre fois ton lisp, tu auras trois ou quatre fois ta routine qui fera son office au début d'une commande

Ensuite, si sdi=0, pour quitter ou ouvrir un autre dessin aucun problème.

Par contre, si le SDI > 0, lors de l'ouverture d'un autre dessin, tu auras un message d'erreur comme quoi il ne trouve pas la routine (normal, c'est un nouveau dessin) mais par contre, le réacteur sera toujours présent

C'est pour ça qu'il est intérressant de gérer ses réacteurs et de garder la possibilité de les supprimer si besoin est

 

@+

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

Posté(e)

merci Patrick_35...

(par curiosité, "Patrick_35" : le 35, c'est quoi la raison ? 35 ans ? 35 cm. ? :o )

 

L'idée qui me vient pour faire "propre" pour l'utilisation du réacteur de commande, ce serait de n'en créer qu'un seul qui ferait appel à un code ne contenant que des tests (if ....) lançant alors la routine correspondante !... :casstet:

 

Exemple :

 

;;; Création réacteur pour lancement du lisp test de commande.
(setq Rea_Impression_CutePDF (vlr-command-reactor nil
(list (cons :vlr-commandWillStart (function Test_Commande)))))

 

(defun Test_Commande (Rea Cde)
(if (eq (car Cde) "PLOT") (Chem_File_CutePDF))
(if (eq (car Cde) "_line") (Lisp_Line))
(if (eq (car Cde) "_circle") (Lisp_Circle))
[i]...etc...[/i]
)

 

[Edité le 21/12/2006 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Le 35, c'est le département, pas l'age ni, hummm restons prude et modeste ;)

 

Plutot que plusieurs if, passe plutôt pas un cond

Sinon, c'est effectivement une solution

 

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

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é