CADxp: Exécution d'un LISP lors d'un REGEN / Impression - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

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

#1 L'utilisateur est hors-ligne   Bapt 

  • ceinture orange
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 12-décembre 16

Posté 04 janvier 2017 - 16:13

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
0

#2 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6129
  • Inscrit(e) : 06-janvier 03

Posté 05 janvier 2017 - 13:59

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
0

#3 L'utilisateur est hors-ligne   Bapt 

  • ceinture orange
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 12-décembre 16

Posté 05 janvier 2017 - 16:06

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
0

#4 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6129
  • Inscrit(e) : 06-janvier 03

Posté 05 janvier 2017 - 18:14

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
0

#5 L'utilisateur est hors-ligne   rebcao 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6660
  • Inscrit(e) : 25-août 04
  • LocationSELESTAT

  Posté 06 janvier 2017 - 06:14

Bonjour,

Tu peux neutraliser une commande en faisant un NONDEF de REGEN ! Du coup AutoCAD met commande inconnue ! Il ne te reste qu'à créer ta commande LISP C:REGEN()

Christian
Formateur, Consultant Expert AutoCAD Indépendant, Formation AutoCAD, télécharger des Supports de Cours AutoCAD, des Outils AutoCAD...
cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
0

#6 L'utilisateur est hors-ligne   Bapt 

  • ceinture orange
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 12-décembre 16

Posté 06 janvier 2017 - 07:28

Salut,

Merci pour vos réponses !

Citation

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
0

#7 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6129
  • Inscrit(e) : 06-janvier 03

Posté 06 janvier 2017 - 10:57

Salut

Et avec les champs ?

@+
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
0

#8 L'utilisateur est hors-ligne   Bapt 

  • ceinture orange
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 12-décembre 16

Posté 06 janvier 2017 - 11:21

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...)
0

#9 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4427
  • Inscrit(e) : 20-juin 03

Posté 06 janvier 2017 - 15:19

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
0

#10 L'utilisateur est hors-ligne   Bapt 

  • ceinture orange
  • Groupe : Membres
  • Messages : 21
  • Inscrit(e) : 12-décembre 16

Posté 30 janvier 2017 - 11:34

salut !

Merci beaucoup pour ton aide.

C'est exactement ce que j'avais besoin!

Salutations.
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)