Communauté
BIM Revit, BIM et Autodesk Construction Cloud (ACC) - Français
Bienvenue sur le forum AEC francophone dédié aux solutions BIM de la société Autodesk. Cet espace est dédié aux professionnels et passionnés du secteur de l'Architecture, de l'Ingénierie et de la Construction (AEC) qui utilisent le logiciel Revit ainsi que les plateformes collaboratives d'Autodesk (ACC et Autodesk Forma). Partagez vos connaissances, posez des questions, collaborez sur des idées, et explorez les sujets, que vous soyez architecte, ingénieur, gestionnaire de projet ou tout autre acteur de l'AEC.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Comportement inattendu IExternalEventHandler - Revit API - C#

4 RÉPONSES 4
Répondre
Message 1 sur 5
samuel.cailletMDQ7N
271 Visites, 4 Réponses

Comportement inattendu IExternalEventHandler - Revit API - C#

Bonjour,

J'ai créer un panneau DockPanel pour ajouter des boutons et donc des fonctions.

Dans l'une des fonctions je souhaite que l'utilisateur clique pour choisir un point.

 

Dans un premier temps voici le code pour le panneau

 

public partial class ManagerMainPage : Page, IDisposable, IDockablePaneProvider
    {
        Action myAction;
        ExternalEvent myActionExternalEvent;

        #region constructor
        public ManagerMainPage()
        {
            InitializeComponent();
            myAction = new Action();
            myActionExternalEvent = ExternalEvent.Create(myAction);
        }
        #endregion

        private void ListBoxItem_Action_Selected(object sender, RoutedEventArgs e)
        {
            myActionExternalEvent.Raise();
        }
    }

 

 Le code de mon action

 

public partial class ManagerMainPage
    {
        public class Action : IExternalEventHandler
        {
            public void Execute(UIApplication a)
            {
                UIDocument uidoc = a.ActiveUIDocument;
                Document doc = uidoc.Document;
                
                FamilySymbol FamilySymbol = null;

                using (Transaction t = new Transaction(doc, "PickPoint"))
                {
                    Plane plane = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, doc.ActiveView.Origin);

                    // create a sketch plane using Geometry.Plane
                    t.Start();
                    SketchPlane sp = SketchPlane.Create(doc, plane);
                    doc.ActiveView.SketchPlane = sp;
                    t.Commit();

                    //blocage ICI dans cette action de selection
                    XYZ point = uidoc.Selection.PickPoint("Veuillez sélectionner un point");

                    //SUITE ICI QUI NE S'EXECUTE PAS
                }
                return;
            }

            public string GetName()
            {
                return "External Event Action";
            }
        }
    }

 

Au moment de sélectionner un point Revit se fige complètement et affiche en bas à gauche "Prêt"...

2021-12-02_10h09_38.png

Le plus étrange, c'est que si je passe sur une autre fenêtre (Windows) et que je reviens sur Revit + un clic dans la fenêtre, je peux enfin cliquer pour sélectionner le point... (et le message "Veuillez sélectionner un point" s'affiche à la place de "Prêt"... Je ne comprends pas le comportement de Revit vis-à-vis de cette action utilisateur au sein de d'une commande externe.

 

Je ne sais pas si c'est suffisamment clair mais toute aide serait la bienvenue ! Merci d'avance 🙂

 

Samuel Caillet

Balises (3)
Étiquettes (1)
4 RÉPONSES 4
Message 2 sur 5

Bonjour,

 

Avez vous essayer de mettre la ligne ci-dessous en dehors de la transaction?

using (Transaction t = new Transaction(doc, "PickPoint"))
                {
                    Plane plane = Plane.CreateByNormalAndOrigin(doc.ActiveView.ViewDirection, doc.ActiveView.Origin);

                    // create a sketch plane using Geometry.Plane
                    t.Start();
                    SketchPlane sp = SketchPlane.Create(doc, plane);
                    doc.ActiveView.SketchPlane = sp;
                    t.Commit();

                   
                }
XYZ point = uidoc.Selection.PickPoint("Veuillez sélectionner un point");

 

Message 3 sur 5

Bonjour,

 

Merci de votre réponse, j'ai fait l'essai, oui, mais rien n'y fait malheureusement... J'ai fini par accepter un "clic molette" dans la vue active pour pallier le problème.

Message 4 sur 5

Bonjour @samuel.cailletMDQ7N , la solution que vous avez trouvée peut-elle être marquée comme solution approuvée ou s'agit-il seulement d'un pis-aller ?


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
Message 5 sur 5

C'est faute de mieux pour le moment, en effet 🙂

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report