Solidworks API. Gezicht verplaatsen

Hallo allemaal.

 

Omdat ik een macro wilde maken om het maken van een functie te automatiseren om het gezicht = > naar het oppervlak te verplaatsen + vervolgens een andere functie, schreef ik de volgende code.

De functie is echter niet gemaakt en ik zie echt niet het waarom of hoe. Ik heb mijn begin- en eindvlakken met de vereiste markeringen geselecteerd, maar er wordt niets gemaakt.

Heb je een idee??

 

Dim swApp als object
Dim swmodel als SldWorks.ModelDoc2
Dim swModelDocExt als SldWorks.ModelDocExtension
Dim swFeatMgr als SldWorks.FeatureManager
Dim swFeat als SldWorks.Feature
Dim swMoveFaceFeat als SldWorks.MoveFaceFeatureData

Sub hoofd()

Stel swApp = Toepassing.SldWorks in
Stel swmodel = swApp.ActiveDoc in


'Controleer of het geopende bestand een deelbestand is
Als swmodel. GetType <> swDocPART dan
    MsgBox "Open a.u.b. een onderdeelbestand", vbApplicationModal + vbOKOnly + vbCritical, "Deelbestand vereist"
    Sub afsluiten
Einde als


Dim Selectmanager als SelectionMgr
        Stel Selectmanager = swmodel in. Selectie herstellen door SelectionManager
        swmodel. ClearSelection2 True ' Clear Selection
        
        

' Lus voor wachtende selectie
            Dim bool1 als booleaanse
            Zon y
            bool1 = Onwaar
            Doen tot bool1 = Waar
                Als Selectmanager.GetSelectedObjectType3(1, -1) = 2 dan
                bool1 = Waar
                Einde als
                Voor y = 1 tot 50000
                Doe-evenementen
                Volgende y
            Strik

        Dim coördinaat als variant
        Coördinaat = Selectmanager.GetSelectionPointInSketchSpace2(1, -1)
        
        Dim x0 als single
        Zon y0 Als single
        Dim z0 als single
        
        x0 = Coördinaat(0)
        y0 = Coördinaat(1)
        z0 = Coördinaat(2)
        
        swmodel. ClearSelection2 (waar)
       
        
    Stel swModelDocExt = swmodel in. Extensie
    Stel swFeatMgr = swmodel in. Functiebeheer


        
        swmodel. ClearSelection2 (waar)
        
        ' Lus voor wachtende selectie
            
            bool1 = Onwaar
            Doen tot bool1 = Waar
                Als Selectmanager.GetSelectedObjectType3(1, -1) = 2 dan
                bool1 = Waar
                Einde als
                Voor y = 1 tot 50000
                Doe-evenementen
                Volgende y
            Strik
        Coördinaat = Selectmanager.GetSelectionPointInSketchSpace2(1, -1)
        x1 = Coördinaat(0)
        y1 = Coördinaat(1)
        z1 = Coördinaat(2)
        swmodel. ClearSelection2 (waar)
        bret = swmodel. Extension.SelectByID2("", "FACE", x0, y0, z0, True, 1, Nothing, 0)
        bret = swmodel. Extension.SelectByID2("", "FACE", x1, y1, z1, True, 8, Nothing, 0)
      
      Stel swFeat in = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, Onwaar, 0, Niets, Niets, swEndConditions_e.swEndCondUpToSurface, 0)


Einde Sub
 

 

Bij voorbaat dank 

 

Blije papa

domme vraag

Maar waarom dit soort macro??????????????????????

Ik begrijp het niet!!!!!!!!!!!

1 like

Simpelweg omdat we in mijn bedrijf een artikelbestandsbibliotheek hebben die als modelleringsbasis dient via het commando insert => onderdeel.

Deze elementen voegen we in de ruimte en koppelen we vervolgens aan elkaar. Het aantal bibliotheekelementen kan vrij groot zijn, dus we wilden een macro maken om deze taak enigszins te autoatiseren.

Een beetje in dezelfde geest als routing

Zie deze link

http://help.solidworks.com/2015/French/SolidWorks/sldpiping/c_connection_route_points.htm?id=80ee80a724b34d0e8281b0af48e1a92d#Pg0&ProductType=&ProductName=

Inderdaad een beetje in dezelfde geest, maar we hebben maar een paar premuim-licenties, dus ik moet op de basisfuncties van SW blijven.

 

1 like

