Aller au contenu

Messages recommandés

Posté(e)

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 Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

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

Posté(e)

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.

 

Amicalement

Vincent

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)

Posté(e)

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 Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

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

 

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.fr

Blog: http://g-eaux.over-blog.com

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é