Solidworks API. Fläche verschieben

Hallo an alle.

 

Mit dem Wunsch, ein Makro zu erstellen, um die Erstellung einer Funktion zu automatisieren, um face = > auf die Oberfläche + anschließend eine andere Funktion zu verschieben, habe ich den folgenden Code geschrieben.

Allerdings wird die Funktion nicht erstellt und ich sehe wirklich nicht das Warum oder Wie. Ich habe meine Start- und Endflächen mit den erforderlichen Markierungen ausgewählt, aber es wird nichts erstellt.

Haben Sie eine Idee?

 

Dimmen swApp als Objekt
Dim swmodel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swFeatMgr As SldWorks.FeatureManager
Dim swFeat As SldWorks.Feature
Dim swMoveFaceFeat As SldWorks.MoveFaceFeatureData

Sub main()

Legen Sie swApp = Application.SldWorks fest
Legen Sie swmodel = swApp.ActiveDoc fest.


'Stellen Sie sicher, dass es sich bei der geöffneten Datei um eine Teildatei handelt
Wenn swmodel. GetType <> swDocPART dann
    MsgBox "Bitte öffnen Sie eine Teiledatei", vbApplicationModal + vbOKOnly + vbCritical, "Teiledatei erforderlich"
    Sub beenden
Ende, wenn


Dim Selectmanager als SelectionMgr
        Legen Sie Selectmanager = swmodel fest. Auswahl des SelectionManagers wiederherstellen
        sw-Modell verwenden. ClearSelection2 True ' Auswahl löschen
        
        

' Schleife für die Warteauswahl
            Dim bool1 als boolescher Wert
            So y
            bool1 = Falsch
            Ausführen, bis bool1 = wahr ist
                Wenn Selectmanager.GetSelectedObjectType3(1, -1) = 2, dann
                bool1 = Wahr
                Ende, wenn
                Für y = 1 Bis 50000
                Veranstaltungen durchführen
                Weiter y
            Schleife

        Dim-Coord als Variante
        Coord = Selectmanager.GetSelectionPointInSketchSpace2(1, -1)
        
        Dim x0 als Single
        Sun y0 Als Single
        Dim z0 als Single
        
        x0 = Koord(0)
        y0 = Koord(1)
        z0 = Koord(2)
        
        sw-Modell verwenden. ClearSelection2 (Wahr)
       
        
    Legen Sie swModelDocExt = swmodel fest. Erweiterung
    Legen Sie swFeatMgr = swmodel fest. Funktions-Manager


        
        sw-Modell verwenden. ClearSelection2 (Wahr)
        
        ' Schleife für die Warteauswahl
            
            bool1 = Falsch
            Ausführen, bis bool1 = wahr ist
                Wenn Selectmanager.GetSelectedObjectType3(1, -1) = 2, dann
                bool1 = Wahr
                Ende, wenn
                Für y = 1 Bis 50000
                Veranstaltungen durchführen
                Weiter y
            Schleife
        Coord = Selectmanager.GetSelectionPointInSketchSpace2(1, -1)
        x1 = Koord(0)
        y1 = Koord(1)
        z1 = Koord(2)
        sw-Modell verwenden. ClearSelection2 (Wahr)
        bret = swmodel. Extension.SelectByID2("", "FACE", x0, y0, z0, True, 1, Nichts, 0)
        bret = swmodel. Extension.SelectByID2("", "FACE", x1, y1, z1, True, 8, Nichts, 0)
      
      Set swFeat = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, False, 0, 0, Nichts, Nichts, swEndConditions_e.swEndCondUpToSurface, 0)


Ende Sub
 

 

Vielen Dank im Voraus

 

Glücklicher Vater

Dumme Frage

Aber warum diese Art von Makro??????????????????????

Ich verstehe nicht!!!!!!!!!!!

1 „Gefällt mir“

Ganz einfach, weil wir in meinem Unternehmen eine Teiledateibibliothek haben, die über den Befehl insert = > part als Modellierungsbasis dient.

Diese Elemente fügen wir in den Raum ein und verknüpfen sie dann miteinander. Die Anzahl der Bibliothekselemente kann recht groß sein, daher wollten wir ein Makro erstellen, um diese Aufgabe etwas zu automatisieren.

ein bisschen im Sinne des Routings

Siehe diesen Link

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

In der Tat ein bisschen im gleichen Sinne, aber wir haben nur wenige Premuim-Lizenzen, so dass ich bei den Grundfunktionen von SW bleiben muss.

 

1 „Gefällt mir“

Und wenn du zufällig deine Figuren erstellt hast, die ihr zugewandt sind, kannst du dich zwischen 2 Ebenen bewegen

Sie müssen nur die Versatzlänge dieser 2 Ebenen ändern

Ich weiß nicht, ob ich mir das verstehe 

