Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Event bei Umschalten der Ansicht

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Event bei Umschalten der Ansicht (3164 mal gelesen)
Boortsneggor
Mitglied
Ingenieur


Sehen Sie sich das Profil von Boortsneggor an!   Senden Sie eine Private Message an Boortsneggor  Schreiben Sie einen Gästebucheintrag für Boortsneggor

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 18. Apr. 2014 16:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Guten Tag,
ich habe mir neben der klassischen Toolbar  parallel noch eine  Methode zum Erstellen und Einfügen einer Ribbonbar geschrieben. Jetzt suche ich nach einer Möglichkeit, zu erkennen, ob der Anwender zur klassischen Ansicht und umgedreht wechselt. Ich würde gern bei der klassischen Ansicht die Toolbar und sonst die Ribbonbar laden lassen.

Nebenbei, kann es sein, dass Autodesk bei AutoCad 2015 das Umstellen auf die klassische Ansicht gar nicht mehr möglich ist?

Vielen Dank und ein schönes Osterfest!

------------------
Robert Menger
Menger Engineering GmbH
Entwicklung

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


Sehen Sie sich das Profil von Ingenieur Studio HOLLAUS an!   Senden Sie eine Private Message an Ingenieur Studio HOLLAUS  Schreiben Sie einen Gästebucheintrag für Ingenieur Studio HOLLAUS

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 18. Apr. 2014 18:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Boortsneggor 10 Unities + Antwort hilfreich

Ob der Anwender "klassisch" oder einen selbstbenannten Arbeitsbereich hat, auf das würde ich mich nicht einlassen.
Für Dich ist ja nur wichtig, ob die Multifunktionsleiste aktiviert oder deaktiviert ist. Entsprechend würde ich die Systemvariable "RIBBONSTATE" überwachen und gegebenenfalls auf die Änderung dieser reagieren.
Zitat:
kann es sein, dass Autodesk bei AutoCad 2015 das Umstellen auf die klassische Ansicht gar nicht mehr möglich ist?
Es ist tatsächlich so, dass kein Arbeitsbereich mehr vordefiniert ist, der "AutoCAD klassisch" benannt ist. Es gibt aber sehr wohl noch die "alten" Werkzeugkästen und man kann sich einen klassischen Arbeitsbereich damit rel. einfach erstellen, auch mit 2015.

------------------


www.cars4fun.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Boortsneggor
Mitglied
Ingenieur


Sehen Sie sich das Profil von Boortsneggor an!   Senden Sie eine Private Message an Boortsneggor  Schreiben Sie einen Gästebucheintrag für Boortsneggor

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 25. Apr. 2014 17:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo

vielen Dank, dass mit der Systemvariable "RIBBONSTATE" scheint schon mal zu funktionieren. Ich lade meine GUI-Elemente mit dem Event "SystemVariableChanged" bzw. "SystemVariableChanging". Leider funktioniert das Laden nicht ganz zuverlässig, wenn ich beispielsweise von "AutoCad klassisch" auf "Zeichnung und Beschriftung" umschalte, wird die SystemVariable scheinbar sehr schnell, mehrmals hintereinander geändert. Ich suche nun eine Möglichkeit, vor allem die Ribbonbar zuverlässig in Abhängigkeit der Systemvariable zu laden? Ich habe in einem anderen Thread gelesen, dass man für das Laden einer Ribbonbar in der Initialize-Methode einen Reactor verwenden soll. Wie ist das genau gemeint, müsste ich das vielleicht mit einbauen?

Grüße Robert

------------------
Robert Menger
Menger Engineering GmbH
Entwicklung

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


Sehen Sie sich das Profil von Ingenieur Studio HOLLAUS an!   Senden Sie eine Private Message an Ingenieur Studio HOLLAUS  Schreiben Sie einen Gästebucheintrag für Ingenieur Studio HOLLAUS

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 26. Apr. 2014 10:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Boortsneggor 10 Unities + Antwort hilfreich

