Faire une macro pour redimensionner les images d'esquisses

C'est exactement ce que j'ai pu constater également de mon coté.

Si je cherche dans l'aide SW elle ne contient rien ! La première fois que je rencontre ceci.

J'ai donc utilisé un moyen détourné :

Voici comment changer la taille :

Tu dois utiliser la méthode setsize.

En paramètre largeur puis hauteur et enfin true ou false pour bloquer le ratio hauteur/ largeur

 

 

Haha ^^,

Oui ça a marché, j'avais trouvé juste avant, et j'ai trouvé aussi pourquoi mon code ne changer rien. Mettre les valeurs aux bonnes endroits ça aide beaucoup xD.

Là je cherche à renommer avec le nom de l'image :

- Je recherche la commande permettant de récupérer le nom de la dernière image insérer/utiliser/qui est là sous mes yeux xD

- Pour la boucle : C'est bien la commande Dir pour ajouter toutes les images d'un dossier une à une dans une boucle?

Question : J'ai vu qu'il est possible de lister que les *.ini, *bmp, mais est-il possible de prendre en compte que le début ? genre KT* ?

Merci encore de ton temps ^^

Pour le nom essaye ceci : ;-)

swSketchPicture.GetFeature.SetImportedFileName ("Nom")

 

En ce ui concerne la liste des fichiers par extension.

Je reviens un peu plus tard...

