Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Aktiven Layer einschalten

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:  Aktiven Layer einschalten (1526 mal gelesen)
Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 14. 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 an Alle,

leider kommt es ab und zu vor , daß der aktive Layer ausgeschalten ist.
Jetzt wollte ich diesen tauen und einschalten. Bekomme aber sofort die Fehlermeldung "einvalidelayer".
Kann ich den Aktiven Layer irgendwie direkt einschalten?
Oder muß ich kurzfristig einen anderen Layer aktiv machen?
Hat damit schon mal jemand zu tun gehabt?

<Autodesk.AutoCAD.Runtime.CommandMethod("Layontau")> _
    Public Sub Laytau()
        Dim MyId As ObjectId
        Using TrAct As Transaction = MyDoc.TransactionManager.StartTransaction()
            MyLayerTable = TrAct.GetObject(MyDB.LayerTableId, OpenMode.ForWrite)
            For Each MyId In MyLayerTable
                If MyDB.Clayer = MyId Then
                    MyLayer = TrAct.GetObject(MyId, OpenMode.ForWrite)
                    MyLayer.IsFrozen = False
                    MyLayer.IsOff = False

                End If
            Next
            TrAct.Commit()

        End Using
    End Sub

Danke Theo

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: 14. Apr. 2014 21:23    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 Theo37 10 Unities + Antwort hilfreich

myDb.CLayer ist ja schon gegeben, wozu zuerst den Zugriff auf die LayerTable und dann noch eine Schleife durch alle Layer machen?
Wozu die Schleife durch alle Layer, wenn der aktuelle Layer ja durch MyDB.Clayer schon gegeben ist?
Code:
Using TrAct As Transaction =    MyDoc.TransactionManager.StartTransaction()
   MyLayer = TrAct.GetObject(MyDoc.Database.Clayer, OpenMode.ForWrite)
   MyLayer.IsFrozen = False
   MyLayer.IsOff = False
   TrAct.Commit()
End Using

Und sollte hier eine Fehlermeldung kommen, dann könnte es sein, dass es notwendig ist, das Document zu "locken", ansonsten bitte angeben, welcher Fehler genau(!) und bei welcher Zeile im Code.

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

[Diese Nachricht wurde von Ingenieur Studio HOLLAUS am 14. Apr. 2014 editiert.]

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 15. Apr. 2014 08:23    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 Studio Hollaus,

die Schleife rührt da her, daß ich mit den anderen Layern auch was anstellen möchte. Ich habe nur hier für meine Frage den Code der mir unwichtig erschien etwas zusammen gekürzt.Die Fehlermeldung kommt in der Zeile: "MyLayer.IsFrozen = False". Und zwar nur beim Aktiven Layer. Egal ob dieser wirklich gefroren war oder nicht.
Das mit dem Document-Locken, das hatte ich schon mal. Muß ich mal probieren.

Danke für die schnelle Antwort.
Gruß, Theo

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 15. Apr. 2014 08:35    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 Theo37 10 Unities + Antwort hilfreich

Ich sage mal so (ohne Ahnung zu haben) - Der aktive Layer kann nicht gefroren sein
(ein gefrorener Layer kann nicht zum aktuellen gemacht werden), vielleicht haben die
Adeskler sich da nun wieder ein Schmankerl ausgedacht.
(Frage die Eigenschaft mal ab - ob sie überhaupt "existiert"/schreibbar ist bei dem aktuellen Layer)

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 15. Apr. 2014 08:53    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 Cadffm,

ich glaube Du hast viel Ahnung. es stimmt der aktive Layer kann gar nicht gefroren sein. Ich hatte das gar nicht geprüft und wollte einfach auf Nummer sicher gehen.
Mein Code sieht jetzt so aus und funktioniert einwandfrei.(habe natürlich noch nicht viel getestet)
Danke und Gruß, Theo

  Public Sub Laytau()
        Dim MyId As ObjectId
        Using TrAct As Transaction = MyDoc.TransactionManager.StartTransaction()
            MyLayerTable = TrAct.GetObject(MyDB.LayerTableId, OpenMode.ForWrite)
            For Each MyId In MyLayerTable
                MyLayer = TrAct.GetObject(MyId, OpenMode.ForWrite)
                If MyLayer.IsFrozen Then MyLayer.IsFrozen = False
                MyLayer.IsOff = False
            Next
            TrAct.Commit()
            MyEditor.WriteMessage("Alle Layer wurden getaut und eingeschalten.")
            MyEditor.Regen()
        End Using
    End Sub

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: 15. Apr. 2014 09:13    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 Theo37 10 Unities + Antwort hilfreich

