Hot News:

Mit Unterstützung durch:

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

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:  Layer erstellen (1883 mal gelesen)
Silvan01
Mitglied



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

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 17. Jun. 2010 08:46    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,

ich will in meinem VB.Net Programm einen Layer erstellen und diesen zum LayerTable hinzufügen.
Wenn ich aber anschließend den Layer als aktiven Layer setzen will bekomme ich die Meldung ewasopenforwrite.

Code:
Dim Layer As LayerTableRecord = New LayerTableRecord
Layer.Name = "C"
Layer.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.None, 32)
Dim Layer_Table As LayerTable = CType(TrAct.GetObject(AcadDoc.Database.LayerTableId, OpenMode.ForWrite, False, True), LayerTable)
If Not Layer_Table.Has(Layer.Id) Then Layer_Table.Add(Layer)
AcadDoc.Database.Clayer = Layer_Table("C")

Ich hoffe mir kann jemand helfen?

Grüße und Dank im Vorraus

PS: Interessant wäre auch, ob das mit der Farbe so stimmt - Müsste ein Braun sein.

[Diese Nachricht wurde von Silvan01 am 17. Jun. 2010 editiert.]

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


Ex-Mitglied

erstellt am: 17. Jun. 2010 09:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

TransAction.Commit würde diesem gut tun. 

2-fache Vorsicht auch bei:
Layer_Table.Has(Layer.Id)

IMHO verlangt  .Has  einen Namen und keine ID.
Weiters liefert  .Has  auch gelöschte Elemente einer SymbolTable. Also wenn Du einen Layer 'C' angelegt hattest, dann löscht und im AutoCAD kein Layer 'C' im Layermanager mehr zu sehen ist, wirst Du mit  Layer_Table.Has("C")  fündig!

- alfred -

------------------
www.hollaus.at

sebastian.
Mitglied



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

Beiträge: 90
Registriert: 03.09.2009

Windows XP Prof. SP3
AutoCAD 2010
Visual Studio 2008 / 2010 Prof.

erstellt am: 17. Jun. 2010 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 Silvan01 10 Unities + Antwort hilfreich

Hi,

was du außer dem TransAction.Commit() vergessen hast ist:

Code:
TrAct.AddNewlyCreatedDBObject(Layer, True)

Dies musst du zwischen deinen beiden Zeilen einfügen:

Code:
If Not Layer_Table.Has(Layer.Id) Then Layer_Table.Add(Layer)
TrAct.AddNewlyCreatedDBObject(Layer, True)
AcadDoc.Database.Clayer = Layer_Table("C")

Dann funktioniert es jedenfalls schon mal!

Grüße, Sebastian

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

sebastian.
Mitglied



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

Beiträge: 90
Registriert: 03.09.2009

Windows XP Prof. SP3
AutoCAD 2010
Visual Studio 2008 / 2010 Prof.

erstellt am: 17. Jun. 2010 09:48    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 Silvan01 10 Unities + Antwort hilfreich

Hatte gerade auch noch mal das hier durchprobiert:

Zitat:
IMHOIn my humble oppinion (Meiner Meinung nach) verlangt  .Has  einen Namen und keine ID.
Weiters liefert  .Has  auch gelöschte Elemente einer SymbolTable. Also wenn Du einen Layer 'C' angelegt hattest, dann löscht und im AutoCAD kein Layer 'C' im Layermanager mehr zu sehen ist, wirst Du mit  Layer_Table.Has("C")  fündig!

1. Zumindest in meiner Version (AutoCAD 2010) akzeptiert die '.Has'-Methode sowohl einen String als auch eine ObjectID.
2. Wenn ich meinen angelegten Layer manuell über den LayerManager von AutoCAD lösche und dann mit .Has("C") z.B. Abfrage, ob er noch existiert, bekomme ich ein 'False' -> scheint also mittlerweile keine gelöschten Layer mehr zu liefern?!

Beste Grüße, Sebastian

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

Silvan01
Mitglied



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

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 17. Jun. 2010 12:59    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,

danke erstmal für eure Hilfe! Das TrAct.Commit mache ich zu einem späteren Zeitpunkt, da ich anschließend noch Objekte auf dem Layer einfüge. Oder ist es da trotzdem sinnvoll nach dem Erstellen des Layers nochmal ein .commit zu machen?

Folgendermaßen funktioniert es auf jeden Fall bei mir:

Code:
Dim Layer As LayerTableRecord = New LayerTableRecord
Layer.Name = "C"
Layer.Color = Autodesk.AutoCAD.Colors.Color.FromColorIndex(Autodesk.AutoCAD.Colors.ColorMethod.None, 32)
Dim Layer_Table As LayerTable = CType(TrAct.GetObject(AcadDoc.Database.LayerTableId, OpenMode.ForWrite, False, True), LayerTable)

If Not Layer_Table.Has("C") Then
Layer_Table.Add(Layer)
TrAct.AddNewlyCreatedDBObject(Layer, True)
AcadDoc.Database.Clayer = Layer.Id
End If


Grüße & Danke nochmal

Silvan

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


Ex-Mitglied

erstellt am: 17. Jun. 2010 13:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ich meine, wenn Du Deine Vorgehensweise wählst, dann wird die Zeichnung/das AutoCAD instabil, natürlich nur für den Fall, dass Du die offene TransAction bewusst NICHT mit .commit beendest. Denn dann steht der CurrentLayer auf einem nicht-existierenden Objekt.

Und mir (in meiner begrenzten Denkweise) ist es egal, ob das gerade jetzt mal funktioniert. Fest steht für meine Logik und nach oberer Aussage, das kann irgendwann mal schief gehen (auch wenn es ev. erst mit AutoCAD 2013 sein sollte) ==> drum mach ich's nicht.

- alfred -

------------------
www.hollaus.at

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