En als je per ongeluk je stukken hebt gemaakt die ernaar gericht zijn om tussen 2 vlakken te bewegen

Je hoeft alleen maar de offset-lengte van deze 2 vlakken te wijzigen

Ik weet niet of ik mezelf het laat begrijpen 

De truc zou zijn om te weten welk type onderdeel een frontale offset moet hebben en in relatie tot wat

@+

Als ik het goed begrijp, heb je het tegen me over een onderdeel in een assemblage. Heb ik het mis?

Nu praat ik hierover in een documentdossier. We hebben een onderdeelmap waarin we andere onderdeelbestanden invoegen die als basis dienen voor de constructie.

Om zo compleet mogelijk te zijn, doen we gelaste mechanica (met onze eigen profielen) en reconstrueren we het geheel van een onderdeel (kopvijl) uit de profielverbindingen die door de R&D-afdeling worden gemaakt.

Zie bijgevoegde schermafbeelding als het veelzeggender kan zijn.

 


sans_titre.png

Hallo

Als ik de gebruikte methode goed heb begrepen (die ik niet kan testen omdat ik op SW2014 zit), ontbreken er enkele parameters in de laatste regel. In dit geval, aangezien je niets in de bewegingsinstellingen zet, is het normaal dat er niets gebeurt.

U moet de parameters X, Y, Z en waarschijnlijk de richting van de functie definiëren.

Dat is wat ik mezelf in het begin ook vertelde: ik had een variabele van het type variant gemaakt om mijn X-, Y- en Z-waarden in de functie te geven, maar het veranderde niets.

Ik geef toe dat ik moeite heb met het interpreteren van dit deel van de API-hulp. Omdat tussen de waarden die niet worden gebruikt omdat ik in conditie ben tot aan de oppervlakte en niet blind, heb ik de neiging om te denken dat het de vertaalwaarde als een grote behandelt, omdat het een beginvlak en een eindvlak heeft (dito alsof we de functie handmatig uitvoeren.)

edit Vervanging van het helpfragment door een link naar de online help

http://help.solidworks.com/2015/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IFeatureManager~InsertMoveFace3.html

Hallo

Ik weet niet zeker of ik het begrepen heb, maar om een associativiteit te creëren, kan de functie gezicht verplaatsen heel goed worden geassocieerd met een referentievlak door te kiezen voor vertalen in plaats van offset. Daarna zou het voldoende zijn om een eigenschap toe te voegen om de waarde van de offset te wijzigen, of het vlak te maken volgens een variabele referentie (afstand, oorsprong, lichaamsgezicht, ...).

 

Daarom wil ik de conditie tot aan de oppervlakte gebruiken, die in geval van variatie altijd elementen zal volgen.

Ik heb in de tussentijd getest om de macro aan te passen, als ik het een blinde eindvoorwaarde geef met waarden in de insertmoveface3-functie is het prima, maar de eindvoorwaarde is niet degene die aan onze verwachtingen zou voldoen.

Eerder (voordat we naar SW 2015 verhuisden, hebben we schetsextrusies geschetst die zijn omgezet naar het oppervlak van de volgende carrosserie)

Na vele tests is deze oplossing sneller te implementeren en bovenal veel minder tijdrovend in reconstructietijd)

 

Ik denk dat we een selectie moeten toevoegen voor de oriëntatie van de functie (paragraafopmerkingen) vanwege het gebruik van de functie swMoveFaceTypeTranslate. In de selectie doorID2 heb je een selectie nodig waarbij de markeringsparameter op 2 is ingesteld.

Om getest te worden.

Dit is een van de oplossingen die ik heb getest, en helaas veranderde het niets.

 

 

Ok ik begreep het, het is inderdaad  ingewikkeld, hoe kun je een automatische oriëntatie definiëren op basis van het aantal verticale en horizontale fittingen ? Het is een project dat mijn vaardigheden te boven gaat, ik kan je niet helpen dsl. Anders zou het gebruik van de boss / base border-functie niet eenvoudiger zijn?

Hallo allemaal, na zeer lange proeven, hier is de oplossing 

 

Stel swApp = Toepassing.SldWorks in
Stel swmodel = swApp.ActiveDoc in
Stel swFrame = swApp.Frame in
Stel swModelDocExt = swmodel in. Extensie
Stel swFeatMgr = swmodel in. Functiebeheer
z = 0
nb_profil = 0
'Controleer of het geopende bestand een deelbestand is
Als swmodel. GetType <> swDocPART dan
    MsgBox "Open a.u.b. een onderdeelbestand", vbApplicationModal + vbOKOnly + vbCritical, "Deelbestand vereist"
    Sub afsluiten