Der Trick wäre, zu wissen, welche Art von Teil einen vorderen Versatz haben sollte und in Bezug auf was

@+

Wenn ich das richtig verstehe, sprechen Sie mit mir über ein Teil in einer Baugruppe. Liege ich falsch?

Jetzt spreche ich darüber in einer Dokumentdatei. Wir haben eine Teiledatei, in die wir weitere Teiledateien einfügen, die als Grundlage für die Konstruktion dienen.

Um so vollständig wie möglich zu sein, führen wir Schweißmechaniken (mit unseren eigenen Profilen) durch und rekonstruieren das gesamte Teil (Kopfdatei) aus den Profilverbindungen, die von der Forschungs- und Entwicklungsabteilung hergestellt werden.

Siehe beigefügten Screenshot, wenn es aussagekräftiger sein kann.

 


sans_titre.png

Hallo

Wenn ich die verwendete Methode richtig verstanden habe (was ich nicht testen kann, da ich auf SW2014 bin), fehlen in der letzten Zeile einige Parameter. Da Sie in diesem Fall nichts in die Bewegungseinstellungen eingeben, ist es normal, dass nichts passiert.

Sie müssen die X,Y,Z-Parameter und wahrscheinlich die Richtung der Funktion definieren.

Das habe ich mir auch am Anfang gesagt, ich hatte eine Variable vom Typ Variante erstellt, um meine X-, Y- und Z-Werte in der Funktion zu geben, aber es hat nichts geändert.

Ich gebe zu, dass es mir schwer fällt, diesen Teil der API-Hilfe zu interpretieren. Da ich zwischen den nicht verwendeten Werten bis zur Oberfläche und nicht blind bin, neige ich dazu, zu denken, dass der Übersetzungswert wie ein großer Wert behandelt wird, da er eine Start- und eine Endfläche hat (dito, als ob wir die Funktion manuell ausführen würden).

edit Ersetzen des Hilfeauszugs durch einen Link zur Online-Hilfe

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

Hallo

Ich bin mir nicht sicher, ob ich es verstanden habe, aber um eine Assoziativität zu erstellen, kann die Funktion Fläche verschieben sehr gut mit einer Referenzebene verknüpft werden, indem Sie Verschieben anstelle von Versatz wählen. Danach reicht es aus, eine Eigenschaft hinzuzufügen, um den Wert des Versatzes zu ändern, oder die Ebene gemäß einer variablen Referenz (Entfernungsursprung, Körperfläche, ...) zu erstellen.

 

Deshalb möchte ich die Bedingung bis zur Oberfläche verwenden, die bei Variation immer Elementen folgt.

Ich habe in der Zwischenzeit getestet, das Makro zu modifizieren, wenn ich ihm eine blinde Endbedingung mit Werten in der Funktion insertmoveface3 gebe, ist es in Ordnung, aber die Endbedingung ist nicht diejenige, die unseren Erwartungen entsprechen würde.

Zuvor (vor dem Wechsel zu SW 2015 haben wir Skizzenextrusionen erstellt, die in die Oberfläche des nächsten Körpers konvertiert wurden)

Nach vielen Tests ist diese Lösung schneller zu implementieren und vor allem viel weniger zeitaufwendig in der Rekonstruktionszeit)

 

Ich denke, wir müssen eine Auswahl für die Ausrichtung der Funktion (Absatzbemerkungen) hinzufügen, da die Funktion swMoveFaceTypeTranslate verwendet wird. In der Auswahl vonID2 benötigen Sie eine Auswahl, bei der der Markierungsparameter auf 2 gesetzt ist.

Zu testen.

Dies ist eine der Lösungen, die ich getestet habe, und leider hat sich nichts geändert.

 

 

Ok, ich habe verstanden, in der Tat  ist es kompliziert, wie können Sie eine automatische Ausrichtung entsprechend der Anzahl der vertikalen und horizontalen Beschläge definieren? Es ist ein Projekt, das meine Fähigkeiten übersteigt, ich kann Ihnen nicht helfen, dsl. Sonst wäre die Verwendung der Boss- / Basisrandfunktion nicht einfacher?

Hallo zusammen, nach sehr langen Versuchen ist hier die Lösung 

 

Legen Sie swApp = Application.SldWorks fest
Legen Sie swmodel = swApp.ActiveDoc fest.
Legen Sie swFrame = swApp.Frame fest
Legen Sie swModelDocExt = swmodel fest. Erweiterung
Legen Sie swFeatMgr = swmodel fest. Funktions-Manager
z = 0
nb_profil = 0
'Stellen Sie sicher, dass es sich bei der geöffneten Datei um eine Teildatei handelt
Wenn swmodel. GetType <> swDocPART dann
    MsgBox "Bitte öffnen Sie eine Teiledatei", vbApplicationModal + vbOKOnly + vbCritical, "Teiledatei erforderlich"
    Sub beenden
