sechanbask Posté(e) le 15 avril 2014 Posté(e) le 15 avril 2014 Bonjour, Je travaille sur autocadmep et parfois en changeant de hauteur un tuyau, ça change tout y compris des choses que je ne peux réellement pas déplacer (liés à des contraintes sur le chantier). Je cherche à interdire le déplacement de certains objets AEC (raccord de tuyau, de gaine). Je pensais faire un réacteur sur certaines pièces. Je voudrai pour commencer mettre un réateur sur un objet, puis qu'on m'avertisse en cas de déplacement. Voilà ce que j'ai modestement commencé mais je serais ravi d'avoir un peu d'aide : (vl-load-com) ;initialisation (vlr-dwg-reactor "Fixer pièce" '((:??? . avertissement))) (defun avertissement (alert (strcat "un objet bloqué vient d'être déplacé")) (princ) ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
(gile) Posté(e) le 15 avril 2014 Posté(e) le 15 avril 2014 Salut, Regarde plutôt du côte des réacteurs d'objets (vlr-object-reactor). Tu peux avoir un réacteur par objet à surveiller : (if (setq obj (car (entsel "\nSélectionnez un objet à surveiller: "))) (vlr-object-reactor (list (vlax-ename->vla-object obj)) "Fixer pièce" '((:vlr-modified . avertissement)) ) ) (defun avertissement (owner rea lst) (alert (strcat "un objet bloqué vient d'être modifié")) (princ) ) Ou un seul réacteur contenant la liste des objets à surveiller. On accède à cette liste avec vlr-owners et on peut la modifier avec vlr-owner-add et vlr-owner-remove. ATTENTION : on ne peut pas modifier un objet dans la fonction callback sous peine d'entrer dans une boucle sans fin. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 16 avril 2014 Posté(e) le 16 avril 2014 Bonjour, Si je comprends bien, le vlr-object-reactor n'est pas persistant, donc ça ne marchera pas d'une session à la suivante ? A moins de marquer les objets à surveiller d'une manière ou d'une autre et de rétablir les réacteurs de surveillance au démarrage. Je crois que le sujet a été traité très récemment. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
sechanbask Posté(e) le 17 avril 2014 Auteur Posté(e) le 17 avril 2014 Merci Gile ! Malheureusement 2 points me gênent : - impossible de bloquer l'objet puisqu'en tentant de le redéplacer, je serais dans une boucle.- cette solution n'est valable que pour la session active... (comme zebulon_ me l'a fait remarquer) J'ai eu sans doute une mauvaise idée en partant sur un réacteur. Si quelqu'un a une idée lumineuse... ATEGIE - Bureau d'Études Fluideshttp://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.pngExécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffragewww.ategie.fr
Patrick_35 Posté(e) le 18 avril 2014 Posté(e) le 18 avril 2014 Salut Tu peux créer une liste contenant les objets à ne pas déplacer.Cette liste peut être sauvegardée dans le dessin afin de retrouver ses éléments lors de la réouverture du dessin.Lors de la commande déplacement, tu peux placer les objets de la liste sur un calque temporaire verrouillé. Cela implique un ralentissement du PC dès que l'on bouge un objet, le chargement automatique du lisp quel que soit le dessin afin de gérer les objets au besoin. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
GEGEMATIC Posté(e) le 22 avril 2014 Posté(e) le 22 avril 2014 Salut, ATTENTION : on ne peut pas modifier un objet dans la fonction callback sous peine d'entrer dans une boucle sans fin. ce point me chagrine, puisque dans son cas, il faut qu'il remette la pièce à sa place, dans la fonction callback, non ? dans mes réacteurs, j'utilise un sémaphore pour indiquer que la modification en cours est due à une réaction, et je n'ai pas de problème : les réacteurs sont bien définis temporellement: c'est soit begin, soit modified, donc on est pas dans de l'évolution dynamique. on peut aussi utiliser vlax-write-enabled-p, qui nous indique que l'objet est déjà en cours de modification. en tous cas, à chaque fois que je me repanche sur ces réacteurs, il me faut un peu de temps pour comprendre le mécanisme ... Donc pour ce problème la, je stockerai la position initiale dans l'objet que l'on veut fixer (vlax-ldata-put) je créerai un réacteur avec comme propriétaires l'ensemble des pièces à verrouiller, et comme callback un simple déplacement vers le point d'origine de la pièce, qui sera le notifier, la fonction call back testant si la réaction est due à la réaction ... la fonction callback serait du genre: ;;remise au point (if (vlax-write-enabled-p notifier-object) (progn (setq pt (vlax-ldata-get notifier-object)) (vla-put-InsertionPoint notifier-object pt) ) (prompt "\nRéaction à la réaction ... ne change rien") ) Gérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
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