Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  DBText.Visible funktioniert nicht

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
  
PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
Autor Thema:  DBText.Visible funktioniert nicht (1143 mal gelesen)
kgcadmin
Mitglied
Konstrukteur


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

Beiträge: 19
Registriert: 24.11.2010

Microsoft Windows 7 Enterprise 64Bit SP1;
Intel Core i5 680 3,60GHz CPU;
16GB DDR3 RAM;
NVIDIA Quadro FX 580;
Autodesk Inventor 2012 SP2;
Autodesk AutoCAD Mechanical 2012 SP2;
Autodesk AutoCAD ecsCAD 2012 SP1;

erstellt am: 11. Sep. 2012 09:00    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 Zusammen

In einer DWG-Zeichnung versuche ich einige Texte auszublenden. Da ich nicht den Layer ausblenden kann und die Texte auch nicht auf einen anderen Layer verschieben kann, bleibt mir nur die Möglichkeit, diese über die Visible Eigenschaft auszublenden, d.h.

Code:
DBText.Visible = false

Leider wird diese Eigenschaft nicht übernommen, sprich wenn ich zwar nach dem setzen der Eigenschaft den Wert abfrage, so wird dieser korrekt als "false" angezeigt. Sobald ich die Transaktion beende (Commit) geht die Eigenschaft irgendwie verloren.

Hier die komplette Funktion:

