| |
| 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
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 / zitieren --> Unities abgeben:
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. 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 07. Feb. 2016 01:09 <-- editieren / zitieren --> Unities abgeben: Nur für rexxitall
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
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 / zitieren --> Unities abgeben: Nur für rexxitall
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
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 / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für rexxitall
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
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 / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben:
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
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 / zitieren --> Unities abgeben: Nur für rexxitall
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 |