Est-ce qu'il serait possible d'avoir la surface à peindre d'une pièce ou d'un assemblage directement sur solidworks?

On peut déjà voir la surface de la pièce mais cela prend toutes les surfaces de chaque pièce, or moi je souhaiterai uniquement les surfaces que l'on peut peindre.

Pour calculer la quantité de peinture nécessaire sur une pièce ou un assemblage.

Bonjour

Pour atteindre votre but vous devez procéder en deux étapes.

- Vous devez peindre chaque surface individuellement (regardez le mini-tuto que j'ai proposé https://www.lynkoa.com/forum/conception-3d/rendu-couleur-des-assemblage-sur-solidworks?page=0#answer-1083308)

- Vous devez sélectionner la surface et activer la fonction mesurer vous aurez la surface automatiquement.

Ce sont les deux méthodes ultra-basiques mais mes collègues vous donneront je l'espère d'autres solutions plus automatisables.

Cordialement

1 « J'aime »

D'accord merci pour la réponse. 

Mais oui ce que je recherche c'est quelque chose d'automatique car ça servirait à un programme qui prendrait cette donnée directement sans avoir à renseigner quoi que ce soit.

Bonjour

Cela dépend de ce que l'on appelle automatique car il faudra bien désigner à un moment considéré la surface à peindre. Cela dépend comme le volume est réalisé par exemple si à partir vous faite un cube et que vous voulez peindre une seul face et bien vous ne pouvez pas utiliser l'extrusion telle qu'elle car il faut passer par les apparences car le dsplay nanager est d'aucune utilité dans votre cas.

Cela veut sûrement dire d'être capable soit de désigner cliquer à la main (ou par un code la surface à peindre). Puis avec obligatoirement une macro qui va lancer la mesure de surface et constituer une liste avec "N" caractéristiques  mis dans un fichier exploitable sous Excel.

Avez vous regardez le tuto pour vous rendre compte de la complexité de ce que vous souhaitez faire comparer à ==> sélectionner la face ==> cliquer sur mesurer ==> mettre l'information dans un ??? lié à la pièce.

Cordialement

 

2 « J'aime »

Bonjour;

Avez-vous pensé aux Capteurs ?

http://help.solidworks.com/2020/French/SolidWorks/sldworks/c_Sensors_OH.htm

A afficher directement dans une Nomenclature ?

2 « J'aime »

Bonjour,

Comme vous pouvez voir en exemple dans ma pièce jointe, la pièce est soudée, puis peinte et que je souhaiterai avoir c'est uniquement la surface de ce qui est en rouge et non ce qui est à l'intérieur. Autrement dit les surfaces visiblent à l'oeil nu, les surfaces extérieures. Vous voyez ? 

Donc les capteurs ne me sont d'aucune utilité à part s'ils ont une fonction que je ne connais pas.

Oui j'ai conscience de la complexité de ce que je demande, mais le développement d'un programme ne serait pas possible ? 

 


capture.png

Bonjour,

Au vu du symbole de centre de gravité sur la dernière capture, il s'agit d'un assemble ?
Dans ce cas, il est possible de créer une pièce dans le contexte, puis avec la fonction « surface décalé » de copier toutes les faces de la même couleur (voir les décaler de 0.05mm pour éviter les bugs d’affichage), puis il suffit de récupérer la variable de surface de cette pièce dans la nomenclature.
L’opération peut être répété pour chaque couleurs.

PS: les solution de @ZozoMP combiné à celle de @Maclane sont les 1ere qui me sont venu à l'esprit également.

2 « J'aime »

Oui il s'agit d'un assemblage et il y a beaucoup de composants sous les tôles de fermeture alors la superficie n'est pas assez précise et nous ferait commander beaucoup trop de peinture. 

C'est possible de copier d'un coup toutes les faces de la même couleur ? Sans avoir à toutes les sélectionner ?

Bonjour @l.manceau 

"C'est possible de copier d'un coup toutes les faces de la même couleur ? Sans avoir à toutes les sélectionner ?"  ce n'ai pas sur il faut essayer

Bonjour,

Cela me semble possible par macro, en voici une qui doit pouvoir te servir de base de départ, c'est probablement à adapter à ton besoin :

Option Explicit

Sub main()

    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim Assembly As SldWorks.ModelDoc2
    Dim myAssy As SldWorks.AssemblyDoc
    Dim myComps As Variant
    Dim myCmp As Component2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swSelData As SldWorks.SelectData
    Dim swPart As SldWorks.PartDoc
    Dim swBody As SldWorks.Body2
    Dim swFace As SldWorks.Face
    Dim swEnt As SldWorks.Entity
    Dim bRet As Boolean
    Dim vBodies As Variant
    Dim vMatProp As Variant
    Dim mySurface As Double
    Dim myColor As String
    Dim mySearchColor As String
    Dim i As Long
    Dim ninfo As Long

    Set swApp = CreateObject("SldWorks.Application")
    
    Set Assembly = swApp.ActiveDoc
    Set myAssy = Assembly
    
    mySurface = 0
    myColor = ""
    
    myComps = myAssy.GetComponents(False)
    For i = 0 To UBound(myComps)
        Set myCmp = myComps(i)
        bRet = myCmp.Select2(False, 0)
        bRet = myAssy.EditPart2(True, True, ninfo)
        
        Set swModel = myAssy.GetEditTarget
        
        Set swPart = swModel
    
        swModel.ClearSelection2 True
    
        Set swSelMgr = swModel.SelectionManager
        Set swSelData = swSelMgr.CreateSelectData
        vBodies = swPart.GetBodies2(swAllBodies, True)
        Set swBody = vBodies(0)
        Set swFace = swBody.GetFirstFace

        'C'est ici que l'on définit la couleur à chercher
        mySearchColor = "[255, 0, 0]" 'rouge
        'mySearchColor = "[0, 255, 0]" 'vert
        'mySearchColor = "[0, 255, 255]" 'cyan
    
        Do While Not swFace Is Nothing
            vMatProp = swFace.MaterialPropertyValues
            If Not IsEmpty(vMatProp) Then
                myColor = "[" & vMatProp(0) * 255# & ", " & vMatProp(1) * 255# & ", " & vMatProp(2) * 255# & "]"
                If myColor = mySearchColor Then
                    Set swEnt = swFace
                    bRet = swEnt.Select4(True, swSelData)
    
                    mySurface = mySurface + swFace.GetArea
                End If
            End If
    
            Set swFace = swFace.GetNextFace
        Loop
        
        myAssy.EditAssembly
    Next i
    
    Debug.Print ""
    Debug.Print "Surface totale de couleur " & mySearchColor & " : " & mySurface
    
End Sub

Cordialement,

1 « J'aime »