Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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:

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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 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_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

 

./__\.
(.°=°.)
Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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 lisp

et 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 :)

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)
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

Posté(e)

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 Bruno

Ps : En espérant trouver dans le post à venir une porte d’entrée (tout confort) dans l’univers des réacteurs..

Apprendre => Prendre => Rendre

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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

Posté(e)
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éacteurs

vlr-owners et ses deux copains pour gérer la liste d'objets à intégrer au réacteur

vlr-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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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

 

./__\.
(.°=°.)

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é