Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Wie man verwaiste Xrefs los wird...

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:  Wie man verwaiste Xrefs los wird... (1274 mal gelesen)
rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 06. Feb. 2016 22: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

Hatte ich neulich, Xref verwies auf nichtexistente Datei und Acad hatte keinen Bock die zu löschen. Da kann man ersteinmal verzweifeln.

Nach etwas google kam folgender Workaround zustande:

Fake datei erstellen (leer), Pfad und Namen auf die Fake Datei setzen,
Xref neu laden (Acad is nun happy) und binden. Da die Fake Datei leer war, gibt es keine Veränderung der Zeichnung aber den Verweis ist man nun los 

'How to get rid orphaned xrefs
Private Sub XREF_fix_broken(BNAME As String)
Dim block As Object
Dim document As AcadDocument
Dim CP As String
CP = ThisDrawing.path
Set document = Application.ActiveDocument
    For Each block In ThisDrawing.BLOCKS
        If block.Name = BNAME Then
        If block.IsXRef Then
            block.path = ThisDrawing.path & "\dummy.dwg"
            block.Name = "dummy"
           
       
        End If
    End If
    Next
   
   
    Dim dumdum As AcadDocument
    Application.Documents.Add "dummy.dwg"
    Set dumdum = Application.ActiveDocument
    dumdum.SaveAs CP & "\dummy.dwg"
    Dim V As Variant 
    V = False
    dumdum.Close V
   
    Application.UPDATE
    document.Activate   
    Set block = ThisDrawing.BLOCKS("dummy")
    block.Reload
    block.Bind False
   
End Sub

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< for sale !

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: 07. Feb. 2016 01:09    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 rexxitall 10 Unities + Antwort hilfreich

Hat der DiplIngBau eine Datei zum nachvollziehen?
Ich habe noch von dem Problem gehört.


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

[Diese Nachricht wurde von cadffm am 07. Feb. 2016 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 07. Feb. 2016 10: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 Nur für rexxitall 10 Unities + Antwort hilfreich

Kenne ich so eigentlich auch nicht dass man die Xref nicht lösen kann.
Mit welchem Programm tauchte das auf? Evtl. ein Bug der neuen Version?

[Edit]Lösen geht in VBA auch einfacher:

Code:
ThisDrawing.Blocks.Item(name).Detach

[Diese Nachricht wurde von KlaK am 07. Feb. 2016 editiert.]

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 07. Feb. 2016 21:42    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

Moin

Hm meine Kolegen haben mir ne 8 MB grosse Datei ohne Stempelfelder xrefs geliefert.

Die werd ich bestimmt nicht posten 

Detach funktioniert nur wenn die Pfadangaben valide sind.
Glaub mir, das war das ALLERERERSTE was ich versucht hab 

Da stehst vor der Wahl fake Dateien zu erzeugen, was halt doof ist wenn das Laufwerk des Vertrauens nur DVDs nimmt 

Ich poste solche code fragmente nur, wenn ich denke das die nützlich sind. Sonst verkommt das Forum ja dazu jedem nur noch zu erläutern wie man Layer umschaltet. 
BTW: Hat niemand bisher versucht den Flatshot zu automatisieren ?

Grüße
Thomas

Munter bleiben
Thomas

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< for sale !

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: 08. Feb. 2016 00:02    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 rexxitall 10 Unities + Antwort hilfreich

Zitat:
Detach funktioniert nur wenn die Pfadangaben valide sind.
Glaub mir, das war das ALLERERERSTE was ich versucht hab
Vielleicht doch nochmal probieren, denn bei KlaK und bei mir funkt dieses per .Detach ... und ja, getestet in den Zuständen, in denen das XRef nicht gefunden wurde (sei es Pfad zur Datei nicht gefunden oder Dateiname selbst nicht vorhanden).

Anbei (vollständiger) Beispielcode, dieser bereinigt die aktuelle DWG von allen XRef's, deren Database nicht geladen wurde. Dieses sind XRefs deren Pfad nicht mehr gültig zu sein scheint (DWG nicht vorhanden oder defekt) oder solche, deren Status auf "entfernt" eingestellt ist (mit AutoCAD 2016 getestet).

Code:
Public Sub cleanLostXRefs()
  Dim tBlk As AcadBlock
  For Each tBlk In ThisDrawing.Blocks
      If tBlk.IsXRef Then
        On Error Resume Next
        Dim tDB As AcadDatabase
        Set tDB = tBlk.XRefDatabase
        If tDB Is Nothing Then
            'lost connection to source
            tBlk.Detach
        End If
        Set tDB = nothing
        On Error GoTo 0
      End If
  Next
End Sub

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


www.cars4fun.at

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 08. Feb. 2016 01:40    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

Moin

Erst mal Danke 

Hab ich probiert,
Autocad Structural Detailing 64 Bit sagt "NÖ, ich lösch die nicht!".
Die 64 bit Variante ist mitunter "etwas" zickig.
Das wurde ziemlich lieblos implementiert, um es mal vorsichtig auszudrücken.

Aber netter Schnipsel  - wenn man das grob kombiniert tut es auf anhieb was es soll.
Mir fehlte der Teil wie man die kaputten xrefs erkennt.
Mit der Datenbank hab ich bisher nie rumgespielt, ich glaub da sollt ich mal etwas forschen...


Schönen Wochenstart
Thomas

Public Sub cleanLostXRefs()
  Dim tBlk As AcadBlock
  For Each tBlk In ThisDrawing.BLOCKS
      If tBlk.IsXRef Then
        On Error Resume Next
        Dim tDB As AcadDatabase
        Set tDB = tBlk.XRefDatabase
        If tDB Is Nothing Then
            'lost connection to source
            'tBlk.Detach
            XREF_fix_broken (tBlk.Name)
        End If
        Set tDB = Nothing
        On Error GoTo 0
      End If
  Next
End Sub

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< for sale !

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

rexxitall
Mitglied
Dipl. -Ing. Bau


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

Beiträge: 266
Registriert: 07.06.2013

Various: systems, Operating systems, cad systems, cad versions, programming languages.

erstellt am: 15. Feb. 2016 03:57    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

Das Rätsel ist vorerst gelöst 
Man kann Xrefs in Blöcke einbinden.
Da kenn ich ja nix 
Wenn man die Xrefs durch detach löschen will muss man die vorher durch Durchlauf durch die Blöcke aus diesen entfernen.
Code dazu kommt demnächst.
Hin und wieder muss ich ja auch mal was "produktives" fertig bekommen 

------------------
Wer es nicht versucht, hat schon verlorn 
Und bei 3 Typos gibts den vierten gratis !
<<< for sale !

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2022
Plateia, Canalis
Visual Basic

erstellt am: 15. Feb. 2016 08:02    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 rexxitall 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadffm:
Hat der DiplIngBau eine Datei zum nachvollziehen?


Wie oft hast Du das schon geschrieben?
Da wäre man wahrscheinlich schon früher auf das "Gefängnis" gekommen.
Zitat:
Original erstellt von rexxitall:
Das Rätsel ist vorerst gelöst 
Man kann Xrefs in Blöcke einbinden.
Da kenn ich ja nix 

Aber Du baust Dir ja die Lösung auch selber ...

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