Bonjour,
Suite au passage en version 2020, Solidworks mouline énormément sur les hachures ayant beaucoup de traits et des motifs de hachures compliqués.
Notre matière utilisée pour les soudures était malheureusement en pied de poule facteur 32 (autant vous dire qu'il faut des minutes pour charger le moindre plan de détail).
Nous avons donc modifié nos matières pour revenir sur des types de hachures et des facteurs d'échelle plus léger.
Notre soucis actuel est que nous copions beaucoup de vieux plans (donc avec les vieilles matières enregistrées dans les pièces).
Y aurait il quelqu'un qui serait capable de faire une macro permettant de scanner toutes les pièces d'un assemblage et de recharger automatiquement les matières qui ont les noms suivants : "Soudure inox", "Stellite Grade 21 (RC)", "Stellite Grade 12 (RB)", "Stellite Grade 6 (RA)"
D'avance merci
Voici un exemple de règle que tu peux appliquer avec Intégration (utilitaire Mycadtools) afin de changer les matériaux suivant une règle (ici si la matière est a ou B ou C)
Pour cela tu récupère l'assemblage en cours que tu décompose puis tu filtre uniquement sur les pièces tu lance et ensuite tu laisse tourner.
Cela t'évitera de créer une macro et cela reste modifiable aisément sans connaissance en programmation.
Le lien vers l'aide d'Intégration:
https://help.visiativ.com/mycadtools/2020/fr/Integration.html
maj_inox_316.mcact
1 « J'aime »
Merci @sbadenis mais malheureusement je n'ai pas les utilitaires mycad.
De plus et pour corser les choses : nos pièces à éditer sont des pièces virtuelles qui sont enregistrées à l'intérieur de l'assemblage. Vu ce que tu décris je ne pense pas que ta méthode fonctionne du coup.
Pourtant dans ton profil je vois grâce à la médaille, que tu est abonné à Mycadservices donc normalement tu as accès aux utilitaires sans aucun surcoût.
Regarde dans le menu à gauche si tu a accès dans le menu Produire au menu Mycadtools (au pire il y a une période d'essai de 1mois il me semble mais au vue de la médaille pour moi tu du y avoir accès)
Pour les pièces virtuelle je viens de faire un essai cela ne pose pas de problème.
Il suffit d'ouvrir l'assemblage dans solidworks, dans intégration d'appuyer sur ajout du document actif, en ayant bien coché la case dépendences, puis dans filtre de filtrer les pièces, de lancer et pour finir d'enregistrer l'assemblage avec les changements de matériaux réalisé dans chaque pièces.
Au besoin je pourrait te guider.
1 « J'aime »
J'ai été abonné Mycad quelques temps mais je ne le suis plus (et on n'a pas envie de se payer 8 licences mycad à vie non plus (même si c'est plus raisonnable que le coût de la maintenance SW)....)
Il reste effectivement plus que la macro, mais je ne gère pas suffisamment sur le sujet pour le faire dans le peu de temps libre que je trouve en ce moment.
Dans ce cas voici un début pour la macro:
https://www.codestack.net/solidworks-api/document/materials/show-edit-material-dialog/
Il va falloir depuis ton assemblage boucles l'ensemble de pièces, puis les ouvrire une par une et changer le matériaux si celui est l'un des matériaux concerné.
.
Bonjour,
Pourquoi ne pas sélectionner toutes les pièces depuis l'assemblage et faire un clic droit, sélectionner matériau et changer la matière de toutes les pièces en 1 seules fois
Joël
Bonjour à tous,
si vous avez modifié vos matériaux, lorsqu'on met à jour, normalement les nouvelles hachures s'appliquent. si vous voulez le faire en masse sans ouvrir les fichiers vous pouvez mettre à jour à partir du planificateur de tâches.
@ joel.condevaux : Parce que je n'ai le soucis que sur les soudures (qui doivent finir noire ce qui explique mon pied de poule + forte échelle initial) : soit une à deux pièces sur la dizaine ou 50aine que contient l'assemblage. Sinon en pratique c'est bien ce que l'on fait mais c'est un peu répétitif de faire cela sur tous les plans que l'on copie.
@ i will survive : on est sous EPDM donc ça complique un peu la chose : il faut avoir extrait le fichier assemblage avant de pourvoir le modifier afin que le fichier MEP soit utilisable. Et en plus les pièces dont il faut modifier la matière sont virtuelles et ont des noms différents à chaque fois : difficile à faire en batch.
J'ai quand même regardé l'outil 'planificateur de tâche' et je ne vois pas avec quelle commande on peut modifier la matière d'une pièce (et le cas de figure modifier la matière d'une pièce virtuelle à l'intérieur d'un assemblage me semble totalement ignoré). L'outil ne peut travailler que sur des outils en lecture / ecriture donc des fichiers extraits (ce qui semble assez logique).
Pour moi il s'agit de faire les modifs depuis l'assemblage:
- Dans l'assemblage: filtrez les pièces suivant la matière et assignez en une nouvelle
@ joel.condevaux : on peut effectivement faire un filtre sur le nom de la matière pour identifier les pièces où il faut changer la matière. Mais comme j'ai 4 matières différentes possible, il faut faire 4 recherches différentes puis recharger la matière.
Donc cela reste quand même long fastidieux et répétitif.
D'où l'intérêt d'arriver à faire une macro pour que soit le PC qui se tape ce travail et pas le projeteur.
Bonjour,
Voici une macro qui devrait pouvoir te servir de base de départ, n'oublie pas de modifier la ligne "databaseName = ..." pour mettre le nom de ton fichier sldmat.
Tous les fichiers doivent être en mode résolu dans ton assemblage.
Cordialement,
Option Explicit
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim myMatVisProps As SldWorks.MaterialVisualPropertiesData
Dim orgBlend As Boolean
Dim orgApply As Boolean
Dim orgAngle As Double
Dim orgScale As Double
Dim longstatus As Long
Dim bRet As Boolean
Dim i As Long
Dim Assembly As ModelDoc2
Dim myAssy As AssemblyDoc
Dim myCmps As Variant
Dim myCmp As Component2
Dim nInfo As Long
Sub main()
Set swApp = Application.SldWorks
Set Assembly = swApp.ActiveDoc
Set myAssy = Assembly
myCmps = myAssy.GetComponents(False)
For i = 0 To UBound(myCmps)
Set myCmp = myCmps(i)
If (myCmp.GetSuppression = 3) Or (myCmp.GetSuppression = 2) Then
bRet = myCmp.Select2(False, 0)
bRet = myAssy.EditPart2(True, True, nInfo)
Set swModel = myAssy.GetEditTarget
If swModel.GetType = 1 Then
Dim result As String
Dim Mat As String
Dim configName As String
configName = "Défaut"
Dim databaseName As String
databaseName = "C:/Program Files/SOLIDWORKS Corp/SOLIDWORKS/lang/french/sldmaterials/solidworks materials.sldmat"
Dim searchPropName1 As String
Dim searchPropName2 As String
Dim searchPropName3 As String
Dim searchPropName4 As String
searchPropName1 = "Soudure inox"
searchPropName2 = "Stellite Grade 21 (RC)"
searchPropName3 = "Stellite Grade 12 (RB)"
searchPropName4 = "Stellite Grade 6 (RA)"
Dim myPart As SldWorks.PartDoc
Set myPart = swModel
result = myPart.GetMaterialPropertyName2(configName, Mat)
If result = searchPropName1 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName1
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
ElseIf result = searchPropName2 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName2
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
ElseIf result = searchPropName3 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName3
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
ElseIf result = searchPropName4 Then
myPart.SetMaterialPropertyName2 configName, databaseName, searchPropName4
Set myMatVisProps = myPart.GetMaterialVisualProperties()
Call apply_material_visual_properties(myMatVisProps, myPart)
End If
End If
myAssy.EditAssembly
End If
Next i
Assembly.ForceRebuild3 False
End Sub
Private Sub apply_material_visual_properties(myMatVisProps As SldWorks.MaterialVisualPropertiesData, myPart As SldWorks.PartDoc)
If Not myMatVisProps Is Nothing Then
orgAngle = myMatVisProps.Angle
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
orgScale = myMatVisProps.Scale2
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.BlendColor = 0 Then
orgBlend = False
Else
orgBlend = True
End If
myMatVisProps.BlendColor = Not orgBlend
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.BlendColor = orgBlend
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.ApplyMaterialColorToPart = 0 Then
orgApply = False
Else
orgApply = True
End If
myMatVisProps.ApplyMaterialColorToPart = Not orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.ApplyMaterialColorToPart = orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.ApplyMaterialHatchToSection = 0 Then
orgApply = False
Else
orgApply = True
End If
myMatVisProps.ApplyMaterialHatchToSection = Not orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.ApplyMaterialHatchToSection = orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
If myMatVisProps.ApplyAppearance = 0 Then
orgApply = False
Else
orgApply = True
End If
myMatVisProps.ApplyAppearance = Not orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
myMatVisProps.ApplyAppearance = orgApply
longstatus = myPart.SetMaterialVisualProperties(myMatVisProps, swThisConfiguration, Nothing)
End If
End Sub
1 « J'aime »
@ d.roger :
C'est juste parfait.
Un grand merci tu vas nous faire gagner un temps précieux (et aussi à tous ceux qui ont fait l'erreur de mettre des facteurs d'échelle élevé sur leurs matières SW).
Il nous reste un soucis par contre (tant que SW n'as pas résolu le bug : SPR 476546 qui est quand même ouvert en High Impact depuis 2014...) : Sur nos MEP, les pièces ayant un motif de hachure uni (donc celles que je t'ai demandé de modifier...) apparaissent en transparent au lieu d'uniformément noir. Pour contourner le problème, il faut donc sélectionner une des zones hachurée blanche (au lieu de noire), faire un clic droit, et déselectioner la case à cocher "Hachures du matériau". Bizarrement cela permet de bien appliquer le motif noir uni sur la soudure. Et il faut faire cette manip sur toutes les vues et toutes les pièces hachurées en uni de la mise en plan.
Penses tu que ce serait capable de faire une macro permettant de faire cette déselection en automatique sur toutes les vues de la MEP (soit en allant chercher les matériaux de la liste que tu as déjà utilisé, soit en allant chercher tous les matériaux qui ont 'unie' comme type de hachure) ??
Cette macro servira aussi à tous ceux qui ont la bête idée d'utiliser des hachures unies pour leurs soudures (SW à quand même fait très fort car ils sont arrivé à crééer 2 bugs qui font qu'il est impossible de faire des soudures sur une MEP sans se prendre la tête : si c'est uni, tu ne vois pas la hachure, si c'est une hachure avec un fort facteur d'échelle ta mise en plan mouline et tu es au bord du suicide...).
capture_hachures.jpg
Bonjour,
De premier abord c'est un peu compliqué car la méthode "GetFaceHatchCount" retourne une valeur nulle pour les hachures unies issues de matériaux et qui apparaissent en transparent, je me pencherais sur le souci à l'occasion mais quand j'aurais un peu plus de temps.
Cordialement,
@ d.roger : Encore merci.
Je ferme ce topic.
J'en rouvrirait éventuellement un si vous arrivez à trouver une solution à ce problème de hachure unie transparente sur les mises en plan afin de partager cette nouvelle macro avec la communauté.
Il est effectivement possible que ce ne soit pas si simple (sinon SW aurait peut être résolu cette SPR avec impact client élevé en 6 ans... ).