Aller au contenu

Exécution d'un LISP lors d'un REGEN / Impression


Messages recommandés

Posté(e)

Bonjour et bonne année !

 

J'aimerais savoir si c'est possible qu'une fonction LISP s'exécute automatiquement lors d'un REGEN ou de l'impression du dessin ?

 

Merci de votre aide.

 

Salutation

Posté(e)

Salut

 

Oui, c'est possible via les réacteurs.

 

Par exemple

(defun patrick:debut_command (rea cde)
 (cond
   ((eq (car cde) "REGEN")
     (alert "DEBUT DU REGEN")
   )
   ((eq (car cde) "PLOT")
     (alert "DEBUT DE L'IMPRESSION")
   )
 )
 (princ)
)

 

Pour activer le réacteur

(or mon_reacteur
 (setq mon_reacteur (vlr-command-reactor nil (list (cons :vlr-commandWillStart (function patrick:debut_command)))))
)

 

Pour supprimer le réacteur

(vlr-remove mon_reacteur)

 

@+

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)

Salut Patrick,

 

Merci pour ton aide.

 

je suis novice dans l'univers du Lisp et je n'ai pas encore vu le fonctionnement des réacteurs. Pourrais-tu m'orienter pour intégrer des réacteurs dans mon code ?

 

(defun c:ctr (/ x )

    (command "_.mspace")

              
      (setq x (getvar "viewctr"))
	
	(command "_.pspace")
                (command "_.text"

			(cond

 		 			((=(getvar 'ctab) "Présentation1")
				  '(100 10))
   
	
  		 			((=(getvar 'ctab) "Présentation2")
  				  '(20 20))
   

   	          			((=(getvar 'ctab) "Présentation3")
				  '(30 30))

  		 	    		
  		 		)


                     		"2.1"
                      		""		    
                      		(strcat (rtos (car y ) 2 2) " : " (rtos (cadr y) 2 2))
	)	 



	      	
	    	 
)

 

Je ne sais pas comment lier mon texte à un réacteur.

 

 

Merci d'avance pour ton aide.

 

Salutation

Posté(e)

Si tu es novice en lisp, je te déconseille fortement de t'attaquer aux réacteurs.

 

Déjà, il ne faut pas de command dans un réacteur, sinon ça plante Autocad, voir même le PC. Donc à manipuler avec précaution.

 

Ensuite, c'est pour faire quoi exactement ?

 

@+

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)

Salut,

 

Merci pour vos réponses !

 

Ensuite, c'est pour faire quoi exactement ?

 

Ce LISP me permet d'insérer un texte dans mon espace papier aux coordonnées voulue avec comme valeur le centre de l'espace objet.

 

Pour le moment je dois exécuter la commande manuellement et je dois supprimer le texte avant d'en recréer un nouveau.

 

 

J'aimerais si possible que chaque fois que je bouge ma vue, le texte se mette à jour automatiquement.

 

 

Baptiste

Posté(e)

Dans les champs j'ai bien une variable système (viewctr) qui me donne le centre de la vue, mais le problème c'est qu'il me donne celui de la vue active.

 

Donc lors que je inserts ce champ, le centre reste tout le temps le même (celui de mon espace papier dans ma présentation...)

Posté(e)

Bonjour,

 

Et créer/remettre tout à jour avec une seule commande, ça pourrait faire l'affaire?

 

Exemple:

(defun c:CTR ( / el js js_text nb n ent dxf_ent pt_v l h ins_pt pt_cen)
 (vl-load-com)
 (foreach el (layoutlist)
   (setvar "CTAB" el)
   (setq js
     (ssget "_X"
       (list
         '(0 . "VIEWPORT")
         '(67 . 1)
         (cons 410 el)
         '(-4 . "!=")
         '(69 . 1)
       )
     )
   )
   (if (setq js_text (ssget "_X" (list '(0 . "MTEXT") '(8 . "Bapt") '(67 . 1) (cons 410 el))))
     (repeat (setq nb (sslength js_text))
       (entdel (ssname js_text (setq nb (1- nb))))
     )
   )
   (repeat (setq n (sslength js))
     (setq
       js_obj nil
       pt_v (cdr (assoc 10 (setq dxf_ent (entget (setq ent (ssname js (setq n (1- n))))))))
       l (cdr (assoc 40 dxf_ent))
       h (cdr (assoc 41 dxf_ent))
       ins_pt (list (- (car pt_v) (* 0.5 l)) (- (cadr pt_v) (* 0.5 h)) 0.0)
       pt_cen (cdr (assoc 12 dxf_ent))
     )
     (entmake
       (list
         '(0 . "MTEXT")
         '(100 . "AcDbEntity")
         '(67 . 1)
         (cons 410 el)
         '(8 . "Bapt")
         '(100 . "AcDbMText")
         (cons 10 ins_pt)
         '(40 . 3.5)
         '(41 . 0.0)
         '(46 . 0.0)
         '(71 . 7)
         '(72 . 5)
         (cons 1 (strcat "{\\fArial|b0|i0|c0|p34;" el " : " (rtos (car pt_cen) 2 2) " ; " (rtos (cadr pt_cen) 2 2)))
         '(7 . "Standard")
         '(210 0.0 0.0 1.0)
         '(11 1.0 0.0 0.0)
         '(50 . 0.0)
         '(73 . 1)
         '(44 . 1.0)
       )
     )
   )
 )
 (prin1)
)

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

  • 4 semaines aprè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 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é