Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  ReadDwgFile --- eSelfReference Error

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:  ReadDwgFile --- eSelfReference Error (2847 mal gelesen)
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: 08. Feb. 2010 11:28    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 bekomme jetzt wenn ich von einer externen Dwg den Rahmen und SK einlese einen eSelfReference Fehler(eingefügt werden sie aber teilweise trotzdem)

was bedeutet so ein Fehler?

Code:

"HEAD" ist der Name des Blocks, so wie er in der Datei "NewTitleBlockFile" heißt.

ReadFromDWGFile(NewTitleBlockFile, "HEAD")


Public Function ReadFromDWGFile(ByVal dwgfile As String, ByVal Blockname As String) As ObjectId
        Dim newSKID = Nothing
        Dim tAcadDocLock As ApplicationServices.DocumentLock = Nothing
        Dim myTransMan As DatabaseServices.TransactionManager = Nothing
        Dim myTrans As DatabaseServices.Transaction = Nothing
        Dim myDwg As Document = Nothing
        Dim mydb As DatabaseServices.Database = Nothing
        Dim tBlTabRecID As ObjectId = Nothing
        Dim OldBorder As DatabaseServices.BlockReference = Nothing
        Dim tDB As Database = Nothing
        Try
            'Schriftkopf aus Datei laden
            If IO.File.Exists(dwgfile) Then
                myDwg = ApplicationServices.Application.DocumentManager.MdiActiveDocument
                tAcadDocLock = myDwg.LockDocument
                myTransMan = myDwg.TransactionManager
                myTrans = myTransMan.StartTransaction
                mydb = myDwg.Database

                tDB = New Database(False, True)
                tDB.ReadDwgFile(dwgfile, IO.FileShare.None, True, "")
                tBlTabRecID = myDwg.Database.Insert(Blockname, tDB, False)
            Else
                MsgBox("file: " & dwgfile & " could not be found!")
            End If
        Catch ex As Exception
            MsgBox("ReadFromDWG:" & ex.Message & vbNewLine & ex.StackTrace)
        Finally
            If myTrans IsNot Nothing Then myTrans.Commit() : myTrans.Dispose() : myTrans = Nothing
            If myTransMan IsNot Nothing Then myTransMan.Dispose() : myTransMan = Nothing
            If tAcadDocLock IsNot Nothing Then tAcadDocLock.Dispose()
        End Try
        Return tBlTabRecID
    End Function


Zitat:

Hi,

>> eSelfReference Fehler

Normalerweise bedeutet das, dass Du versuchst, eine Zeichnung 'X' als Block einzufügen, die ihrerseites eine (gleichnamige) Blockdefinition 'X' enthält. Dann dürfte aber auch nichts eingefügt werden, er müsste crashen dabei. Bei welcher Zeile kommt denn der Fehler?
Gibt es die entsprechenden Zeichnungen dazu, womit der Fehler für uns reproduzierbar ist?

- alfred -



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: 08. Feb. 2010 11:31    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

Beim Rahmen war eine unterschiedliche Benennung von Datei und Block erfolgreich, beim Schriftkopf nicht, er wird aber trotzdem eingefügt.Es existiert vorher kein Block der so heißt wie der neue Schriftkopf.

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


Ex-Mitglied

erstellt am: 08. Feb. 2010 11:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wie schon per PM, ohne Zeichnungen, mit denen dieses auftritt, ist's schwer bis unmöglich, was stichhaltiges auszusagen. 

- alfred -

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

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: 08. Feb. 2010 13:44    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


TB.zip

 
So ich wollte gerade den Schriftkopf bereinigen(alle Attribute und Texte raus) und nochmal testen, ob der Fehler jetzt auch noch kommt,Fehler kam wieder UND es wurde wieder der Schriftkopf mit den Attributen und Texten eingefügt, obwohl er unter _insert nicht mehr auswählbar war und ich vorher _purge ausgeführt habe. Kann ich da noch etwas vergessen haben, wo kann er das gespeichert haben?

SK ist angehängt...

edit: Habe eine andere Lösung, Ursprünglich waren Rahmen und Sk in einer Datei, ich habe dass wieder so belassen und einfach diese Zeichung eingelesen. Dann per .explodeToOwnerSpace gesprengt.
Was ist da der unterschied zum normalen .explode(dbojectcollection) ?

mfg

[Diese Nachricht wurde von veydan am 08. Feb. 2010 editiert.]

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


Ex-Mitglied

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

Hi Silvan,

spät aber doch mal zum Code:
Ich habe Deinen Code soweit reduziert, dass das Problem auftauchen sollte, tut es aber nicht. Hier mein Code:

Code:
  Public Shared Sub CADde_Silvan03()
      Dim tDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
      Dim tDocDB As DatabaseServices.Database = tDoc.Database
      Dim tDocLock As ApplicationServices.DocumentLock = Nothing
      Dim tTrAct As DatabaseServices.Transaction = Nothing


      Dim tDwgFileName As String = "C:\TEMP\TB.dwg"
      Dim tBlockName As String = "TB"
      Dim tBlTabRecID As ObjectId = Nothing

      Dim tDB As DatabaseServices.Database = Nothing
      Try
        'Schriftkopf aus Datei laden
        If IO.File.Exists(tDwgFileName) Then
            tDocLock = tDoc.LockDocument
            tTrAct = tDoc.TransactionManager.StartTransaction

            tDB = New Database(False, True)
            tDB.ReadDwgFile(tDwgFileName, IO.FileShare.None, True, "")
            tBlTabRecID = tDocDB.Insert(tBlockName, tDB, False)
            'wenn bisher keine Exception aufgetreten ist, dann bestätigen
            tTrAct.Commit()
        Else
            MsgBox("File: " & tDwgFileName & " could not be found!")
        End If

      Catch ex As Exception
        MsgBox("ReadFromDWG:" & ex.Message & vbNewLine & ex.StackTrace)
      Finally
        If tTrAct IsNot Nothing Then tTrAct.Dispose() : tTrAct = Nothing
        If tDocLock IsNot Nothing Then tDocLock.Dispose() : tDocLock = Nothing
      End Try
  End Sub


Einzige strukturelle 'echte' Änderung von mir ist, dass ich TrAct.Commit an die Stelle gesetzt habe, von der ich weiss, dass alles bis dahin ohne Exception abgelaufen ist. Du hast in Deinem Code das Commit in den Finally-Teil von Try-Catch gesetzt, damit wird das Commit auch durchgeführt, wenn Fehler aufgetreten sind.

Dass der Fehler bei mir nicht reproduzierbar ist, kann aber auch daran liegen, dass ich nicht die gleiche Zeichnung wie Du habe, in welche der Block TB importiert wird. Ich hab's nur mit einer leeren Zeichnung probieren können.


>> Was ist da der unterschied zum normalen .explode(dbojectcollection)

Aus der Hilfe:
Explodes the block reference into individual components. It appends the resulting entities to the BlockTableRecord that owns the BlockReference on which this method was called
Bedeutet, wenn die Blockreference im Modellbereich eingefügt ist, dann werden die aus dem 'explode' resultierenden Elemente dem Modellbereich hinzugefügt.
.explode(DbObjColl) erstellt explodierte Elemente nur in der Collection, wird aber nicht einem Modellbereich/Papierbereich/... zugeordnet. Es sind also nur temporäre Objekte, jedenfalls nicht in der Database.

- 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