Ende, wenn

MsgBox "Wählen Sie die Startfläche, dann die Endfläche, um die Verknüpfung zu erzeugen" & vbLf & "Wiederholen Sie dies so oft wie nötig" & vbLf & vbLf & "Um zum Zusammenführen der Körper zu wechseln, drücken Sie die Taste F2", vbInformation + vbApplicationModal + vbOKOnly, "Erstellen der Funktionen zum Verschieben der Fläche"

Auswahl:
Dim Selectmanager als SelectionMgr
        Legen Sie Selectmanager = swmodel fest. Auswahl des SelectionManagers wiederherstellen
        sw-Modell verwenden. ClearSelection2 True ' Auswahl löschen
' Schleife für die Warteauswahl
    Do until Selectmanager.GetSelectedObjectType3(1, -1) = SwConst.swSelFACES oder GetAsyncKeyState(113) <> 0
      Veranstaltungen durchführen
      swFrame.SetStatusBarText "Bitte wählen Sie die erste Seite aus oder drücken Sie die Taste F2, um mit der Erstellung der Kombinationsfunktionen fortzufahren" ' Anzeige der Meldung in der SW-Leiste
    Schleife
Dimmen Sie swFace als SldWorks.Face2
Debug.Print GetAsyncKeyState(112)
Debug.Print GetAsyncKeyState(123)
nb = Selectmanager.GetSelectedObjectCount2(-1)
Wenn nb <> 0 Dann
    Set swFace = Selectmanager.GetSelectedObject6(1, -1)
    Dim swEntity als SldWorks.Entity
    Legen Sie swEntity = swFace fest
    Set body = swFace.GetBody
    Profil = Körper. Name
    nb_car = (Len(Profil) - Len(Ersetzen(Profil, "<", "", , , 0))) / Len("<")
        Wenn nb_car <> 0, dann
             profile = Links(Profil, (Länge(Profil) - 1))
             profile = "_" & Split(Split(Split(Profil, "<")(nb_car), ">")(0), " ")(0) & "_" & nb_profil
             Bodysuit. Name = Profil
            nb_profil = nb_profil + 1
        Ende, wenn
Oder
    sw-Modell verwenden. ClearSelection2 Wahr
    Gehe zum Kombinieren
Ende, wenn

sw-Modell verwenden. ClearSelection2 Wahr

' Schleife für die Warteauswahl
    Während Selectmanager.GetSelectedObjectType3(1, -1) <> SwConst.swSelFACES
      Veranstaltungen durchführen
      swFrame.SetStatusBarText "Bitte wählen Sie die zweite Seite aus" ' Anzeige der Nachricht in der SW-Leiste
    Wend
    
Set swFace = Selectmanager.GetSelectedObject6(1, -1)

sw-Modell verwenden. ClearSelection2 Wahr
    
swEntity.SelectByMark True, 1
swEntity.SelectByMark True, 2
Legen Sie swEntity = swFace fest
swEntity.SelectByMark True, 8
Set body = swFace.GetBody
Profil = Körper. Name
nb_car = (Len(Profil) - Len(Ersetzen(Profil, "<", "", , , 0))) / Len("<")
Wenn nb_car <> 0, dann
    profile = Links(Profil, (Länge(Profil) - 1))
    profile="_" & Split(Split(Split(Profil, "<")(nb_car), ">")(0), " ")(0) & "_" & nb_profil
    Bodysuit. Name = Profil
    nb_profil = nb_profil + 1
Ende, wenn

Erstellen der Funktion Fläche verschieben + Erstellung prüfen
Set swFeat = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, False, 0, 0, Nichts, Nichts, 3, 0)
Wenn swFeat nichts ist, dann
    Set swFeat = swFeatMgr.InsertMoveFace3(swMoveFaceTypeTranslate, True, 0, 0, Nichts, Nichts, 3, 0)
    Wenn swFeat nichts ist, dann
        Select Case MsgBox("Die Bindungsfunktion konnte nicht erstellt werden" & vbLf & vbLf & "Möchten Sie den Link wiederholen?", vbApplicationModal + vbCritical + vbYesNo, "Fehler bei der Erstellung")
        vbJa Box
            Gehe zur Auswahl
        Box vbNo
        Ende Auswahl
    Oder
        Wählen Sie Case MsgBox ("Möchten Sie eine zusätzliche Bindung erstellen?", vbApplicationModal + vbCritical + vbYesNein, "Fehler beim Generieren") aus.
        vbJa Box
            Gehe zur Auswahl
        Box vbNo
        Ende Auswahl
    Ende, wenn
Oder
z = z + 1
ReDim Preserve feat_name(z)
feat_name(z) = swFeat.Name
Gehe zur Auswahl
Ende, wenn