Ich werde heute gefragt, ob es mit einem Makro möglich ist, die irrtümlichen Einschränkungen aufgrund fehlender Komponenten zu identifizieren und zu entfernen.
Mit Hilfe der KI habe ich diesen Code der leider nicht funktionsfähig ist (die Bedingung If swFeature.GetTypeName = " Mate " wird nie überprüft):
Dim swApp As Object
Dim swModel As ModelDoc2
Dim swAssembly As AssemblyDoc
Dim swMate As Mate2
Dim swFeature As Feature
Dim swEntity As Object
Dim swComponent As Component2
Dim swError As Long
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAssembly = swModel
' Parcourir toutes les contraintes de l'assemblage
Set swFeature = swAssembly.FirstFeature
Do While Not swFeature Is Nothing
If swFeature.GetTypeName = "Mate" Then
Set swMate = swFeature.GetSpecificFeature2
swError = swMate.Status
' Vérifier si la contrainte est en erreur
If swError <> swMateStatusOK Then
' Vérifier les composants associés
Set swEntity = swMate.GetMateEntities(0)
If Not swEntity Is Nothing Then
Set swComponent = swEntity.GetComponent
If swComponent Is Nothing Then
' Supprimer la contrainte en erreur
swAssembly.DeleteFeature swFeature.Name
End If
End If
End If
End If
Set swFeature = swFeature.GetNextFeature
Loop
End Sub
Kann mir jemand sagen, was los ist? Vielen Dank im Voraus.
Hallo Dieses Beispiel der API scheint mir die Notwendigkeit des Einschränkungsscans zu erfüllen. Beispiel für Verknüpfungen und Verknüpfungselemente (VBA) - 2024 - SOLIDWORKS API-Hilfe Auf der anderen Seite gibt es für den kaputten Constrained-Teil nichts Direktes, wenn ich keinen Fehler mache, so dass Sie eine Verarbeitung in der Zeile des Beispiels bewältigen müssen:
Debug.Print " Component = " & swComp.Name2
In meinen Tests sind es normalerweise die beiden Komponenten, die mit einem " / " zwischen jedem Namen gekennzeichnet sind. Wenn welche fehlen (auch wenn es sich nur um eine Referenz handelt), fügt er den Namen des ASM als Namen der Komponente ein.
Option Explicit
' Références nécessaires :
' - SolidWorks 2020 Type Library
' - SolidWorks 2020 Constant Type Library
' Constantes d'erreur (à adapter/compléter selon votre SW 2020)
Const swMateErrorNone As Long = 0
Const swMateErrorEntityNotFound As Long = 1
Const swMateErrorComponentNotFound As Long = 2
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssy As SldWorks.AssemblyDoc
Dim swFeat As SldWorks.Feature
Dim nextFeat As SldWorks.Feature
Dim swMate As SldWorks.Mate2
Dim deleteCount As Long
Dim ok As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
' Vérification : document ouvert et de type assemblage
If swModel Is Nothing Or swModel.GetType <> swDocASSEMBLY Then
MsgBox "Ouvrez un assemblage avant d'exécuter la macro.", vbExclamation
Exit Sub
End If
Set swAssy = swModel
deleteCount = 0
' Parcours de toutes les features
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
Set nextFeat = swFeat.GetNextFeature
' Tenter de récupérer un Mate2
On Error Resume Next
Set swMate = swFeat.GetSpecificFeature2
On Error GoTo 0
If Not swMate Is Nothing Then
' **Filtre** : on ne supprime QUE si c'est bien un
' composant manquant (code 2)
If swMate.GetMateError2 = swMateErrorComponentNotFound Then
swModel.ClearSelection2 True
ok = swFeat.Select2(False, -1)
If ok Then
swAssy.EditDelete
deleteCount = deleteCount + 1
End If
End If
End If
Set swFeat = nextFeat
Loop
MsgBox deleteCount & " contrainte(s) en erreur supprimée(s).", vbInformation
End Sub
Auf der anderen Seite kann ich nicht wirklich testen, denn wenn ich Komponenten lösche, wechseln meine zugehörigen Einschränkungen in eine Art " gelöscht (fehlend) " Zustand, aber nicht in " Fehler " ?? :
EDIT: Neuer Code, der nur auf fehlende Komponenten abzielt
BEARBEITUNG 2:
Im Folgenden sind die Werte der von GetMateError2 zurückgegebenen Fehlercodes aufgeführt, wie in der swFeatureError_e Enumeration definiert (Verknüpfungseinträge):
Bedeutung
des konstanten
Werts
swFeatureErrorNone
0
Keine Fehler
swFeatureErrorMateInvalidEdge
38
Eine der Kanten der Verknüpfung wurde gelöscht, ist ungültig oder nicht mehr vorhanden
swFeatureErrorMateInvalidFace
39
Eine der Flächen der Verknüpfung wurde gelöscht, ist ungültig oder nicht mehr vorhanden
swFeatureErrorMateFailedCreatingSurface
40
Mattenoberflächentyp wird nicht unterstützt
swFeatureErrorMateInvalidEntity
41
Eines der Features in der Verknüpfung wurde gelöscht, ist ungültig oder nicht mehr vorhanden
swFeatureErrorMateUnbekanntTangente
42
Die Tangentenverbindung ist nicht erfüllt
swFeatureErrorMateDanglingGeometry
43
Die Verknüpfung zeigt auf eine "baumelnde" Geometrie (fehlende Fläche/Kante)
swFeatureErrorMateEntityNotLinear
44
Nichtlineare Kanten können für diese Verknüpfung nicht verwendet werden
swFeatureErrorMateEntityFailed
45
Das Stecken wird bei keiner der Komponenten unterstützt oder ist nicht möglich
swFeatureErrorMateÜberdefiniert
46
Diese Maske überdefiniert die Baugruppe
swFeatureErrorMateIlldefiniert
47
Diese Verknüpfung kann nicht gelöst werden (schlecht definiert)
swFeatureErrorMateBroken
48
Eine oder mehrere Verknüpfungselemente werden gelöscht/gelöscht (Verknüpfung "defekt")
Mit diesen Konstanten können Sie die Gründe für Fehler in Ihren Verknüpfungen genau filtern, z. B. nur diejenigen entfernen, deren Elemente (Flächen, Kanten usw.) fehlen (Codes 38, 39 oder 43). (help.solidworks.com)
Vielleicht könnte die Konstante, die hier eingefügt werden soll, 41, 45 oder 48 sein:
Vielen Dank @Cyril_f , ich konnte diese Option nicht mehr finden.
Eine mögliche Alternative zum Makro besteht also @Silver_Surfer darin, das von @Cyril_f angezeigte Kontrollkästchen zu deaktivieren, das die Einschränkungen mit fehlenden Komponenten neben den anderen Fehlern gruppiert:
Alles, was Sie tun müssen, ist, alle Einschränkungen im Ordner " (fehlt) " auszuwählen, mit der rechten Maustaste zu klicken und dann " Löschen " (das rote Kreuz) zu wählen .
Zu bestätigen sowieso, wenn in diesem Fall nichts anderes zu finden ist. Meine Gewohnheiten der Zwänge sind zu gut; Ich habe Probleme beim Generieren von Fehlern
In der Tat ist es keine so gute Idee, weil sie dafür bezahlt würden, ihre c_nneries zu reparieren. Der wirklich beste Weg ist, ein Gehalt bis zu dem Zeitverlust einzubehalten, der durch den c_nneries verursacht wurde! Nur so wird es passen.
Sicherlich für die Option in Ordnung, aber für Gewohnheiten gibt es bösen Willen; Ich habe die Option nie überprüft und ich habe nie Einschränkungen in Bezug auf Komponenten hinterlassen, die nicht mehr vorhanden sind.
Vielleicht bin nur ich zu hart, aber ein Mangel an Strenge, der sich auf den Rest des Teams auswirkt, macht mich verrückt.