Zitat:
[...]wird die SystemVariable scheinbar sehr schnell, mehrmals hintereinander geändert
Die Vorgehensweise in solchen/ähnlichen Fällen wäre von mir:
- ich habe einen stetigen Eventhandler, der die Änderung der Systemvariable überwacht.
- wird dieser "angesprungen", dann erzeuge ich einen temporären Eventhandler, der auf Editor.EnteringQuiescentState reagiert (natürlich habe ich ein Flag parallel dazu, das mir sagt, ob dieser neue Eventhandler schon aktiviert ist)
- und wenn AutoCAD dann 100mal die Sysvar geschaltet hat, wartet mein Prozess dann darauf, dass AutoCAD mit all seinen eigenen Aktionen fertig ist ... und jetzt wird EnteringQuiescentState angesprungen, wo jetzt die weiteren Aktionen (in Deinem Fall Menü umbauen) durchgeführt wird. In dieser Sub wird auch gleich der Eventhandler zu Editor.EnteringQuiescentState wieder zurückgenommen.

------------------


www.cars4fun.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Boortsneggor
Mitglied
Ingenieur


Sehen Sie sich das Profil von Boortsneggor an!   Senden Sie eine Private Message an Boortsneggor  Schreiben Sie einen Gästebucheintrag für Boortsneggor

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 27. Apr. 2014 12:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Vielen Dank für die Antwort. Gleiches ist mir nach dem Verfassen des letzten Beitrages auch in den Sinn gekommen  . Nur hatte ich es mit dem Event CommandEnds gemacht.  EnteringQuiescentState ist an dieser Stelle wohl besser geeignet. Das Laden des jeweiligen Menus nach Umschalten der Ansicht funktioniert jetzt einwandfrei. Jetzt habe ich nur noch das Problem, dass meine Ribbonbar am Anfang des Programmes nicht geladen wird. Ich hatte versucht den EnteringQuiescentState-EventHandler einfach in der Initialize-Funktion zu registrieren. Leider ohne Erfolg. Ich vermute ein ähnliches Problem. Wahrscheinlich wird versucht das Ribbon-Menu zu laden, bevor AutoCad die Menuleiste geladen hat. Mit dem CommandEnds-Event und Abfragen des "RIBBON"-Commands klappt es auch nicht. Hast du hierfür noch eine Idee?

Vielen Dank für deine Hilfe und ein schönen Restsonntag noch!

Grüße Robert

------------------
Robert Menger
Menger Engineering GmbH
Entwicklung

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


Sehen Sie sich das Profil von Ingenieur Studio HOLLAUS an!   Senden Sie eine Private Message an Ingenieur Studio HOLLAUS  Schreiben Sie einen Gästebucheintrag für Ingenieur Studio HOLLAUS

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 27. Apr. 2014 15:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Boortsneggor 10 Unities + Antwort hilfreich

Zitat:
Hast du hierfür noch eine Idee?
Jetzt müsste ich mehr von dem sehen, was Du machst und vor allem, wie sich AutoCAD verhält, wenn es nicht funktioniert. Insbesondere das EnteringQuiescentState hätte ich mir schon auch funktionierend erwartet, auch wenn es in der Initialize-Implementation gestartet wird.
Ganz dummer Gedanke: lass in der Initialize ein SendCommand oder ähnliches aus, das dann den Rest der Funktion erfüllt. Da SendCommand asynchron startet, sollte das eigentlich auch erst am Ende der gesamten AutoCAD Initialisierung aktiv werden dürfen. Und dass der Weg nicht schön ist, weiß ich, aber es ist jetzt halt mal ein Workaround mit hohem Wahrscheinlichkeitsanteil an Funktionstüchtigkeit. 

------------------


www.cars4fun.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Karlovac
Mitglied



Sehen Sie sich das Profil von Karlovac an!   Senden Sie eine Private Message an Karlovac  Schreiben Sie einen Gästebucheintrag für Karlovac

Beiträge: 54
Registriert: 12.09.2013

AutoCAD Mechanical 2012-2015
Windows 7 Enterprise X64
Visual Studio 2010/2013
Intel Xeon W3680
Nvidia Quadro 2000
16 GB RAM

erstellt am: 28. Apr. 2014 08:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Boortsneggor 10 Unities + Antwort hilfreich

Hallo,

vielleicht deckt folgendes deine Wünsche ab:

Code:

        // aus der myPlugin.cs

        void IExtensionApplication.Initialize()
        {
            if (Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet != null)
            {
                Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet.Loaded += new EventHandler(workspaceLoadedEventHandler);
            }
            else
            {
                Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSetCreated += new EventHandler(ribbonPaletteSetCreated);
            }
        }

        private void ribbonPaletteSetCreated(object Sender, EventArgs e)
        {
            Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet.Loaded += new EventHandler(workspaceLoadedEventHandler);
        }

        private void workspaceLoadedEventHandler(object Sender, EventArgs e)
        {
            System.Windows.Forms.MessageBox.Show("RibbonPaletteSet changed. Active workspace = " + (string)Application.GetSystemVariable("WSCURRENT"));
        }


Das RibbonPaletteSet.Loaded Event springt jedes mal an wenn sich das Interface ändert:
  - andere Workspace ausgewählt
  - Änderung im CUI-Menu
  - Menuload/Unload
  - falls im Startup: wenn das Interface das erste Mal hochfährt
 
RibbonServices.RibbonPaletteSetCreated Event deshalb, weil falls man die *.dll über z.B. acad.lsp ladet dann ist
  Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet noch auf null. Dann wird das "loaded" Event eben erst hinzugefügt wenn das RibbonPaletteSet erstellt wird ....


 
Gruß Karlovac
 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Boortsneggor
Mitglied
Ingenieur


Sehen Sie sich das Profil von Boortsneggor an!   Senden Sie eine Private Message an Boortsneggor  Schreiben Sie einen Gästebucheintrag für Boortsneggor

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 07. Mai. 2014 16:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich habe es jetzt noch ein wenig anders lösen können, hier mal meine Lösung:

Code:

//methode which is called by loading the dll but before opening a document!!!
public void Initialize()
{
      //event which is fired by changing any system variable
      acadApp.SystemVariableChanging += new
      Autodesk.AutoCAD.ApplicationServices.SystemVariableChangingEventHandler(SysVariableChanging);

      if (Autodesk.Windows.ComponentManager.Ribbon == null)
      {
        //if the ribbonbar of acad isn´t ready, register the event handler to wait until it is
        Autodesk.Windows.ComponentManager.ItemInitialized += new EventHandler<RibbonItemEventArgs>(ItemInitialized);
     
      }else{
        //load the gui depending on the ribbonState of acad
        LoadMenu();
      }
}

//event which was fired if an item of componentmanager was ready
public void ItemInitialized(object sender, RibbonItemEventArgs args) {

 
    if (Autodesk.Windows.ComponentManager.Ribbon != null)
    {
        //load the gui depending on the ribbonState of acad
        LoadMenu();

        //unregister the event handler
        Autodesk.Windows.ComponentManager.ItemInitialized -= new EventHandler<RibbonItemEventArgs>(ItemInitialized);
    }
}
//methode which would be called by changing any system variable
public void SysVariableChanging(object senderObj, Autodesk.AutoCAD.ApplicationServices.SystemVariableChangingEventArgs sysVarChEvtArgs)
{
            //if the variable ribbonstate is changed
            if (sysVarChEvtArgs.Name == "RIBBONSTATE")
            {
                //start the event for waiting til the application is ready
                _doc.Editor.EnteringQuiescentState += new EventHandler(EnteringQuiesencentState);
                   
            }

}

public void EnteringQuiesencentState(object senderObj, EventArgs args)
{

                //unregister the event
                _doc.Editor.EnteringQuiescentState -= new EventHandler(EnteringQuiesencentState);

                //load the gui depending on the ribbonState of acad
                LoadMenu();

}

//methode which would be called by unloading the interface
public void Terminate()
{

            acadApp.SystemVariableChanging -= new Autodesk.AutoCAD.ApplicationServices.SystemVariableChangingEventHandler(SysVariableChanging);
}


Es war zwar etwas haarig mit den verschachtelten Events, aber jetzt funktioniert alles wunderprächtig!

Vielen Dank nochmal für eure Hilfe!

Grüße Robert

------------------
Robert Menger
Menger Engineering GmbH
Entwicklung

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz