[Solidworks API] Naam van bovenliggende assemblage zoals in stuklijst

Hallo

Ik heb enige kennis van VBA, maar ik ben nieuw in de Solidworks API en ik moet de macro van een collega wijzigen, gelanceerd in een tekening met een geselecteerd onderdeel.

Dit is wat mij het probleem met de code lijkt te zijn:

swEnt = swSelMgr.GetSelectedObject5(iSel)

swSelComp = swEnt.GetComponent

swSelModel = swSelComp.GetModelDoc

Naam = swSelModel. Titel ophalen

De naam bevat dan de naam van het geselecteerde onderdeel, waarbij ik de naam van de bovenliggende assembly zou willen teruggeven, aangezien solid het erg goed doet voor de BOM.

Ik geef aan dat de code werkt wanneer de configuraties van de assembly als volgt zijn ingesteld:

Onderliggende componenten weergeven die als subassemblage worden gebruikt: "show"

En dat we het willen aanpassen zodat het ook werkt als we op "verbergen" zetten

 

Bedankt voor alle hulp die je me kunt geven! 

Fout antwoord...

Zet de code volledig, het is gemakkelijker te begrijpen, zelfs als je in de tekst alleen over een deel praat.

Maar dit is inderdaad niet het deel dat betrekking heeft op uw verzoek. (U krijgt de naam van het geselecteerde onderdeel in de assemblage)

De volledige code is enkele duizenden regels lang, maar dit deel is onafhankelijk, ik heb alleen een paar eerdere regels geknipt die over meerdere selecties gaan. 

Net na de gekopieerde passage vergelijken we de waarde van de variabelenaam met elke aanduiding in de nomenclatuur. En natuurlijk, aangezien de stuklijst alleen de naam van de bovenliggende assembly toont, stopt alles. 

Als ik uw antwoord sbadenis goed begrijp, zolang de onderliggende componenten verborgen zijn in de configuratie van mijn assembly, zal geen enkele methode die wordt toegepast op swSelModel in staat zijn om "omhoog" te gaan naar eigenschappen van de ouder? 

Ik was op zoek naar een soort swSelModel."GetParent", waarmee ik kon terugvallen op de eigenschappen van de bovenbouw zoals in mijn nomenclatuur. 

Als de kinderen worden getoond in de configuratie-eigenschappen, en als ik op hetzelfde deel van de MEP klik, wordt de naam van de bovenliggende assemblage geretourneerd.

Ik heb het niet opgegeven, maar de eigenschap wordt niet direct gecontroleerd in het eigenschappentabblad, we sturen de waarde van $JAMAIS_DEVELOPPER_IN_NOMENCLATURE door de onderdeelfamilie.  Het is Y of N van wat ik zie in de API-help; Er lijkt geen waarde te zijn om over te schakelen naar "promoten", wat ik als gevolg daarvan niet heb getest. 

 

 

 

 

Als je een 'GetParent' wilt:

 

http://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IComponent2~GetParent.html

1 like

Bedankt alruin! Ik heb het getest,  maar het vordert niet. 

Stel swParentComp = swSelComp.GetParent in

Stel swSelModel2 in = swParentComp.GetModelDoc

 Name = swSelModel2.GetTitle

Maar de naam bevat nog steeds de naam van het onderdeel, alsof de GetParent niet bestaat (het retourneert echter geen NULL) 

 

Wat als je direct naar Name = swParentComp.GetTitle gaat?

 

Je hebt hier alle component-/bovenliggende informatie die je zou moeten kunnen vinden wat je zoekt, er is ook het configuratiebeheer.

http://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iconfiguration~getrootcomponent3.html

1 like

Bedankt Mandragore, ik heb uiteindelijk de GetParent aan het werk gekregen, in één stap:

Naam = swSelComp.GetParent.GetModelDoc.GetTitle

Alleen al het eerste deel, swSelComp.GetParent, was een probleem voor mij, waarschijnlijk vanwege problemen met typedeclaraties.

 

Perfect! Persoonlijk vermijd ik het gebruik van selectie voor een actie. De software weet in theorie waar het is, het vermijdt onnodige lijnen denk ik. 

 

Ten slotte heb ik niet veel API's op solidworks gedaan, ik doe meestal aan reassembly of wat bestandsbeheer. Ik lees of schrijf niet voor de nomenclaturen.