Aller au contenu

Messages recommandés

Posté(e)

Salut,

çà faisait longtemps que je n'étais pas venu vous voir, me revoici avec un petit problème

 

je cherche une solution pour revenir à un état initial si une modification d'un objet par une command autocad ne me satisfait pas

 

je prends un exemple simple pour faire comprendre mon problème

 

imaginons une fonction qui crée un rectangle (lwpolyline) à partir de deux points de sa diagonale jusque là pas de problème.

Dans cette fonction, on effectue un test : si le périmètre du rectangle est supérieur à une valeur maxi, on affiche un message et on ne dessine rien.

jusque là, çà va encore

 

je sais implémenter un réacteur sur commande de façon à ce que mon rectangle reste rectangle après avoir étiré un de ses coins. (avoir un comportement du rectangle un peu comme les fenêtre d'espace papier)

jusque là çà va toujours

 

là ou je bloque c'est que je voudrais que si le nouveau rectangle a un périmètre supérieur à la longueur maxi le rectangle initial se redessine ; autrement dit annuler complètement la commande ETIRER ou GRIP_STRETCH

 

 

 

Inutile de m'écrire le code pour un rectangle, en réalité ma figure est beaucoup plus complexe

mais le problème reste le même :

 

En gros, il s'agit de pouvoir lancer UNDO ou son équivalent dans un réacteur sur fin de commande (et si je pose la question c'est qu'autoCAD n'en veut pas)

 

merci pour toute idée

Posté(e)

Salut,

Je suis completement largué question réacteur, mais

je voudrais que si le nouveau rectangle a un périmètre supérieur à la longueur maxi le rectangle initial se redessine

 

Tu as fait :

si le périmètre du rectangle est supérieur à une valeur maxi, on affiche un message et on ne dessine rien.

jusque là, çà va encor

 

Donc, au lieu de "dessinner rien" vu que le rectangle existe déjà, Tu faits une routine parrallèlle pour la modification, en enregistrant l'état initial du rectangle et le rappeler si tu dépasses la dimension...

 

(je sais, c'est facile à dire sans donner d'exemple...)

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

 

Donc, au lieu de "dessinner rien" vu que le rectangle existe déjà, Tu faits une routine parrallèlle pour la modification, en enregistrant l'état initial du rectangle et le rappeler si tu dépasses la dimension...

 

(je sais, c'est facile à dire sans donner d'exemple...)

 

 

ben oui mais le rectangle initial il a été modifié par la commande, justement;

quoi que..... en utilisant les réacteurs de début de commande et de fin de commande çà doit pouvoir marcher....

çà nécessite toutefois de mémoriser l'état avant tout action...

si j'ai rien de plus simple je creuse cette piste

 

Posté(e)
Salut

 

Tu as pensé à

(vl-cmdf "_.undo" "1")

Tout en ayant pris soin d'utiliser auparavant les vla-startundomark/vla-endundomark

 

@+

 

Il y a une amélioration par rapport à (Command "_.Undo" "1") c'est que je n'ai plus de message d'erreur ; je pense donc qu'avec vl_cmdf AutoCAD sait qu'il n'a pas le droit de lancer une commande à l'intérieur d'un réacteur sur commande et donc il ne l'exécute pas

 

par contre il n'annule pas la commande etirer

 

merci quand même

Posté(e)

Salut,

 

c'est pas très "propre" mais tu peux peut-être

- faire une copie de l'objet dans un :vlr-commandWillStart

- dans le le vlr-commandEnded supprimer l'objet si la superficie est devenue trop grande, la copie sinon.

- ne pas oublier un vlr-commandCancelled et un vlr-commandFailed qui suppriment aussi la copie.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é