Création d'une propriété épaisseur de tôlerie avec BatchProperties

Bonjour,

Afin de mettre à jour les propriétés de mes anciennes pièces, j’aimerai utiliser BatchProperties pour créer une propriété « EPAISSEUR » qui a pour valeur l’épaisseur de ma pièce. J’aimerai créer cette nouvelle propriété en masse sur nos pièces.

Lorsque que je créer la propriété avec batchproperties, celle-ci est généré mais n’a aucune valeur :

J’ai essayé d’affecter l’épaisseur de la pièce à ma propriété de plusieurs manière " Valeur d’une propriété Solidworks " ou " valeur 1er article liste des pièces soudées" mais le problème persiste.

Quelqu’un a t’il la solution à mon problème ?

Merci,

Cordialement

Bonjour;

Actuellement, si je me fie au captures écran, vous demandez à BatchProperties de récupérer la valeur de la propriété « Epaisseur » pour créer la propriété « Epaisseur », cela ne peut pas fonctionner…
Si vous anciennes pièces sont bien des composants de type tôlerie, l’Épaisseur est inscrite dans les variables globale (équation), ou dans les propriétés de liste de pièces soudées « Epaisseur de tôlerie » du genre « SW-Epaisseur de tôlerie@@@Article-liste-des-pièces-soudées1@LeNomdelaPièce.SLDPRT »
(clic droit sur la liste de pièce s soudée dans une de vos pièce de tôlerie).
: " c’est donc une ou l’autre valeur qu’il faudra aller chercher.

Dans l’immédiat je ne sais pas comment le faire avec les outils MyCad (probablement avec une macro serait le plus pratique)…Je vais chercher de mon coté mais si quelqu’un a une idée entre-temps…

une piste de macro à adapter ici:
https://www.codestack.net/solidworks-api/data-storage/custom-properties/link-sheet-metal/
ou encore plus simple avec la macro de notre amis @JeromeP :

1 « J'aime »

Bonjour,

Merci pour ces infos.

Sur les outils myCAD j’arrive à trouver l’épaisseur via les variables sw :

Mais dans Batchproperties je n’ai pas accès aux variables SW.

Je vais essayer de créer une MACRO puis je l’appliquerai en masse.

La solution que j’utilise qui est un peu bancale

Si plusieurs corps de tôlerie ce sera la roulette russe, le mieux : 1 seule pièce de tolerie

Parfois la macro ne fonctionne pas
notamment si le nom de la pièce de tôlerie : liste des pièces soudées est renommé
en général je test la macro directement dans SW je vérifie que les propriétés sont copiés, je relance en cas de besoin, plusieurs fois et je compte le nombre de fois que j’ai dû lancer la macro

depuis intégration je lance le nombre de fois que je l’ai fais en manuelle (sur d’autres pièces)

c’est un peu bancale, cré une nomenclature avec les propriété et ouvre et lance en manuelle la macro sur les quelques pièces ou il y a un pb

cette macro ne fonctionne pas pour les anciennes versions de SW, on peut lire des bizarreries dans les propriétés pièces soudées notamment si la pièce est copiée et renommée, l’ancien nom de pièce apparait et même si manuellement on met le nouveau cela ne fonctionne pas

cela est dû d’après moi au fait que dans SW il n’y a pas de nom codé en dur (en anglais) et identifiable par ce biais contrairement au nom des fonction qui même renommée gardent un nom par défaut en anglais comme les contraintes … (une macro sur laquelle j’ai travaillé pour renommer les fonctions téléchargé depuis d’autre langue)

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim cutListCustPropMgr As SldWorks.CustomPropertyManager
Dim PROP_TOLERIE As Variant
Dim PROP_PERSO As Variant
Dim i As Integer

Sub Copie_01()
'Copie les propriétés de pièces soudées vers propriétés personnalisées

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

If (swModel.GetType <> 1) Then '1 = pièce, 2 = assemblage, 3 = plan
MsgBox "Pièce uniquement", vbInformation
Exit Sub
End If


PROP_TOLERIE = Array("Longueur du flanc de tôle", "Largeur du flanc de tôle", "Longueur à découper extérieure", _
               "Longueur à découper des boucles intérieures", "Découpes", "Plis")
PROP_PERSO = Array("Long flanc", "Larg flanc", "Long découpe ext.", _
             "Long découpe int.", "Découpes", "Plis")


Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")

For i = 0 To UBound(PROP_PERSO)
swCustPropMgr.Delete PROP_PERSO(i)
Next i

swCustPropMgr.Delete "Epaisseur"
swCustPropMgr.Add2 "Epaisseur", swCustomInfoType_e.swCustomInfoText, """" & "Epaisseur@" & swModel.GetTitle() & ".SLDPRT" & """"

Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
Debug.Print swFeat.GetTypeName

If swFeat.GetTypeName = "CutListFolder" Then
Dim swBodyFolder As SldWorks.BodyFolder
Set swBodyFolder = swFeat.GetSpecificFeature2
swBodyFolder.SetAutomaticCutList (True)
swBodyFolder.UpdateCutList
Set cutListCustPropMgr = swFeat.CustomPropertyManager
    
    For i = LBound(PROP_TOLERIE) To UBound(PROP_TOLERIE)
    Dim valOut As String
    Dim resolvedValOut As String
    cutListCustPropMgr.Get4 PROP_TOLERIE(i), True, valOut, resolvedValOut
        
        If valOut <> "" Then
        swCustPropMgr.Add2 PROP_PERSO(i), swCustomInfoType_e.swCustomInfoText, valOut
        End If
        
    Next i
End If
Set swFeat = swFeat.GetNextFeature
Loop
End Sub