Pour la boucle j'ai tenté ce code, mais ça fait crash solidworks :'(

MonImage = Dir("C:\Users\ad36aaen\Documents\P01\HO\")

For i = 1 To 3

..

Set SkPicture = Part.SketchManager.InsertSketchPicture(MonImage)

..

MonImage = Dir
Next i

Je joins un fichier macro qui liste les fichiers d'un répertoire dont le nom commence par KT.

Je pense qu'il faudrait faire des tests pour vérifier qu'il sagit d'une image en utilisant  la méthode : oFl.Type


macro1.swp

Super, Merci.

Salut,

J'ai oublier : Il faut rajouter au projet la référence Microsoft Scripting Runtime dans Outils / Références

Bonnee journée.

Ca avance bien,

-Redimensionner ok,

-Boucle ok,

-Le nom presque ok :

Si je ne laisse pas le point à la fn, Nom_EsquisseAP n'est pas pris en compte, ça marche que s'il y a le point...

 

Je suis en train de voir pour les configurations dérivées xD

 

Mon code :

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim SkPicture As Object
Dim instance As ISketchPicture
Dim Width As Double
Dim Height As Double
Dim AspectRatioLocked As Boolean
Dim value As Boolean
Dim X As Double
Dim Y As Double
Dim Système As Object           'Système de fichiers
Dim Dossier As Object           'Répertoire
Dim Fichiers As Object          'Collection de fichiers du répertoire
Dim Fichier As Object           'Fichier (élément de la collection Fichiers)
Dim Nom_Dossier As String       'Nom du répertoire
Dim Nom_Fichier As String       'Nom du fichier
Dim Nom_EsquisseAV As String      'Nom d'esquisse avant
Dim Nom_EsquisseAP As String      'Nom d'esquisse après
Dim k As Integer

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.OpenDoc6("C:\Users\ad36aaen\Documents\Utilisat\Conception SdC\1300\Structures de base\Structures\Matériels\Matériels.SLDPRT", 1, 0, "", longstatus, longwarnings)
swApp.ActivateDoc2 "Matériels.SLDPRT", False, longstatus
Set Part = swApp.ActiveDoc

k = 1

'Lecture du répertoire
Nom_Dossier = "C:\Users\ad36aaen\Documents\Utilisat\Conception SdC\1300\Structures de base\Structures\Matériels\Photos matériels\P01\HO\Test"
Set Système = CreateObject("Scripting.FileSystemObject")
Set Dossier = Système.GetFolder(Nom_Dossier)
Set Fichiers = Dossier.Files

'Boucle
For Each Fichier In Fichiers
    'Créer noms
    Nom_Fichier = Nom_Dossier & "\" & Fichier.Name
    Nom_EsquisseAV = "Esquisse" & k
    Nom_EsquisseAP = Left(Fichier.Name, Len(Fichier.Name) - 3)
   

    'Sélection Plan
    boolstatus = Part.Extension.SelectByID2("Plan à 4mm", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    

    'Créer image d'esquisse
    Part.SketchManager.InsertSketch True
    Set SkPicture = Part.SketchManager.InsertSketchPicture(Nom_Fichier)
    

    'Redimensionner
    SkPicture.SetSize 50 / 1000, 60 / 1000, False
    SkPicture.SetOrigin -25 / 1000, -20 / 1000
    
    Part.ClearSelection2 True
    

    'Selectionner Esquisse + modifier nom
    boolstatus = Part.Extension.SelectByID2(Nom_EsquisseAV, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
    boolstatus = Part.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, Nom_EsquisseAP)
    

    'État supprimer d'esquisse => allègera quand on sera à la 1000ème esquisse
    boolstatus = Part.Extension.SelectByID2(Nom_EsquisseAP, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
    Part.EditSuppress2
    
    Part.ClearSelection2 True

    k = k + 1
    
Next Fichier
End Sub

Ca y est j'ai fini,

Malgrès ce problème de point juste après le nomp, tout marche \o/

 

Code pour des gens qui voudrait voir/avoir :

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim SkPicture As Object
Dim instance As ISketchPicture
Dim Width As Double
Dim Height As Double
Dim AspectRatioLocked As Boolean
Dim value As Boolean
Dim X As Double
Dim Y As Double
Dim Système As Object           'Système de fichiers
Dim Dossier As Object           'Répertoire
Dim Fichiers As Object          'Collection de fichiers du répertoire
Dim Fichier As Object           'Fichier (élément de la collection Fichiers)
Dim Nom_Dossier As String       'Nom du répertoire
Dim Nom_Fichier As String       'Nom du fichier
Dim Nom_EsquisseAV As String      'Nom d'esquisse avant
Dim Nom_EsquisseAP As String      'Nom d'esquisse après

Sub main()

Set swApp = _
Application.SldWorks

Set Part = swApp.OpenDoc6("C:\Users\Matériels\Matériels.SLDPRT", 1, 0, "", longstatus, longwarnings)
swApp.ActivateDoc2 "Matériels.SLDPRT", False, longstatus
Set Part = swApp.ActiveDoc

k = 2

'Lecture du répertoire
Nom_Dossier = "C:\Users\Matériels\Photos matériels\P01\HO\Test"
Set Système = CreateObject("Scripting.FileSystemObject")
Set Dossier = Système.GetFolder(Nom_Dossier)
Set Fichiers = Dossier.Files

'Contrôler chaque fichier du répertoire
For Each Fichier In Fichiers
    'créer image d'esquisse et mettre à jour les dimensions
    Nom_Fichier = Nom_Dossier & "\" & Fichier.Name
    Nom_EsquisseAP = Left(Fichier.Name, Len(Fichier.Name) - 3)
    
    boolstatus = Part.Extension.SelectByID2("Plan à 4mm", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
    
    Part.SketchManager.InsertSketch True
    Set SkPicture = Part.SketchManager.InsertSketchPicture(Nom_Fichier)
    
    SkPicture.SetSize 50 / 1000, 60 / 1000, False
    SkPicture.SetOrigin -25 / 1000, -20 / 1000
    
    Part.ClearSelection2 True
    
    boolstatus = Part.Extension.SelectByID2("Esquisse1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
    boolstatus = Part.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, Nom_EsquisseAP)
    
    boolstatus = Part.Extension.SelectByID2(Nom_EsquisseAP, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
    Part.EditSuppress2
    
    boolstatus = Part.Extension.SelectByID2("AM_P01_HO", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
    boolstatus = Part.AddConfiguration2("AM_" & Nom_EsquisseAP, "", "", False, False, False, True, 256)
    
    Part.ClearSelection2 True
    
Next Fichier
End Sub

Je ne comprend pas pour quoi il ya deux fois Set Part au début. Pour moi tu ouvres la pièce et tu renseigne donc la variable Part. Puis tu lui dit que la variable Part estégale au fichier actif.

Pour le nom je ne comprend pas le souci. Tu dois laisser le point où ?

J'ai fait un peu de ménage. ;-)

Attention il faut utiliser avec prudence les déclarations de variable Object.

En gros cela convient à dire au programme je ne sais ce que cela va être cela peut aller du boulon à l'éléphant à toi de gérer...

Essaye ceci : A TESTER

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim SkPicture As Object
Dim Système As Scripting.FileSystemObject       'Système de fichiers
Dim Dossier As Folder                            'Répertoire
Dim Fichier As File                               'Fichier (élément de la collection Fichiers)
Dim Nom_Dossier As String                       'Nom du répertoire
Dim Nom_Fichier As String                       'Nom du fichier
Dim Nom_EsquisseAV As String                      'Nom d'esquisse avant
Dim Nom_EsquisseAP As String                      'Nom d'esquisse après

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.OpenDoc6("C:\Users\Matériels\Matériels.SLDPRT", 1, 0, "", longstatus, longwarnings)

    'Lecture du répertoire
    Nom_Dossier = "C:\Users\Matériels\Photos matériels\P01\HO\Test"
    Set Système = CreateObject("Scripting.FileSystemObject")
    Set Dossier = Système.GetFolder(Nom_Dossier)

    'Contrôler chaque fichier du répertoire
    k = 2
    For Each Fichier In Folder.Files
        'créer image d'esquisse et mettre à jour les dimensions
        Nom_Fichier = Nom_Dossier & "\" & Fichier.Name
        Nom_EsquisseAP = Left(Fichier.Name, Len(Fichier.Name) - 3)
        
        boolstatus = Part.Extension.SelectByID2("Plan à 4mm", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
        
        Part.SketchManager.InsertSketch True
        Set SkPicture = Part.SketchManager.InsertSketchPicture(Nom_Fichier)
        
        SkPicture.SetSize 50 / 1000, 60 / 1000, False
        SkPicture.SetOrigin -25 / 1000, -20 / 1000
        
        Part.ClearSelection2 True
        
        boolstatus = Part.Extension.SelectByID2("Esquisse1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
        boolstatus = Part.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, Nom_EsquisseAP)
        
        boolstatus = Part.Extension.SelectByID2(Nom_EsquisseAP, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
        Part.EditSuppress2
        
        boolstatus = Part.Extension.SelectByID2("AM_P01_HO", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
        boolstatus = Part.AddConfiguration2("AM_" & Nom_EsquisseAP, "", "", False, False, False, True, 256)
        
        Part.ClearSelection2 True
        
    Next Fichier
End Sub

Mon nom : KT211.bmp

Si je prends KT211(.bmp)

Mon Nom_EsquisseAP est bien égale à KT211 (cf MsgBox)

Mais là est le problème, le nom d'esquisse ne se modifie pas

boolstatus = Part.Extension.SelectByID2("Esquisse1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
boolstatus = Part.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, Nom_EsquisseAP)

 

En revanche si je laisse le point KT211. alors ça marche, le nom d'esquisse est bien modifiée.

 

Les modif, c'est juste le double set part et le "fichiers" que tu remplaces directement par folder.files (au lieu de dossier.files ?) pour éviter de créer un set fichiers qui ne sert qu'une fois. J'en ai pas vu d'autre xD

Peux-tu m'envoyer le fichier pièce ainsi que le dossier contenant quelques images ?

Afin que je puisse tester

Alors ça, ça ne va pas être possible xD. Jsuis ingénieur au nucléaire.

 

Pour info tout est en état supprimé dans ma pièce, donc s'il n'y a aucune pièce c'est pareil.

Crée vite fait un dossier avec 3 images dedans et ça va fonctionner de la même manière.

1 « J'aime »

Effectivement cela fonctionne en créant un plan.

Cela fonctionne parfaitement chez moi. Le nom de l'esquisse est de la configuration n'ont pas le point.

 

Le code :

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
Dim SkPicture As Object
Dim Système As Scripting.FileSystemObject       'Système de fichiers
Dim Dossier As Folder                           'Répertoire
Dim Fichier As File                             'Fichier (élément de la collection Fichiers)
Dim Nom_Dossier As String                       'Nom du répertoire
Dim Nom_Fichier As String                       'Nom du fichier
Dim Nom_EsquisseAV As String                    'Nom d'esquisse avant
Dim Nom_EsquisseAP As String                    'Nom d'esquisse après

Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.OpenDoc6("C:\Users\rmorel\Desktop\Pièce1.SLDPRT", 1, 0, "", longstatus, longwarnings)

    'Lecture du répertoire
    Nom_Dossier = "C:\Users\rmorel\Desktop\Test"
    Set Système = CreateObject("Scripting.FileSystemObject")
    Set Dossier = Système.GetFolder(Nom_Dossier)

    'Contrôler chaque fichier du répertoire
    k = 2
    For Each Fichier In Dossier.Files
        'Créer image d'esquisse et mettre à jour les dimensions
        Nom_Fichier = Nom_Dossier & "\" & Fichier.Name
        Nom_EsquisseAP = Left(Fichier.Name, Len(Fichier.Name) - 4)
        
        boolstatus = Part.Extension.SelectByID2("Plan à 4mm", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
        
        Part.SketchManager.InsertSketch True
        Set SkPicture = Part.SketchManager.InsertSketchPicture(Nom_Fichier)
        
        SkPicture.SetSize 50 / 1000, 60 / 1000, False
        SkPicture.SetOrigin -25 / 1000, -20 / 1000
        
        Part.ClearSelection2 True
        
        boolstatus = Part.Extension.SelectByID2("Esquisse1", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
        boolstatus = Part.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, Nom_EsquisseAP)
        
        boolstatus = Part.Extension.SelectByID2(Nom_EsquisseAP, "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
        Part.EditSuppress2
        
        boolstatus = Part.Extension.SelectByID2("AM_P01_HO", "CONFIGURATIONS", 0, 0, 0, False, 0, Nothing, 0)
        boolstatus = Part.AddConfiguration2("AM_" & Nom_EsquisseAP, "", "", False, False, False, True, 256)
        
        Part.ClearSelection2 True
        
    Next Fichier
End Sub

 

Tiens j'ai trouvé un bug au passage.

C'est lié à ma variable k pour passer à l'autre esquisse que j'ai levé car elle ne servait plus.

Le BUG

- Crée une esquisse

- Renomme la

- Crée une nouvelle esquisse => elle s'appellera esquisse2

 

- Crée une esquisse

- Renomme la

- Crée une configuration

- Crée une nouvelle esquisse => elle s'appellera esquisse1

 

Pour faire simple, la configuration permet une MAJ, donc pour un code sur esquisse il faudra prendre en compte le fait que l'on crée des configurations ou non.

Pour ma part sans j'avais besoin d'un incrément k et d'appeler les "esquisse" & k

Avec configuration j'ai juste à appeler l' "esquisse1"

 

xD

Azrod

Bonjour,

c'est un gros truc ça.. bonne chance à celui qui y arrivera :)

J'imagine que toutes les photos n'ont pas les mêmes dimensions?

 

\o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  \o/  

Résolu

1 « J'aime »

Comment et par quel moyen???

1 « J'aime »

Tu peux trouver tout le code dans les discussions...

Si c'est pour discuter d'un détail, n'hésite pas à poser ta question. Essaye d'être un peu plus précis que comment tu as fait xD.

 

Pour rappel :

- Insérer une image d'esquisse

- Modification de dimension d'image d'esquisse après l'avoir insérer

- Dimensionnement selon le type de matériel

- Nom d'esquisse = Nom matériel

- Créer une configuration

- Nom configuration = Nom matériel

- Boucle sur tous les matériels d'un fichier