winfield Posté(e) le 9 janvier 2006 Posté(e) le 9 janvier 2006 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.
winfield Posté(e) le 9 janvier 2006 Auteur Posté(e) le 9 janvier 2006 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.
didier Posté(e) le 10 janvier 2006 Posté(e) le 10 janvier 2006 coucou, ben non, ce n'est pas du "réactor", au sens Lisp du termece n'est "que" du VBA,l'esprit est plus du côté "réaction" si tel appel de commande. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Patrick_35 Posté(e) le 10 janvier 2006 Posté(e) le 10 janvier 2006 Salut, un réacteur est un évènement qui permet d’agir, soit au niveau d'une commande, soit au niveau d'un objetPar exemple, je peux intercepter la commande de sauvegarde pour que se soit obligatoirement en V14Un 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
winfield Posté(e) le 10 janvier 2006 Auteur Posté(e) le 10 janvier 2006 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 Effacertu 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 ouiSurf=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.
winfield Posté(e) le 10 janvier 2006 Auteur Posté(e) le 10 janvier 2006 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.
Patrick_35 Posté(e) le 11 janvier 2006 Posté(e) le 11 janvier 2006 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 ouiSurf=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éacteurSi 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
winfield Posté(e) le 11 janvier 2006 Auteur Posté(e) le 11 janvier 2006 ....en VLips........ :( Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.
Patrick_35 Posté(e) le 11 janvier 2006 Posté(e) le 11 janvier 2006 Oui, mais si tu regardes bien, le vlisp et le vba se ressemble beaucoupPar exemple pour ouvrir un dessinen vlisp(vla-open (vla-get-documents (vlax-get-acad-object)) "C:\\AutoCAD\\Sample\\downtown.dwg")en vbaThisDrawing.Application.Documents.Open ("C:\AutoCAD\Sample\downtown.dwg") ThisDrawing.Application = vlax-get-acad-objectDocuments = vla-get-documentsOpen = vla-open @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
winfield Posté(e) le 11 janvier 2006 Auteur Posté(e) le 11 janvier 2006 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.
winfield Posté(e) le 16 janvier 2006 Auteur Posté(e) le 16 janvier 2006 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.
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