Hot News:

Mit Unterstützung durch:

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

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:  Zugriff auf Layer magaged (1537 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: 02. Aug. 2011 16: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,

ich möchte aus einer nicht geöffneten Datei einige Layer auslesen.
Wie kann ich managed auf die Layer zugreifen?
Bisher hab ich mal geschrieben:

      Dim dbDoc As Autodesk.AutoCAD.DatabaseServices.Database
        dbDoc = New Database(False, True)
        dbDoc.ReadDwgFile(Filename, IO.FileShare.Read, True, "")

Wie komme ich auf die Layer? ich müßte die Farben von ein paar vorhandenen Layern auslesen.

Danke Theo

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

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 03. Aug. 2011 07:51    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

hallo!
du musst dir von der Datenbank die Layertable holen und dann einfach durchlaufen.
Funktioniert genauso wie wenn du in der geöffneten Zeichnung managed auf die Layer zugreifst.
Beispiele gibt es hier schon wo.

Bsp:

Code:

Dim myLT As DatabaseServices.LayerTable = Nothing
Dim myLTR As DatabaseServices.LayerTableRecord = Nothing
Dim myLTE As DatabaseServices.SymbolTableEnumerator = Nothing

myLT = DEINEDB.LayerTableId.GetObject(OpenMode.ForRead)
myLTE = myLT.GetEnumerator
While myLTE.MoveNext
    myLTR = myLTE.Current.GetObject(OpenMode.ForRead, True, True) 
End While


lg

[Diese Nachricht wurde von veydan am 03. Aug. 2011 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: 03. Aug. 2011 08:43    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 Veydan,

das hilft mir schon mal viel. Wenn ich dein Beispiel richtig verstehe, dann gehst Du mit Movenext immer zum nächssten weiter.
Könnte ich auch einen Layer direkt über den Layernamen ansprechen?
Wie ürde das gehen?

Danke Theo

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

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 03. Aug. 2011 09:41    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

ja du kannst prüfen ob die LT einen Layer hat
mit
Code:
lt.Has(Layername)

und dann z.b das Layerobjekt holen mit

Code:
ltr = CType(tr.GetObject(lt.Item(Layername), OpenMode.ForWrite, True, True), LayerTableRecord)

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: 03. Aug. 2011 15: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,

jetzt hab ich nochmal ein ähnliches Problem. Komm ich auch irgendwie auf die Dictionaries und die XRecords einer nicht geöffneten Zeichnung? Enweder müßte ich die Werte auslesen, Oder ich würde das Dictionarie kpl. in die akt. Zeichnung kopieren. Was ist leichter Machbar?
Danke, Theo

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

veydan
Mitglied



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

Beiträge: 252
Registriert: 29.05.2008

AutoCAD/Mechanical 2009, Inventor 2009

erstellt am: 04. Aug. 2011 08:14    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

das ist das gleiche Prinzip, die Datei mit ReadDwgFile einlesen in eine neue Datenbank, und dann suchst du dir einfach die Einträge wie wenn es die aktuelle wäre.

Wie man die sucht, wurde glaube ich schon in dem Thread Text in DWG speichern beantwortet.

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: 04. Aug. 2011 15: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 Veydan,

ich komme von der AutoCad Seite her, deshalb tue ich mich mit den alten "COM-Objekten" leichter als mit den Managed-Objekten.
Aber ohne die Datei zu öffnen, geht es nur managed. Egal, ich habs irgenwie hin gebastelt (abgeschrieben). Meine Lösung, falls sie jemand intresiert:
Dim TrAct As DatabaseServices.Transaction = Nothing
            Dim DxfCode() As Short
            Dim DxfData() As Object
            Using acTrans As Transaction = dbDoc.TransactionManager.StartTransaction()
                Dim Dic As DBDictionary
                Dim Mydic As DBDictionary
                Dim MyXrecord As Xrecord
                Dim DXF As ResultBuffer
                Dic = acTrans.GetObject(dbDoc.NamedObjectsDictionaryId, OpenMode.ForRead)
                Mydic = acTrans.GetObject(Dic.GetAt("NEB-Bezeichnung"), OpenMode.ForRead)
                MyXrecord = acTrans.GetObject(Mydic.GetAt("Matrix"), OpenMode.ForRead)
                DXF = MyXrecord.Data
                Dim Myarray As Object
                Myarray = DXF.AsArray

                Dim i As Integer = 0
                For Each itm As TypedValue In DXF
                    ReDim Preserve DxfCode(i)
                    ReDim Preserve DxfData(i)
                    DxfCode(i) = itm.TypeCode
                    DxfData(i) = itm.Value
                    i = i + 1
                Next
                Dic.Dispose()
                Mydic.Dispose()
                MyXrecord.Dispose()
            End Using

Danke und Gruß, Theo

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