Comment récupérer la liste de configurations d'un élément (component) dans un assemblage ? VBA Solidworks

Bonjour,

Je cherche à récupérer la liste de configurations d'un élément (component) dans un assemblage pour modifier les propriétés personnalisées des configurations de cet élément (component) à partir d'un assemblage.

Pour l'instant, j'arrive à faire la liste des éléments (components) de l'assemblage, mais je n'arrive pas à faire la liste des configurations de chaque élément (component). Ensuite, il faudra que j'arrive à modifier les propriétés personnalisées des configurations pour chaque élément (component) à partir de l'assemblage.

Avez-vous des solutions ?

Merci.

 

Bonjour,

Si tu arrives à lister tous les composants d'un assemblage c'est je suppose à l'aide de la fonction "GetChildren" suivie d'une boucle pour récupérer à minima le nom des composants. Si c'est le cas, tu peux, dans cette boucle, récupérer le "ModelDoc2" de chaque "Component2" à l'aide de la fonction "GetModelDoc2" et donc à partir de là lister les configurations de tes "ModelDoc2" à l'aide de la fonction "GetConfigurationNames".
Je sais pas si c'est tout clair pour toi donc voici un petit exemple en langage C# (pas le temps de le traduire en vba) :

private void TraverseComponent(Component2 swComp)
{
    ModelDoc2 swDoc;
    object[] vChildComp;
    Component2 swChildComp;
    string namePart = string.Empty;
    Boolean boolstatus;
    string AssemblyTitle = swDoc.GetTitle();
    int i = 0;
    vChildComp = (object[])swComp.GetChildren();
    while (i < vChildComp.Length)
    {
        swChildComp = (Component2)vChildComp[i];
        swDoc = (ModelDoc2)swChildComp.GetModelDoc2();
        if (AssemblyTitle.ToLowerInvariant().Contains(".sldasm"))
        {
            namePart = swChildComp.Name2 + "@" + AssemblyTitle.Substring(0, AssemblyTitle.Length - 7);
        }
        else
        {
            namePart = swChildComp.Name2 + "@" + AssemblyTitle;
        }

        int j = 0;
        try
        {
            boolstatus = swDoc.Extension.SelectByID2(namePart, "COMPONENT", 0, 0, 0, false, 0, null, 0);

            object[] configNameArr = null;
            string configName = null;
            
            configNameArr = (object[])swDoc.GetConfigurationNames();
            for (j = 0; j <= configNameArr.GetUpperBound(0); j++)
            {
                configName = (string)configNameArr[j];
                MessageBox.Show((configName);
            }
        }
        catch (Exception)
        {
            continue;
        }
            
        i++;
    }
}

C'est le style de code qui est derrière le programme que tu trouveras ICI.

Cordialement,

3 « J'aime »