Hallo Cyril,
Lange Zeit später greife ich das Thema wieder auf, weil mir die Zeit und die Dateien zum Testen fehlen.
Ich habe versucht, Ihren Code nach einem Test an einer sehr großen Assembly und einigen Fallstricken zu verbessern:
- Verschieben Sie alle Komponenten auf "Gelöst" → die Anweisung unter dem Kommentar " Alles ausgeben, um gelöst zu sein " hinzugefügt.
- Erstellen Sie die in Konflikt stehenden Eigenschaften " Reference " und "Pre-etyde Code" mit leerem Inhalt neu (es reicht nicht aus, sie zu löschen reicht nicht aus, PDM behält den alten Wert im Speicher) → die Anweisungen unter dem Kommentar " Hinzufügen leerer Reference- und Code-Preetude-Eigenschaften " hinzugefügt
- erzwingen Sie die Neuerstellung und das Speichern, um Eigenschaftsänderungen anzuwenden (ich habe bemerkt, dass sie sonst nicht beibehalten wurden) → Anweisungen unter dem Kommentar " Wir erzwingen einen Neuaufbau, um das Speichern auf jedes Kind anzuwenden" hinzugefügt.
- Erzwingen Sie den Neuaufbau der Kopfdatei --> die letzte Anweisung hinzugefügt
Die gute Nachricht ist, dass ich den Eindruck habe, dass es auch virtuelle Kinder genauso gut behandelt, oder ich habe mich bei all meinen Versuchen verirrt...
Aber ich habe auch den Eindruck, dass es sehr langsam ist, wahrscheinlich wegen des Wiederaufbaus, den ich jedem Kind aufzwinge, irgendeine Idee, das zu optimieren?
Und zum Schluss noch mein letztes Hindernis: In dem von mir getesteten asm gab es Dateien, die so alt waren, dass ich aufgefordert wurde, sie zu konvertieren " Speichern unter ", so dass die Änderung der Eigenschaften nicht funktioniert, da der rebuild+save nicht angewendet wird. Gibt es einen Weg, dies zu umgehen? Ich musste sie von Hand verarbeiten...
Dim swModel As SldWorks.ModelDoc2
Dim compDoc As SldWorks.ModelDoc2
Dim swModelDocExt As ModelDocExtension
Dim swCustProp As CustomPropertyManager
Dim swConfig As SldWorks.Configuration
Dim swConfMgr As SldWorks.ConfigurationManager
Dim comp As SldWorks.Component2
Dim components As Variant
Dim vComp As Variant
Dim pathChain As Variant
Dim titleChain As Variant
Dim vPath As Variant
Dim vConfigNameArr As Variant
Dim vConfigName As Variant
Dim vPropNames As Variant
Dim vPropTypes As Variant
Dim vPropValues As Variant
Dim resolved As Variant
Dim linkProp As Variant
Dim nDocType As Long
Dim nErrors As Long
Dim nWarnings As Long
Dim nNbrProps As Long
Dim lRetVal As Long
Dim nRetVal As Long
Dim j As Long
Dim i As Long
Dim bResult3 As Boolean
Dim boolstatus As Boolean
Dim wasResolved As Boolean
Dim linkToProp As Boolean
Dim ValOut As String
Dim ResolvedValOut As String
Dim sCustProp As String
Dim sConfig As String
Sub vider_pptes(vAsm As SldWorks.AssemblyDoc, wDoc As SldWorks.ModelDoc2, vswApp As SldWorks.SldWorks)
components = vAsm.GetComponents(False) ' Get all components
If IsArray(components) Then
For Each vComp In components
Set comp = vComp
Set compDoc = comp.GetModelDoc2
'passer tout en résolu
nRetVal = comp.SetSuppression2(swComponentFullyResolved)
If Not compDoc Is Nothing Then
bResult3 = compDoc.Extension.IsVirtualComponent3(pathChain, titleChain)
If bResult3 <> False Then
For Each vPath In pathChain
If vPath <> wDoc.GetPathName Then
If InStr(LCase(vPath), "sldprt") > 0 Then
nDocType = swDocPART
ElseIf InStr(LCase(vPath), "sldasm") > 0 Then
nDocType = swDocASSEMBLY
ElseIf InStr(LCase(vPath), "slddrw") > 0 Then
nDocType = swDocDRAWING
Else
' Probably not a SOLIDWORKS file
nDocType = swDocNONE
' So cannot open the file
Exit Sub
End If
Set swModel = vswApp.OpenDoc6(vPath, nDocType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager("")
nNbrProps = swCustProp.Count
lRetVal = swCustProp.GetAll3(vPropNames, vPropTypes, vPropValues, resolved, linkProp)
For j = 0 To nNbrProps - 1
For i = 0 To UBound(vPropNames)
sCustProp = vPropNames(i)
boolstatus = swModel.DeleteCustomInfo2("", sCustProp)
Next i
Next j
' ajout propriétés Reference et Code-preetude vide
boolstatus = swCustProp.Add3("Reference", swCustomInfoType_e.swCustomInfoText, "", swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
boolstatus = swCustProp.Add3("Code_pré-étude", swCustomInfoType_e.swCustomInfoText, "", swCustomPropertyAddOption_e.swCustomPropertyDeleteAndAdd)
Set swConfMgr = swModel.ConfigurationManager
Set swConfig = swConfMgr.ActiveConfiguration
vConfigNameArr = swModel.GetConfigurationNames
For Each vConfigName In vConfigNameArr
Set swCustProp = swModelDocExt.CustomPropertyManager(vConfigName)
nNbrProps = swCustProp.Count
lRetVal = swCustProp.GetAll3(vPropNames, vPropTypes, vPropValues, resolved, linkProp)
For j = 0 To nNbrProps - 1
sConfig = vConfigName
For i = 0 To UBound(vPropNames)
sCustProp = vPropNames(i)
boolstatus = swModel.DeleteCustomInfo2(sConfig, sCustProp)
Next i
Next j
Next
End If
Next
End If
'on force un rebuild pour appliquer l'enregistrement sur chaque enfant
boolstatus = compDoc.ForceRebuild3(False)
boolstatus = compDoc.Save3(swSaveAsOptions_Silent, nErrors, nWarnings)
End If
Next
End If
'rebuild du fichier de tête
boolstatus = wDoc.ForceRebuild3(False)
End Sub