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 : 

Revit : C# Boite a outil

3 RÉPONSES 3
RÉSOLU
Répondre
Message 1 sur 4
be-bj
166 Visites, 3 Réponses

Revit : C# Boite a outil

 

Bonjour, je cherche une solution pour afficher une boite de dialogue une From (boite à outil en permanence dans REVIT) et de continuer à travailler dans Rrevit. Actuellement je lance la dll et je ne peux plus travaillé dans Revit.

 

Il y a t'il une solution, si joint le début de programme en C#

 

Cordialement bonne journée

 

*******************************
namespace MENU_REVIT_4
{
[Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
public class Revit4 : Autodesk.Revit.UI.IExternalCommand
{
public UIDocument uiDoc;
public Autodesk.Revit.ApplicationServices.Application rvtApp;
public Autodesk.Revit.DB.Document rvtDoc;
public DEPART bj_Page = new DEPART(); // PAGE FROM PERMANANTE
// DEBUT
public Autodesk.Revit.UI.Result Execute(Autodesk.Revit.UI.ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
{
UIApplication uiApp = commandData.Application;
uiDoc = uiApp.ActiveUIDocument;
rvtApp = uiApp.Application;
rvtDoc = uiDoc.Document;
// https://learn.microsoft.com/fr-fr/dotnet/csharp/advanced-topics/reflection-and-attributes/
bj_Page.Text = "BJ Developpement "+ string.Format("{0:T}", DateTime.Now) + " Version " + FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion;
// ACTIVE LE MENU
bj_Page.ShowDialog();
BOUCLE:
if (bj_Page.Fs1 == 99)
{
goto BOUCLE_SORTIE;
}
//
switch (bj_Page.Fs1)
{
case 0:
bj_Page.ShowDialog();
goto BOUCLE;
case 1:
Lecture_Des_Pieces_Et_Des_Murs();
//Lecture_Du_Mur_De_La_Piece();
bj_Page.ShowDialog();
goto BOUCLE;
case 2:


Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
C# Boite a outil

3 RÉPONSES 3
Message 2 sur 4
AroChris
en réponse à: be-bj

Bonjour,

 

Pour pouvoir utiliser une boîte de dialogue tout en conservant l'accès à Revit pour l'utilisateur, il faut afficher celle-ci en "non modal". Cela se traduit par le déclenchement de l'affichant avec "form.Show" au lieu de "form.ShowDialog".

Malheureusement dans ce contexte, il n'est plus possible de modifier la base de données de Revit; impossible de réaliser des transactions.

La solution est de passer par un événement spécifique disponible dans l'API de Revit, à savoir "Idling Event".

À consulter pour aller plus loin sur ce sujet :

https://www.revitapidocs.com/2023/e233027b-ba8c-0bd1-37b7-93a066efa5a3.htm

https://thebuildingcoder.typepad.com/blog/2010/04/idling-event.html

À verifier s'il n'y a pas un exemple dans le SDK Revit :

https://github.com/jeremytammik/RevitSdkSamples

 

Message 3 sur 4
AroChris
en réponse à: be-bj

Cela pourrait ressembler à cela :

[Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
public class Clash : Autodesk.Revit.UI.IExternalCommand 
{
    public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) 
    {
         MyApp app = new MyApp(commandData.Application);
         return Autodesk.Revit.UI.Result.Succeeded;
    }
}

Et :

public class MyApp 
{
    private bool validToDo = false;
    private UIApplication uiApp;
    
    Public MyApp(UIApplication uiapp)
    {
        uiApp = new UIApplication(uiapp.Application);
        uiApp.Idling += MyEventIdling;
        //
        Form MyForm = new Form()
        MyForm.butToDo.Click += ButToDo_Click;
        MyForm.Closing += Form_Closing;
        //
        // TODO
        //       
        MyForm.Show();
    }
    
    private void MyEventIdling(object sender, Autodesk.Revit.UI.Events.IdlingEventArgs e)
    {
        if (validToDo)
        {
            validToDo = false;
            // TODO with Transaction
        }
    }
    
    private void butTodo_Click(object sender, RoutedEventArgs e) 
    {
        validToDo = true;
    }
    
    private void Form_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
    {
        uiApp.Idling -= MyEventIdling;}
    }

 

Message 4 sur 4
patrick.emin
en réponse à: be-bj

Bonjour @be-bj 

Parmi les réponses qui vous ont été données, si une (ou plusieurs) d'entre elles apporte une solution à votre problème ou vous a permis de mieux l'analyser et le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


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

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