| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | Von Digital Twins bis Hochleistungs-Computing: PNY präsentiert seine Zukunftstechnologien für die Industrie von morgen, eine Pressemitteilung
|
Autor
|
Thema: Ungültige/ verlorene Referenzen in Skizze löschen (2548 mal gelesen)
|
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
  
 Beiträge: 774 Registriert: 06.09.2012
|
erstellt am: 31. Mai. 2013 07:25 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen, ein Kollege und ich erstellen gerade ein Makro, das alle enthaltenen Skizzen in einer *.ipt durchläuft und nach ungültigen/ verlorenen Referenzen sucht. Wird eine solche Referenz gefunden, wird diese gelöscht und anschließend der Name der betroffenen Skizze als Konsolenausgabe (Messagebox) aufgelistet. Um solche Referenzen zu identifizieren, werden die Eigenschaften „Variablenname.Reference = True“ und „Variablenname.ReferencedEntity is Nothing“ überprüft. Im Allgemeinen funktioniert der Code auch halbwegs. Jedoch kommt es vor, dass „gültige“ Referenzen gelöscht werden. Diese besitzen ab und an ebenfalls das Merkmal „Variablenname.ReferencedEntity is Nothing“, wobei das ja nicht sein dürfte!? 1. Woran könnte es liegen, dass der Wert „Nothing“ ist, obwohl diese Referenzen in Ordnung sind? 2. Gibt es ein anderes eindeutiges Merkmal von Referenzen, um fehlerverursachende Referenzen zu finden? Vielen herzlichen Dank im Voraus für eure Bemühungen. Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts 
[Diese Nachricht wurde von mb-ing am 31. Mai. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
  
 Beiträge: 774 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 05. Jun. 2013 07:04 <-- editieren / zitieren --> Unities abgeben:         
|
daywa1k3r Ehrenmitglied V.I.P. h.c. Softwareentwickler

 Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 05. Jun. 2013 08:34 <-- editieren / zitieren --> Unities abgeben:          Nur für mb-ing
|

| |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
  
 Beiträge: 774 Registriert: 06.09.2012
|
erstellt am: 06. Jun. 2013 08:05 <-- editieren / zitieren --> Unities abgeben:         
@daywa1k3r: Vielen Dank für Deine Antwort. Den Code habe ich unten beigefügt. Mit der Beispieldatei dauert es noch etwas, da ich diesen entsprechend abändern muss (Firmengeheimnis etc. ...) und der Fehler nicht immer auftritt. Danke und Grüße MB-Ing. ' Alle fehlerhaften Referenzen (projezierte Geometrie) der Skizzen ' des aktiven Bauteils werden gelöscht. ' Anschließend werden die Namen dieser Skizzen ausgegeben. Public Sub SkizzenBereinigen() On Error GoTo errhandler 'Wenn kein Bauteil, dann Exit If ThisApplication.Documents.Count = 0 Then Exit Sub If Not ThisApplication.ActiveEditDocument.DocumentType = kPartDocumentObject Then Exit Sub Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveEditDocument 'Transaktion starten für Rückgängigschritt ' Dim otrans As Transaction ' Set otrans = ThisApplication.TransactionManager.StartTransaction(oPartDoc, "Skizzen bereinigen") Dim sText As String sText = "Fehlerhafte Referenzen in Skizzen entfernt:" & vbNewLine Dim bPurgeOneSketch As Boolean Dim bPurgeAllSketch As Boolean Dim blRef As Boolean bPurgeAllSketch = False Dim oSketch As PlanarSketch For Each oSketch In oPartDoc.ComponentDefinition.Sketches 'Wenn in der Skizze Referenzen verloren gegangen sind If oSketch.HealthStatus = kDriverLostHealth Then bPurgeOneSketch = False Dim oEntity As SketchEntity 'Gehe durch alle Skizzenelemente For Each oEntity In oSketch.SketchEntities 'Wenn es sich um ein Referenzelement handelt, keine Referenzelement mehr verfügbar ist 'und das Referenzelement nicht an einer anderen Referenz hängt If oEntity.Reference = True And oEntity.ReferencedEntity Is Nothing And oEntity.OwnedBy.Count = 0 Then blRef = False 'Bei Referenzpunkten prüfen, ob Referenzelemente daran hängen If oEntity.Type = kSketchPointObject Then Dim oAttEntity As SketchEntity For Each oAttEntity In oEntity.AttachedEntities If oAttEntity.Reference = True Then blRef = True End If Next End If 'Wenn alle Bedingungen erfüllt, dann Element löschen If blRef = False Then Call oEntity.Delete bPurgeOneSketch = True bPurgeAllSketch = True End If End If Next 'Wenn fehlerhafte Referenzen gefunden, dann Skizzennamen ausgeben If bPurgeOneSketch = True Then sText = sText & oSketch.Name & vbNewLine End If End If Next 'Wenn keine fehlerhafte Referenz gefunden If bPurgeAllSketch = False Then sText = "Keine löschbaren fehlerhafte Referenzen in Skizzen gefunden!" End If Call MsgBox(sText, vbInformation + vbOKOnly, "Skizzen bereinigen") oPartDoc.Update ' otrans.End Exit Sub errhandler: MsgBox "Error: " & Err.Description, vbCritical, "Skizzen bereinigen" ' If Not otrans Is Nothing Then otrans.Abort Resume Next End Sub ------------------ Wissen ist Macht. Nichts wissen macht auch nichts  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |