lenoil Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 Bonjour à tous, je souhaite être informé dès qu'un utilisateur à réaliser une modification de vertex ( suppression, déplacement, ajout) ou supprimer une figure ...sur un calque donné ... Est ce possible en lisp ? je pense au reactor de type vlr-acdb-reactor ? Merci pour votre aide A++
bryce Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 Bonjour, Informé comment ? Par SMS ? :P Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
lenoil Posté(e) le 11 janvier 2012 Auteur Posté(e) le 11 janvier 2012 Dois je comprendre qu'on ne peut pas savoir si un utilisateur déplace un vertex sur une figure d'un calque en lisp? Y a t-il un autre moyen ? :unsure:
Tramber Posté(e) le 11 janvier 2012 Posté(e) le 11 janvier 2012 Déplacer un vertex, ca veut dire quoi ? Tu parles d'édition par les poignées d'une polyligne ou déplacer un vertex d'objet 3D ?Dans tous les cas, on y arrive :P Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
lenoil Posté(e) le 13 janvier 2012 Auteur Posté(e) le 13 janvier 2012 oui je parle d'édition par les poignées d'une polyligne ...
Patrick_35 Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Salut Je ne pense pas que vlr-acdb-reactor soit le plus approprié, car si tu effaces un objet, il est ensuite impossible de connaître ses propriétés (objet effacé)Le plus simple a mon sens est d'utiliser vlr-object-reactor. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Salut Patrick_35. On n'attendait plus que toi ?J'aurais pensé qu'il fallait chercher la réaction à la commande "Grip_Edit", je n'ai plus la syntaxe.Car passer par un objectModified ou qqe chose comme ça, n'est pas la meilleure solution, n'est-ce pas ? Enfin, je manipule si peu les réacteurs que je ne maitrise pas (plus) l'écriture de l'essentiel des codes.Tu donnerais une programmation minimale... ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Salut Tramber (avec le r ^^) L'avantage d'utiliser vlr-object-reactor et aussi de voir s'il a été effacé (comme demandé lenoil) et si un lisp n'est pas intervenu, ce que l'on ne voit pas en utilisant vlr-editor-reactor ou vlr-command-reactor pour les grips Par exemple(defun patrick:alerte_objet_effacer (obj rea data) (princ "\nL'objet ") (princ obj) (princ " a été effacé.") (princ) ) (and (ssget "x" (list (cons 8 "Mon_Calque_à_Contrôler"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (setq lst (cons ent lst)) ) (vla-delete sel) (setq patrick_reacteur_effacer (vlr-object-reactor lst nil (list (cons :vlr-erased (function patrick:alerte_objet_effacer))))) ) ) Pour effacer le réacteur(vlr-remove patrick_reacteur_effacer) ps : Je suis comme toi, cela fait un moment que je n'ai pas fait de réacteurs Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lenoil Posté(e) le 13 janvier 2012 Auteur Posté(e) le 13 janvier 2012 Merci Patrick ... toujours aussi fort à ce que je vois Il y a longtemps que j'étais pas venu sur ce forum vu que je fais pas énormément de lispet j'ai maintenant une réponse. J'ai plus qu'à voir de mon coté et si on devait se passer du lisp vous prendriez quoi comme techno ? une dll .net ? du VB ? en tous les cas merci à vous deux :)
Tramber Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Soit ! On crée un (qu'on ajoute ?)(setq tramber_reacteur_changed (vlr-object-reactor lst nil (list (cons :VLR-Modified (function tramber:alerte_objet_changed))))) Je suis prêt à le faire mais la fonction tramber_reacteur_changed va-t-elle devoir toute seule déterminer :1 s'il s'agit d'une polyligne (pour commencer)2 si un point a changé (pas drôle)3 si sur le calque protégé (facile) Et on oublie donc définitivement la réaction à un Grip_Editing ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 et si on devait se passer du lisp vous prendriez quoi comme techno ? une dll .net ? du VB ? Je ne vois aucune raison objective qui puisse faire qu'on aie à se passer du LISP, parce qu'il n'y a aucune raison pour qu'Autodesk l'abandonne, ce sera, après la disparition du VBA, la seule interface de programmation raisonnablement accessible pour les dessinateurs et les programmateurs non professionnels. La programmation .NET (que ce soit en VB, en C#, en F# ou autre ne change rien) demande un apprentissage beaucoup plus long et exigeant qui la réserve, de fait, à ceux qui font uniquement (ou essentiellement) de la programmation.Ce disant, je ne veux décourager personne, bien au contraire. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Bonjour Tramber, Je suis prêt à le faire mais la fonction tramber_reacteur_changed va-t-elle devoir toute seule déterminer Dans ce cas je vais te lire avec un grand intérêt :D , car je ne me suis pas encore intéressé au reacteur, je pensais y venir prochainement, ce sera peut-être l’occasion de regarder cela plutôt que prévu… Amicalement BrunoPs : En espérant trouver dans le post à venir une porte d’entrée (tout confort) dans l’univers des réacteurs.. Apprendre => Prendre => Rendre
Tramber Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 J'attends la réponse de Patrick_35, aujourd'hui je suis enfin en WE (depuis 20 jours !)...... mais je ne serai pas là cet après-m.... ni trop ce soir... ni d'ailleurs trop demain ! (bientôt l'AG extra-ordinaire de mon club) ... tiens (apparté), je vais modifier ma signature Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Salut, Pour essayer de répondre à Tramber, on (je) utilise souvent des réacteurs temporaires créés dans la fonction de retro-appel (callback) du réacteur principal (méthode incontournable avec vlr-object-reactor si on veut pouvoir intervenir su l'objet modifié). Un petit exemple en reprenant celui de Patrick_35. La fonction callback pour l'évènement :vlr-modified crée un nouveau réacteur vlr-command-reactor (on aurait aussi pu en ajouter un pour vlr-lisp-reactor) qui va permettre d'identifier la commande qui a modifié l'objet. Dans la fonction callback de vlr-command-reactor on affiche la boite d'alerte et on supprime le réacteur.Ceci permet de n'avoir qu'un réacteur en action permanente qui ne surveille que certains objets ce qui est plus économique qu'un vlr-command-reactor qui réagit à chaque commande.C'est la méthode que j'ai utilisée dans TotalArea et TotalPerim (if (ssget) (progn (vlax-for ent (setq ss (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object)))) (setq lst (cons ent lst)) ) (vla-delete ss) (setq *gc:ObjectModifiedRea* (vlr-object-reactor lst nil '((:vlr-modified . gc:ObjectModifiedCallback)) ) ) ) ) (defun gc:ObjectModifiedCallback (obj rea data) (vlr-command-reactor obj '((:vlr-commandEnded . gc:CommandCallback))) ) (defun gc:CommandCallback (rea lst) (if (vlax-erased-p (vlr-data rea)) (alert "L'objet a été effacé") (alert (strcat "L'objet : " (vla-get-ObjectName (vlr-data rea)) " a été modifié par la commande : " (car lst))) ) (vlr-remove rea) ) pour supprimer le réacteur :(vlr-remove *gc:ObjectModifiedRea*) (setq *gc:ObjectModifiedRea* nil) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 1 s'il s'agit d'une polyligne (pour commencer)Ce n'est pas le plus compliqué ;) 2 si un point a changé (pas drôle)Il faudrait construire une base (liste) pour ensuite comparer si les points ont changés. Tu peux utiliser les datas des réacteurs par exemple. C'est le deuxième argument dans le réacteur, après la liste (valeur nil) et le troisième dans la routine appelé par le réacteur (variable data).Tu as plusieurs fonctions sympa qui accompagne les réacteursvlr-owners et ses deux copains pour gérer la liste d'objets à intégrer au réacteurvlr-data et son ami pour gérer les datas du réacteur 3 si sur le calque protégé (facile)Pas besoin, avec le filtre de sélection du calque Et on oublie donc définitivement la réaction à un Grip_Editing ? Ben oui, car si tu utilise Pedit ou des lisps de (gile), tu fais comment ? aujourd'hui je suis enfin en WE (depuis 20 jours !)...C'est un très long WE, ce que j'appelle des vacances ;) ce sera peut-être l’occasion de regarder cela plutôt que prévu…C'est l'occasion ou jamais ;) ps : Je viens de voir que (gile) viens de répondre.Pas mal l'idée d'utiliser la modification pour voir si un objet a été effacé. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 J'avais préparé ce petit ensemble mais on aura plus court avec le code de (gile) : Hélas, je dois partir (en deuche, décapoté si le soleil continue) pour récupérer des pièces d'acier (étagères du club), discuter sur dessin (plus sérieux) et charger un peu de matos informatique. Bref. Trop tard.Supers réponses, y a plus qu'à !Ca a l'air intéressant pour les datas.Si (gile) et Patrick_35 veulent nous laisser essayer. Vas-y VDH-Bruno, n'hésite pas. Si je reviens dessus ca sera plutôt dans un creux ou dimanche. B) Et Lenoil aura son outil. (defun patrick:alerte_objet_effacer (obj rea data) (princ "\nL'objet ") (princ obj) (princ " a été effacé.") (princ) ) (defun tramber:alerte_objet_changed (obj rea data) (princ "\nL'objet ") (princ obj) (princ " a changé !!!!\n") (princ) ) (and (ssget "x" (list (cons 8 "0"))) (progn (vlax-for ent (setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (setq lst (cons ent lst)) ) (vla-delete sel) (setq patrick_reacteur_effacer (vlr-object-reactor lst nil (list (cons :vlr-erased (function patrick:alerte_objet_effacer))))) (setq tramber_reacteur_changed (vlr-object-reactor lst nil (list (cons :VLR-Modified (function tramber:alerte_objet_changed))))) ) ) (vlr-remove patrick_reacteur_effacer) (vlr-remove tramber_reacteur_changed) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
VDH-Bruno Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Tramber c’est gentil de te justifier, blague à part je te comprends très bien, l’on a tous nos priorités et l’on compose avec comme l’on peut.. Merci pour tes lignes de codes je regarde.Hélas, je dois partir (en deuche, décapoté si le soleil continue)Ca devrai, le soleil commence seulement à se voiler sur la Picardie donc en Alsace cela devrai tenir jusqu’à la fin de journée. Ps : En espérant trouver dans le post à venir une porte d’entrée (tout confort) dans l’univers des réacteurs..Merci à Patrick_35 et à (gile) d’entrouvrir la porte, je vais tester les codes de (gile) pour mieux comprendre la syntaxe et le mécanisme de fonctionnement des retro-appels. Merci à vous Apprendre => Prendre => Rendre
Patrick_35 Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Ca devrai, le soleil commence seulement à se voiler sur la Picardie donc en Alsace cela devrai tenir jusqu’à la fin de journée.C'est déjà le cas en Bretagne, depuis ce matin. Et comme je suis venue bosser en HD, c'est que du bonheur ce soir :D Merci à Patrick_35 et à (gile) d’entrouvrir la porte, je vais tester les codes de (gile) pour mieux comprendre la syntaxe et le mécanisme de fonctionnement des retro-appels. Mais de rien @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Ok, pauvre de moi, je pars au resto :P Je me pencherai là-dessus u autre jour. J'ai juste répondu vite fait à qqes messages d'autres forums. Pour voir si l'objet a changé de forme, puis-je demander à lenoil si la simple comparaison avantaprès sur la superficie ou le périmètre suffira ?C'est dans quel but ? Pour finir avec les SMS (Patrick_35 on compte sur toi pour nous dire si AutoCAD peut envoyer des SMS, j'arrivais bien à faire du mail Outlook !), et pour résumer : si le cas se produit, on produit un beep ou un message à l'utilisateur. Mais toi, si tu n'es pas sur l'ordi, tu ne seras pas prévenu. Qu'on se le dise ! ;) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 20 janvier 2012 Posté(e) le 20 janvier 2012 Je suis revenu.Lenoil ?!!! COmparaison superficie et / ou périmètre et / ou nombre de points, ca suffit ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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