Hoe haal ik de configuratielijst van een component in een assembly op? VBA Solidworks

Hallo

Ik ben op zoek naar de configuratielijst van een component in een assembly om de aangepaste eigenschappen van de configuraties van die component van een assembly te wijzigen.

Voorlopig kan ik een lijst maken van de componenten van de assemblage, maar ik kan niet de configuraties van elk onderdeel opsommen  . Dan moet ik in staat zijn om de aangepaste eigenschappen van de configuraties voor elk onderdeel van de assembly te wijzigen.

Heeft u oplossingen?

Bedankt.

 

Hallo

Als het je lukt om alle componenten van een assembly op te sommen, denk ik dat het de functie "GetChildren" gebruikt, gevolgd door een lus om op zijn minst de naam van de componenten op te halen. Als dit het geval is, kunt u in deze lus het "ModelDoc2" van elke "Component2" ophalen met behulp van de functie "GetModelDoc2" en van daaruit de configuraties van uw "ModelDoc2" weergeven met behulp van de functie "GetConfigurationNames".
Ik weet niet of het je allemaal duidelijk is, dus hier is een klein voorbeeld in C#-taal (geen tijd om het in vba te vertalen):

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++;
    }
}

Dit is de codestijl achter het programma dat je hier vindt.

Vriendelijke groeten

3 likes