VBA-code voor het wijzigen van de referentie bij het openen van een . SLDPRT

Hallo

In een . SLDPRT (n°1), gebruik ik de combine-functie met een externe referentie (bestand n°(2) . SLDPRT ook),  om direct door krimp de gewenste uiteindelijke vorm te verkrijgen.

Bestand nr. 1 is een standaarddatabase en bestand nr. 2 heeft een variabele geometrie.

Voor een nieuwe variant open ik bestand nr. 1 door op het tabblad "Referenties... " en dus vervang ik bestand nr. 2 door een bestand nr. 3 met nieuwe geometrie.

Ik heb momenteel een macro waarmee ik kan selecteren welke 3D-bestanden ik wil openen, maar is er een manier om dit type bestand automatisch te openen terwijl ik de gebruiker een handje help zodat hij het vervangende onderdeel kan selecteren?

Bij voorbaat dank voor uw hulp.

 

 

Hallo

Kunt u enkele voorbeeldbestanden plaatsen zodat we u kunnen helpen?

Vriendelijke groeten.

2 likes

Hallo Yves.T,

Ik kan de originele onderdelen om redenen van vertrouwelijkheid niet bijvoegen, maar ik heb 3 eenvoudige stukken als voorbeeld gegeven om het principe uit te leggen.

Stuk 1 gebouwd met een combinatie van stuk 2 of 3, afhankelijk van de keuze van de verwijzing naar de opening.

Bedankt.


changement_ref.rar

Voor mij is de enige manier om een onderdeelinvoeging in een onderdeel te vervangen, het vervangen van de referenties voordat ik dit bestand open.

Hallo

In de bijgevoegde macro is het eerste bestand dat moet worden geselecteerd het bovenliggende bestand en het tweede het bestand dat moet worden afgetrokken. Let op de namen van de lichamen in uw bestanden, het zou moeten werken met uw voorbeeldbestanden.

Vriendelijke groeten


combiner.swp

Hallo d.roger en bedankt voor de tijd die je hebt besteed aan het vinden van een oplossing.

Ik heb net de macro geprobeerd, het opent het bovenliggende bestand, maar tijdens de tweede selectie wordt het bestand dat moet worden afgetrokken in de boom geopend zonder het bestand dat al op zijn plaats is te vervangen!

Een kleine verduidelijking met betrekking tot de namen van de lichamen die moeten worden afgetrokken, ze zullen elke keer anders zijn. (P1, P2, P3....)

Vriendelijke groeten.

Hallo

Versie 2 van de macro ....

Vriendelijke groeten


combiner.swp
1 like

@d. Roger,

Geweldig, de Macro versie 2 werkt met de onderdelen die als voorbeeld worden gegeven.

Aan de andere kant, als ik het uitvoerde met een ander bestand met een andere boomstructuur (zie bijgevoegde afbeelding), wordt de macro uitgevoerd zonder de combine-functie uit te voeren.

In dit voorbeeld is onderdeel M2031 vervangen door onderdeel M2032, maar niet verwijderd uit het hoofdgedeelte.

Zou dit te wijten kunnen zijn aan het feit dat er andere bouwbewerkingen zijn na de combine-functie? (hier een revolutie en een feestdag)

Bedankt.

 


arborescence_inf_.gif

Ja, het komt voort uit het feit dat het type bewerking dat op de onderdelen wordt uitgevoerd anders is, het komt van de lijnen:

boolstatus = Part.Extension.SelectByID2("Revolution1", "SOLIDBODY", 0, 0, 0, False, 1, Niets, 0)
boolstatus = Part.Extension.SelectByID2("<" & NewName & ">-<Revolution1>", "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0)

Of de namen van de geselecteerde lichamen zijn Revolution1, om dit te corrigeren moet je de creatieboom analyseren en de namen van de lichamen ophalen, ik heb op dit moment geen tijd om het te doen, maar als je het wilt doen, zou je de volgende regels moeten kunnen gebruiken:

Functie instellen = Deel.FirstFeature
Dim stuk als snaar
Hoewel geen functie niets is
 FeatureName = Feature.Name
 Als Feature.GetTypeName2 = "Voorraad" dan
    Stuk = FunctieNaam
 Einde als
 Functie instellen = Functie.GetNextFeature()
Gaan

om dit te doen.

Vriendelijke groeten

1 like

OK!

 Ik zal proberen om te kijken naar dit, maar ik ben helemaal niet comfortabel met VBA-codes! 

De kans is groot dat ik je hulp opnieuw zal vragen om de macro te repareren zodra je beschikbaarheid hebt!

 Nogmaals bedankt en een goed weekend!

 

 

Hallo allemaal!

Ik heb geprobeerd de macro van D.Roger aan te passen, maar de functie "combineren" werkt nog steeds niet:

'Zoek in de functiebeheerder van het af te trekken onderdeel (het duurde even voordat ik begreep waar de naam "Voorraad" vandaan kwam: druk op CTRL G in het uitvoeringsvenster om de lijst met namen en typen van elk object te openen!)

Functie instellen = Deel.FirstFeature
        Dim Piece1 als snaar
        Hoewel geen functie niets is
        FeatureName = Feature.Name
         Als Feature.GetTypeName2 = "Voorraad" dan
         Stuk1 = FunctieNaam
         Einde als
        Functie instellen = Functie.GetNextFeature()
        Gaan

 

Selectie van het hoofdgedeelte
    boolstatus = Part.Extension.SelectByID2("Verwijderde mat.-Extru.3", "SOLIDBODY", 0, 0, 0, False, 1, Niets, 0) 

"Selectie van het af te trekken aandeel
    boolstatus = Part.Extension.SelectByID2(Stuk1, "BODYFEATURE", 0, 0, 0, True, 2, Niets, 0) 

'Lichamen combineren
    Set myFeature = Part.FeatureManager.InsertCombineFeature(15902, Niets, Niets)

De 2 stukken zijn goed geselecteerd, maar de laatste regel die het aftrekken van de lichamen zou moeten uitvoeren, blijft inactief.?!

Ik zou in staat moeten zijn om de volumelichamen van het af te trekken deel te selecteren, maar zonder die van het hoofdgedeelte te nemen, heb ik het geprobeerd met "SolidBodyFolder"... Maar het werkt ook niet!

Ik weet zeker dat er niet veel is, maar mijn kennis van VBA is niet genoeg om dit knelpunt op te lossen.

Als iemand mij kan begeleiden bij een mogelijke oplossing?!

Bedankt.


lyncoa_20171010.gif

... In feite klopt dat, de "combine" regel code werkt met:

boolstatus = Part.Extension.SelectByID2("<M2032_REN306VF_sortie-mold>-<REN305-02A.1\\Main body>", "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("<M2032_REN306VF_sortie-mold>-<REN305_01A.1\\Main body>", "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("<M2032_REN306VF_sortie-mold>-<REN305_CC.1\\Main body>", "SOLIDBODY", 0, 0, 0, True, 2, Nothing, 0)

    Set myFeature = Part.FeatureManager.InsertCombineFeature(15902, Niets, Niets)

... maar de namen van de lichamen zullen veranderen met elk nieuw onderdeel (Ex <M2031_REN305VF_sortie-mold>-<REN304_CC.1\\Main body>)!

Ik moet dus een manier vinden om het volume van het nieuwe geplaatste onderdeel te selecteren .

Kan iemand mij helpen dit probleem op te lossen?

Bij voorbaat dank.


lyncoa_20171011.gif

Hallo

U kunt een lus op de functies gebruiken die een "SOLIDBODYFOLDER"-functie ophaalt.

Eenmaal gevonden, wijst u het toe aan een bodyfolder-variabele met behulp van een functie. GetSpecificFeature()

Het enige wat je nog hoeft te doen is de vaste stoffen te herhalen en ze te selecteren met Body.Select(). Het lijkt mij dat het mogelijk is om met deze methode een vlag toe te voegen. Zo niet, gebruik dan de selectiemanager om de selecties te maken.

Hallo Yves.T,

Ik had het geprobeerd met een lus (met de code van D.Roger) die het volume van mijn stuk1 moest herstellen (zie hieronder)...

... maar werkt ook niet! Ik blijf krabben, maar ik mis vast een bestelling!

Heb je een voorbeeld voor 'feature'. GetSpecificFeature()" en sorry voor mijn beginnersvraag, maar wat bedoel je met "een vlag toevoegen"?

Functie instellen = Deel.FirstFeature
        Dim Piece1 als snaar
        Hoewel geen functie niets is
        FeatureName = Feature.Name
         Als Feature.GetTypeName2 = "Voorraad" dan
         Stuk1 = FunctieNaam
         Einde als
        Functie instellen = Functie.GetNextFeature()
        Gaan
       
    Selectie van het hoofdgedeelte
    boolstatus = Part.Extension.SelectByID2("Verwijderde mat.-Extru.3", "SOLIDBODY", 0, 0, 0, False, 1, Niets, 0)
    "Selectie van het af te trekken aandeel
    boolstatus = Part.Extension.SelectByID2("<Stuk1>-<Volumes>", "BDYFOLDER", 0, 0, 0, Waar, 2, Niets, 0)

    Set myFeature = Part.FeatureManager.InsertCombineFeature(15902, Niets, Niets)

Bedankt.

Ik zal je een voorbeeld geven van een lus die lichamen herstelt in VBA.

De lus die u als voorbeeld plaatst, haalt de naam van een object op als het van het type "Voorraad" is.

Ik heb het niet gecontroleerd, maar ik weet niet zeker of "Voorraad" een van de waarden is die door GetTypeName2 worden geretourneerd. . Dit moet worden gecontroleerd in de help.

boolstatus = Part.Extension.SelectByID2("<Stuk1>-<Volumes>", "BODYFOLDER", 0, 0, 0, Waar, 2, Niets, 0)

In deze verklaring vraagt u hem om een object met de naam <Piece1>-<Bulking Bodies> van het type BODYFOLDER te selecteren. hij zal het waarschijnlijk niet vinden:) zet in plaats daarvan BODY.

In de Select-functies (SelectById, SelectById2,...) is er een parameter die wordt gebruikt om een indicator op een selectie te zetten, dat is een vlag.

In sommige Solidworks-functies is het mogelijk om meerdere objecten te selecteren (Voorbeeld: in een baas selecteer je de contourschetsen en vervolgens de geleidingscurves) de vlag stelt Solidworks in staat om de geselecteerde objecten in het juiste "vak" te plaatsen. De selecties met vlag 1 zijn de contouren, vlag 2, de geleidingscurves.

Hallo

Het is snel in elkaar geflanst, maar probeer met de bijgevoegde macro om te zien of het bij je past.

Vriendelijke groeten


combiner.swp
1 like

Bijgevoegd vindt u een voorbeeld van een macro met commentaar

De enige voorwaarden om het te laten werken:

Het hoofdgedeelte een naam geven als "MainBody"

Heb + van een volumelichaam


functie.swp
1 like

Hallo en sorry voor de late terugkeer, veel onderwerpen in uitvoering...!

@d. Roger,

Ik zou graag willen weten hoe ik met de VBA kan "sleutelen" zoals jij dat doet, maar ik denk dat ik nog een lange weg te gaan heb!

de macro werkt geweldig (in enkele), maar toen ik het door een andere macro noemde, moest ik 'Expliciete optie' verwijderen, een klein stukje code toevoegen om de Solidworks-applicatie te zien ...

'Hiermee kunt u de SolidWorks-applicatie bekijken.
swApp.Visible = Waar
Als swApp niets is, dan
Stel swApp = CreateObject("SldWorks.Application") in
swApp.Visible = Waar
Einde als

... En uiteindelijk gaat het door...

"Functie instellen = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, Niets, niets)"

... en lijkt niet op te volgen op de "Sub SelectBodies(swApp As SldWorks.SldWorks... "

Communicatieprobleem dan?!?

@Yves.T,

Om de hoofdlichamen te hernoemen naar "MainBody" zou het mogelijk moeten zijn om dit te doen, aan de andere kant kan er maar één pafrois volume body zijn. In ieder geval bedankt voor de opmerkingen in de macro, het helpt echt bij het begrijpen , ik zal zien of ik me kan aanpassen!

Hallo

Allereerst bedankt voor het compliment in het begin, maar in vba ben ik gewoon aan het "knutselen", het is een programmeertaal die Yves.T veel meer beheerst dan ik die meer C# georiënteerd volgt.

Voor het verwijderen van de expliciete optie, ofwel. Voor rijen die Solidworks weergeven, OK als de macro wordt gestart via een andere macro. Voor de Sub SelectBodies(.....), het is al aangeroepen op het moment van de bug dus geen probleem op dat niveau en voor de bug op de regel "Set Feature = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, Nothing, Nothing)", zoals Yves.T terecht aangaf in zijn macro ("maar bovenal gebruiken we het merkteken om de goede te krijgen") kun je de regel vervangen:

"Functie instellen = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, Niets, niets)"

Volgens  de regels:

Sun SelMgr Als SelectieMgr
Set SelMgr = Part.SelectionManager
Functie instellen = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, SelMgr.GetSelectedObject6(1, 1), SelMgr.GetSelectedObject6(1, 2))

Laten we eens kijken of het werkt zoals jij dat wilt.

Vriendelijke groeten

Hallo d.roger,

Ik heb zojuist de regels code vervangen en het blokkeert op:

"Functie instellen = Part.FeatureManager.InsertCombineFeature(swBodyOperationType_e.SWBODYCUT, SelMgr.GetSelectedObject6(1, 1), SelMgr.GetSelectedObject6(1, 2))"

Fout 424: Vereist object

Vriendelijke groeten