Aller au contenu

Encore les reactors


winfield

Messages recommandés

Bonjour,

Je me souviens d'un fichier autocad que Didier avait fait passer, et dans lequel on ne pouvait pas effacer une ligne déjà présente. Le bout de code qui était avec ce fichier, ne serait-ce pas le début d'un code pour les réactors ?

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

Je vais faire appel aux Lispeurs, ou plutot aux VLispeurs.

 

Ce qu'on appelle Reactor, (dites moi si je me trompe) :

ce "n'est" qu'une manière d'intercepter la commande que l'utilisateur à pris et de faire des choses en conséquence, non ?

:casstet:

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

Salut, un réacteur est un évènement qui permet d’agir, soit au niveau d'une commande, soit au niveau d'un objet

Par exemple, je peux intercepter la commande de sauvegarde pour que se soit obligatoirement en V14

Un autre exemple qui j'ai publié sur ce site, est d'associer un texte avec une polyligne fermée pour indiquer une surface. Dès que je bouge ma poly avec les grips par exemple, mon texte se met à jour

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Didier et Patrick, et merci de vos réponses.

 

Si je saisis bien :

un reactor est un principe qui capte une commande et fait des choses en conséquence, ok.....

......mais peut être aussi par rapport à un objet... (pour ce dernier moi y en a pas comprendre ).

Mais j'en reviens au fameux fichier de Didier. Si ma première définition est juste, le code que Didier a utilisé est l'équivalent des reators mais type VB, non ? :cool:

De mémoire, le code de Didier, se traduisait par :

-----------------------------------------------

Si l'utilisateur prend la commande Effacer

tu n'effaces pas et

tu envoie un message d'alerte.

-------------------------------------------------

 

Donc par le même principe, on pourrait faire un truc du genre :

----------------------------------------------------------------------

Si l'utilisateur a pris la commande : "Liste de commandes"

Regarde si ObjetPolyligneX a été modifié

Si oui

Surf=SurfaceObjetPolyligneX

Recherche le ObjetTxtX

ValTxt ObjetTxtX=Valeur TxtX

--------------------------------------------

 

Et du coup on aurait un truc équivalent à ce qu'a fait Patrick......est-ce que je me trompe

 

 

 

:casstet:

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

Re,

Mon délire pourrait ressembler à ça :

Pour le moment, vu que ce n'est qu'un test, il faut faire une polyligne, mettre un Txt et remplacer les handle correspondant dans le code....tout ça bien sûr, manuellement ;)

 

Public Sub AcadDocument_EndCommand(ByVal CommandName As String)
   Select Case CommandName
   Dim ObjPoly As AcadEntity
   Dim ObjTxt As AcadEntity
   Case "STRETCH", "GRIP_STRETCH", "MOVE", "ROTATE", "SCALE", "DROPGEOM"
       For Each ObjPoly In ThisDrawing.ModelSpace
           If ObjPoly.Handle = "EF" Then
               surface = ObjPoly.Area
               For Each ObjTxt In ThisDrawing.ModelSpace
                   If ObjTxt.Handle = "F1" Then
                       ObjTxt.TextString = "S= " & Format(surface, "#0.#0")& " m2"
                   End If
               Next
           End If
       Next
   End Select
End Sub 

 

....Faut peut-être que je creuse encore :casstet:

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

Donc par le même principe, on pourrait faire un truc du genre :

----------------------------------------------------------------------

Si l'utilisateur a pris la commande : "Liste de commandes"

Regarde si ObjetPolyligneX a été modifié

Si oui

Surf=SurfaceObjetPolyligneX

Recherche le ObjetTxtX

ValTxt ObjetTxtX=Valeur TxtX

--------------------------------------------

Pas tout à fait, j'associe plutôt un objet à un réacteur. c'est la modification de l'objet qui appel mon réacteur

Si tu regardes dans l'aide d'autocad, tu trouveras un tutorial en vlisp concernant des dalles de jardin et qui explique toute la démarche ou encore dans le répertoire d'autocad .\Tutorial\VisualLisp\lesson1 à 7

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Oui, mais si tu regardes bien, le vlisp et le vba se ressemble beaucoup

Par exemple pour ouvrir un dessin

en vlisp

(vla-open (vla-get-documents (vlax-get-acad-object)) "C:\\AutoCAD\\Sample\\downtown.dwg")

en vba

ThisDrawing.Application.Documents.Open ("C:\AutoCAD\Sample\downtown.dwg")

 

ThisDrawing.Application = vlax-get-acad-object

Documents = vla-get-documents

Open = vla-open

 

@+

 

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

Lien vers le commentaire
Partager sur d’autres sites

Oui mais franchement, quand tu débutes, c'est déjà difficile d'apprendre un langage et tout ce qui va avec, mais là, s'il faut étudier encore un autre langage dont les seuls docs sont en anglais, :o c'est very very very hard (si t'es pas anglophone).

Enfin.....je n'étais pas plus avancé avant de me mettre au vba....

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

Curieux

Ci-dessous des infos d'un objet qui a un reactor :

 

Commande: (entget (car(entsel))(list "*"))

Choix de l'objet: ((-1 . ) (0 . "LWPOLYLINE") (5 .

"2D") (102 . [surligneur] "{ACAD_REACTORS") [/surligneur] (330 . ) (102 . "}")

(330 . ) (100 . "AcDbEntity") (67 . 0) (410 . "Model")

(8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 128) (43 . 0.0) (38 . 0.0) (39

. 0.0) (10 77.2667 94.6668) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 214.787

118.278) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 392.477 109.306) (40 . 0.0) (41 .

0.0) (42 . 0.0) (10 509.3 45.0112) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0

0.0 1.0))

 

Maintenant sur une copie de l'object qui a le reactor :

 

Commande: (entget (car(entsel))(list "*"))

Choix de l'objet: ((-1 . ) (0 . "LWPOLYLINE") (330 .

) (5 . "9CA") (100 . "AcDbEntity") (67 . 0) (410 .

"Model") (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 128) (43 . 0.0) (38 .

0.0) (39 . 0.0) (10 572.309 222.176) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10

709.829 245.787) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 887.519 236.814) (40 .

0.0) (41 . 0.0) (42 . 0.0) (10 1000.87 169.717) (40 . 0.0) (41 . 0.0) (42 .

0.0) (210 0.0 0.0 1.0))

 

Une copie ne copie pas le reactor ?

 

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Lien vers le commentaire
Partager sur d’autres sites

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é