Zitat:
Ich hatte das gar nicht geprüft
Grundsätzlich sollte bei solchen Schleifen immer geprüft werden, bevor man ein Element zum Schreiben öffnet, spart (Un)Menge an Laufzeit, als erst zum Lesen öffnen, in diesem Zustand prüfen, ob .IsFrozen und .IsOff einen Zustand haben, den/die man ändern müsste und erst dann (z.B. mit UpgradeOpen, denn eine TransAction ist ja schon aktiv) in den modifizierbaren Zustand bringen und ändern.
In wenigen Worten: wenn .IsOff schon false ist, brauch ich nicht nochmals .IsOff = false ausführen.
Just my 2c.

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


www.cars4fun.at

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 15. Apr. 2014 09:15    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 Theo37 10 Unities + Antwort hilfreich

Warum denn überhaupt prüfen und nicht gleich schreiben ?
(im Fall von Layer ein/aus meine ich jetzt speziell)

------------------
CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD

[Diese Nachricht wurde von cadffm am 15. Apr. 2014 editiert.]

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: 15. Apr. 2014 09:37    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 Theo37 10 Unities + Antwort hilfreich

Zitat:
Warum denn überhaupt prüfen und nicht gleich schreiben ?

Zum einen, wenn das Objekt zum Schreiben geöffnet wird, ist mehr Arbeit erforderlich (z.B. locken) als wenn ein Objekt zum Lesen geöffnet wird, damit auch höherer Zeitaufwand.
Weiters wenn eine Eigenschaft überschrieben wird, wird auch der Undo-Buffer erweitert, auch wenn der Wert vorher schon gleich war, auch dieses Handling kostet Performance.

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


www.cars4fun.at

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 15. Apr. 2014 09:37    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 euch Beiden,

ich bin mir nicht sicher ob ich Studio Hollaus richtig verstanden habe. Ich habe mal versucht seinen Vorschlag um zusetzen. Bei einer großen Datei, die auch noch einige Xrefs reinläd habe ich einen Zeitgewinn von etwa zwei Sekunden erreicht. Also eine Verbesserung von 15 auf 13 Sekunden. Auch wenn es hier nicht viel zu sein scheint, werde ich diesen Vorschlag auf jeden Fall bei Anderen Makros verwenden. Da habe ich noch einige die wirklich sehr langsam sind.

Gruß, Theo


Public Sub Laytau()
        Dim MyId As ObjectId
        Using TrAct As Transaction = MyDoc.TransactionManager.StartTransaction()
            MyLayerTable = TrAct.GetObject(MyDB.LayerTableId, OpenMode.ForWrite)
            For Each MyId In MyLayerTable
                MyLayer = TrAct.GetObject(MyId, OpenMode.ForRead)
                If MyLayer.IsFrozen Or MyLayer.IsOff Then
                    MyLayer.UpgradeOpen()
                    If MyLayer.IsFrozen Then MyLayer.IsFrozen = False
                    MyLayer.IsOff = False
                End If
            Next
            TrAct.Commit()
            MyEditor.WriteMessage("Alle Layer wurden getaut und eingeschalten.")
            MyEditor.Regen()
        End Using
    End Sub

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: 15. Apr. 2014 10:26    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 Theo37 10 Unities + Antwort hilfreich

Zitat:
Bei einer großen Datei, die auch noch einige Xrefs reinläd habe ich einen Zeitgewinn von etwa zwei Sekunden erreicht. Also eine Verbesserung von 15 auf 13 Sekunden
Das hängt wohl davon ab, wie viele Layer vorher gefroren/ausgeschaltet waren. Wenn vorher alle schon getaut/ein waren, dann wird der Zeitgewinn mit vorher prüfen größer sein. Wenn (nahezu) alle Layer gefroren/ausgeschaltet waren, dann ist vielleicht sogar eine Verschlechterung der Situation möglich, da dann eine Prüfung eingebaut ist, die immer JA ruft, in diesem Fall eigentlich nur Zeit kostet.
Ich gehe schon "des Speichers wegen" den Weg, zuerst eine Eigenschaft zu prüfen und nur dann umstellen, wenn es auch notwendig ist.

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


www.cars4fun.at

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