Code:
public void ChageTextVisibility()
        {
            // Datenbank und aktuelle Zeichnung auslesen
            Database oDb = HostApplicationServices.WorkingDatabase;
            Autodesk.AutoCAD.ApplicationServices.Document oDwg = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;

            // Transaction starten
            Transaction oTrans = oDb.TransactionManager.StartTransaction();

            // Aktuelle Layout-ID auslesen
            ObjectId curLayoutID = LayoutManager.Current.GetLayoutId(LayoutManager.Current.CurrentLayout);

            // aktuelles Layout (lesender Zugriff)
            Layout curLayout = (Layout)curLayoutID.GetObject(OpenMode.ForWrite);

            try
            {
                // Zeichnung blockieren
                using (Autodesk.AutoCAD.ApplicationServices.DocumentLock locked = oDwg.LockDocument())
                {
                    curLayout = (Layout)curLayoutID.GetObject(OpenMode.ForRead);

                    // Get the drawings layout dictionary
                    DBDictionary layoutDict = (DBDictionary)oTrans.GetObject(oDb.LayoutDictionaryId, OpenMode.ForWrite);

                    foreach (DictionaryEntry id in layoutDict)
                    {
                        // Layout auslesen
                        Layout oLayout = (Layout)oTrans.GetObject((ObjectId)id.Value, OpenMode.ForWrite);

                        BlockTableRecord oBtr = (BlockTableRecord)oTrans.GetObject(oLayout.BlockTableRecordId, OpenMode.ForWrite);

                        if (oBtr.IsLayout == true)
                        {
                            // Get the enumerator
                            BlockTableRecordEnumerator oBtre = oBtr.GetEnumerator();

                            // Loop through all blocks in the block table
                            while (oBtre.MoveNext())
                            {
                                Entity oEnt = (Entity)oTrans.GetObject(oBtre.Current, OpenMode.ForWrite);

                                if (oEnt.GetType() == typeof(BlockReference))
                                {
                                    // Change the entity to a block reference
                                    BlockReference oBr = (BlockReference)oEnt;

                                    DBObjectCollection dBObjectCollection = new DBObjectCollection();

                                    oBr.Explode(dBObjectCollection);


                                    foreach (Entity e in dBObjectCollection)
                                    {
                                        if (e is DBText)
                                        {
                                            DBText Text = e as DBText;
                                           
                                            // Sondertexte auf unsichtbar schalten
                                            if (Text.TextString.IndexOf("!GENTITLE-MAX") != -1)
                                            {
                                                MessageBox.Show(Text.Visible.ToString());
                                                Text.Visible = false;
                                                MessageBox.Show(Text.Visible.ToString());  // korrekter Wert
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            catch(System.Exeption ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                oTrans.Commit();
            }
        }



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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4187
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 11. Sep. 2012 11:00    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 kgcadmin 10 Unities + Antwort hilfreich

... so auf dem ersten Blick: Schließ mal alle Objekte, die du geöffnet hast.

Grüße!
Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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: 11. Sep. 2012 11:11    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 kgcadmin 10 Unities + Antwort hilfreich

Oder die Transaction innerhalb des DocumentLocks machen, denn wenn zuerst das DocumentLock aufgehoben wird und erst danach die TransAction mit .Commit beendet wird, dann endet das IMHO als Exception.
BTW: Das Transaction.Commit würde ich immer innerhalb eines Try-Catch machen, nicht im Finally!

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


www.cars4fun.at

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

kgcadmin
Mitglied
Konstrukteur


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

Beiträge: 19
Registriert: 24.11.2010

Microsoft Windows 7 Enterprise 64Bit SP1;
Intel Core i5 680 3,60GHz CPU;
16GB DDR3 RAM;
NVIDIA Quadro FX 580;
Autodesk Inventor 2012 SP2;
Autodesk AutoCAD Mechanical 2012 SP2;
Autodesk AutoCAD ecsCAD 2012 SP1;

erstellt am: 11. Sep. 2012 11:58    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

Zuerst einmal Danke für die raschen Antworten!

@ Ingenieur Studio HOLLAUS: Das mit dem try-catch stimmt natürlich schon, jedoch würde ein Fehler (in diesem Fall) bereits beim vorherigen try-catch ausgelöst...

@ Holger: Wenn ich dich richtig verstanden habe, so meinst du mit "Schliessen aller geöffneten Objekte", dass diese mit "Dispose" gelöscht werden sollen?
Falls ja, so hat dies leider auch nicht geholfen...

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4187
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 11. Sep. 2012 12: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 kgcadmin 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von kgcadmin:
... @ Holger: Wenn ich dich richtig verstanden habe, so meinst du mit "Schliessen aller geöffneten Objekte", dass diese mit "Dispose" gelöscht werden sollen?
Falls ja, so hat dies leider auch nicht geholfen...


Nein, ich meine Object.Close(); - weil mit Object.Dispose() zerstörst du ja das Object.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.


defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!


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: 11. Sep. 2012 12:17    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 kgcadmin 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von kgcadmin:
jedoch würde ein Fehler (in diesem Fall) bereits beim vorherigen try-catch ausgelöst...
Ich sehe aber kein "voriges try-catch". Und wenn es ein Try-Catch in einer übergeordneten Funktion gäbe (sollte das so gemeint sein), dann hätte ich die weitere Möglichkeit in Betracht gezogen, dass ev. auch eine übergeordnete Transaction existiert, die dann nicht mit .Commit abgeschlossen wurde?
Das mit "Transaction innerhalb von DocumentLock" ist hoffentlich nicht verloren gegangen.

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


www.cars4fun.at

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

kgcadmin
Mitglied
Konstrukteur


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

Beiträge: 19
Registriert: 24.11.2010

Microsoft Windows 7 Enterprise 64Bit SP1;
Intel Core i5 680 3,60GHz CPU;
16GB DDR3 RAM;
NVIDIA Quadro FX 580;
Autodesk Inventor 2012 SP2;
Autodesk AutoCAD Mechanical 2012 SP2;
Autodesk AutoCAD ecsCAD 2012 SP1;

erstellt am: 11. Sep. 2012 17:03    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

Ich hab's!
Ihr hattet beide recht, jedoch habe ich einen Anfänger-Fehler begangen. Ich habe statt der Block-Definition die Block-Referenz bearbeitet.
Mit dem folgenden Code hats dann schliesslich geklappt:
Code:
public void ChageTextVisibility()
Transaction trans = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction();
            try
            {
                BlockTable blockTable = (BlockTable)Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database.BlockTableId.GetObject(OpenMode.ForWrite);
                SymbolTableEnumerator blockTableEnumerator = blockTable.GetEnumerator();
                while (blockTableEnumerator.MoveNext())
                {
                    BlockTableRecord blockDefinition = (BlockTableRecord)blockTableEnumerator.Current.GetObject(OpenMode.ForWrite);
                    blockDefinition.Annotative = AnnotativeStates.False;

                    foreach (ObjectId ObjectId in blockDefinition)
                    {
                        Entity entity = (Entity)ObjectId.GetObject(OpenMode.ForWrite);
                        if (entity.GetType() == typeof(DBText))
                        {
                            DBText dbText = (DBText)entity;

                            string Text = dbText.TextString;
                            switch (Text)
                            {
                                case "!GENTITLE-MAX":
                                    dbText.Visible = false;
                                    break;
                                case "!GENTITLE-RU":
                                    dbText.Visible = false;
                                    break;
                                case "!GENTITLE-INSERT":
                                    dbText.Visible = false;
                                    break;
                                case "!GENTITLE-LL":
                                    dbText.Visible = false;
                                    break;
                                default:
                                    // nichts tun
                                    break;
                            }
                        }
                    }
                }
                trans.Commit();
            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                trans.Dispose();
            }
        }


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)2024 CAD.de | Impressum | Datenschutz