Einde als

MsgBox "Selecteer het beginvlak en vervolgens het eindvlak om de link te genereren" & vbLf & "Herhaal zo vaak als nodig is" & vbLf & vbLf & "Om over te schakelen naar het samenvoegen van de lichamen drukt u op de F2-toets", vbInformation + vbApplicationModal + vbOKOnly, "Het maken van de functies die het gezicht verplaatsen"

Selectie:
Dim Selectmanager als SelectionMgr
        Stel Selectmanager = swmodel in. Selectie herstellen door SelectionManager
        swmodel. ClearSelection2 True ' Clear Selection
' Lus voor wachtende selectie
    Doen tot Selectmanager.GetSelectedObjectType3(1, -1) = SwConst.swSelFACES of GetAsyncKeyState(113) <> 0
      Doe-evenementen
      swFrame.SetStatusBarText "Selecteer de eerste zijde of druk op de F2-toets om door te gaan met het maken van de combine-functies" ' weergave van het bericht in de SW-balk
    Strik
Dim swFace als SldWorks.Face2
Foutopsporing.Print GetAsyncKeyState(112)
Foutopsporing.Print GetAsyncKeyState(123)
nb = Selectmanager.GetSelectedObjectCount2(-1)
Als nb <> 0 Dan
    Stel swFace in = Selectmanager.GetSelectedObject6(1, -1)
    Dim swEntity als SldWorks.Entity
    Stel swEntity = swFace in
    Lichaam instellen = swFace.GetBody
    profiel = lichaam. Naam
    nb_car = (Len(profiel) - Len(Vervang(profiel, "<", "", , , 0))) / Len("<")
        Als nb_car <> 0 dan
             profiel = Links(profiel, (Len(profiel) - 1))
             profile = "_" & Split(Split(Split(profiel, "<")(nb_car), ">")(0), " ")(0) & "_" & nb_profil
             rompertje. Naam = profiel
            nb_profil = nb_profil + 1
        Einde als
Anders
    swmodel. ClearSelection2 Waar
    GoTo combineren
Einde als

swmodel. ClearSelection2 Waar

' Lus voor wachtende selectie
    Terwijl Selectmanager.GetSelectedObjectType3(1, -1) <> SwConst.swSelFACES
      Doe-evenementen
      swFrame.SetStatusBarTekst "Selecteer de tweede zijde" ' weergave van het bericht in de SW-balk
    Gaan
    
Stel swFace in = Selectmanager.GetSelectedObject6(1, -1)

swmodel. ClearSelection2 Waar
    
swEntity.SelectByMark Waar, 1
swEntity.SelectByMark True, 2
Stel swEntity = swFace in
swEntity.SelectByMark Waar, 8
Lichaam instellen = swFace.GetBody
profiel = lichaam. Naam
nb_car = (Len(profiel) - Len(Vervang(profiel, "<", "", , , 0))) / Len("<")
Als nb_car <> 0 dan
    profiel = Links(profiel, (Len(profiel) - 1))
    profile="_" & Split(Split(Split(profiel, "<")(nb_car), ">")(0), " ")(0) & "_" & nb_profil
    rompertje. Naam = profiel
    nb_profil = nb_profil + 1
Einde als

Het aanmaken van de functie Gezicht verplaatsen + Aanmaken controleren
Stel swFeat in = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, Onwaar, 0, 0, Niets, Niets, 3, 0)
Als swFeat niets is, dan
    Stel swFeat in = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, True, 0, 0, Niets, Niets, 3, 0)
    Als swFeat niets is, dan
        Selecteer Case MsgBox ("Kan de bindingsfunctie niet maken" & vbLf & vbLf & "Wilt u de link opnieuw proberen?", vbApplicationModal + vbCritical + vbYesNo, "Error Building")
        vbYes doos
            GoTo-selectie
        Doos vbNo
        Einde selecteren
    Anders
        Selecteer Case MsgBox("Wilt u een extra binding maken?", vbApplicationModal + vbCritical + vbYesNo, "Fout bij het genereren ervan")
        vbYes doos
            GoTo-selectie
        Doos vbNo
        Einde selecteren
    Einde als
Anders
z = z + 1
ReDim Bewaren feat_name(z)
feat_name(z) = swFeat.Name
GoTo-selectie
Einde als