Neupositionierung der Komponente durch API-Makro

Hallo

 

Seit heute Morgen suche ich nach einer Lösung für mein Problem, die ich aber nicht finden kann. Ich möchte Bauteile einfügen und in einer Baugruppe entsprechend dem Ursprung der Baugruppe oder einem bestimmten Punkt, Punkt 1, Punkt 2 ...

 

Ich schaffe es, automatisch eine Baugruppe zu erstellen, alle meine Dateien zu öffnen und sie sogar in meine Baugruppe einzufügen. Das erste Bauteil wurde nicht einmal am Ursprung der Baugruppe eingefügt und ich weiß nicht, wie man das Ganze auf den Ursprüngen oder auf Punkten neu positionieren kann.

Wenn jemand diese beiden kleinen Codezeilen kennt, hier sind die Codezeilen, die interessant sind: 

'Ouverture de l'assemblage
Set Part = swApp.OpenDoc6(ActiveSheet.Range("H100"), 2, 0, "", longstatus, longwarnings)
swApp.ActivateDoc2 ActiveSheet.Range("H100"), False, longstatus

'--------------------------------------------
'assemblage des plans
boolstatus = Part.AddComponent(ActiveSheet.Range("H101"), ActiveSheet.Range("E101"), ActiveSheet.Range("F101"), ActiveSheet.Range("G101"))
boolstatus = Part.AddComponent(ActiveSheet.Range("H102"), ActiveSheet.Range("E102"), ActiveSheet.Range("F102"), ActiveSheet.Range("G102"))

 

 

Ich brauche nur mehr Linien zwischen den einzelnen Einfügungen, um den Positionierungspunkt jedes Teils/Satzes zu definieren.

 

Hallo

Überprüfen Sie hier , ob  es Ihnen helfen kann.

Vielen Dank für Ihre schnelle Antwort, aber ich wollte den Code direkt ausrichten und mir nicht den Kopf zerbrechen :'(

 

Im Ernst, ich schaffe es, meine Teile einzufügen, ich möchte sie nach dem Einsetzen verschieben. Ich kann den Job nicht finden. 

 Gibt es eine Möglichkeit, die Komponente direkt in die Baugruppe zu laden, ohne sie vorab zu laden?

Hallo

Es gibt wahrscheinlich das, was Sie in dieser Diskussion wollen.

Herzliche Grüße

Hallo an dich, D.Roger.

 Zunächst einmal möchte ich Ihnen für Ihre Antwort danken, Sie haben gepostet, nachdem ich die Funktion "Mate" gefunden hatte, ich habe festgestellt, dass Sie immer noch Makros mit der "Hand" zum Vergleichen und Entsperren erstellen können.

Also komme ich auf so etwas:

'assemblage des plans
boolstatus = Part.AddComponent(ActiveSheet.Range("H101"), ActiveSheet.Range("E101"), ActiveSheet.Range("F101"), ActiveSheet.Range("G101"))
    'positionnement de la pièce
            'suppression du "fixe" sur la première pièce
            boolstatus = Part.Extension.SelectByID2("K101", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
            Part.unFixComponent
    Part.ClearSelection2 True
    boolstatus = Part.Extension.SelectByID2("J100", "EXTSKETCHPOINT", 0, 0, 0, False, 1, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("J101" & "K101", "EXTSKETCHPOINT", 0, 0, 0, True, 1, Nothing, 0)
   ' Dim swMate As Mate2
    Set swMate = Part.AddMate5(20, -1, False, 0.824524202641418, 0.001, 0.001, 0.001, 0.001, 0.5235987755983, 0.5235987755983, 0.5235987755983, False, False, 0, longstatus)
    Part.ClearSelection2 True
    boolstatus = Part.Extension.SelectByID2("K101", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
    Part.FixComponent
    Part.ClearSelection2 True

 

Mein Problem ist, dass meine Komponente, die als "K101" aufgeführt ist, nicht ausgewählt wird, also keine Einschränkung oder irgendetwas festgelegt. Was für ein Makro, voller Linien für nichts :" (

 

Vielen Dank für Ihre Hilfe, ich warte immer noch auf den richtigen Link oder eine Lösung.

Worauf beziehen sich Ihre "J100", "J101" und "K101"?

Angesichts des Codeausschnitts gehe ich davon aus, dass es sich um Werte handelt, die aus Zellen in einer Excel-Datei entnommen wurden, aber respektieren diese Werte die erforderliche Benennung?

Zum Beispiel:

- Wenn es sich bei "K101" um eine Komponente mit dem Namen "Part1" handelt, die Teil einer Baugruppe mit dem Namen "Assembly2" ist, sollte es "Part1-1@Assemblage2" sein.

- für "J100", wenn es der Ursprung von Assemblage2 ist, sollte es "Point1@Origine@Assemblage2" sein.

- für "J101", wenn es der Ursprung von Teil 1 ist, sollte es "Point1@Origine@Pièce1-1@Assemblage2" sein.

Setzen Sie die Zeile "MsgBox (longstatus)" nach der Zeile "Set swMate = Part.AddMate5(20, -1, False, 0.824524202641418, 0.001, 0.001, 0.001, 0.001, 0.523598775983, 0.523598775983, 0.5235987755983, False, False, 0, longstatus)", dies ermöglicht es Ihnen, den Fehlercode abzurufen und mit diesen zu vergleichen.

Und natürlich, wie in der anderen Diskussion erwähnt, überprüfen Sie, ob sich Ihre Teile in Solidworks im gelösten Modus befinden, sonst funktioniert es nicht...

Herzliche Grüße

2 „Gefällt mir“

Hallo

 

Ich entschuldige mich schon für diese Wartezeit, bevor ich antwortete, ich habe nur auf mein Thema zurückgeschaut und hier ist, was dabei herausgekommen ist:

Mein Makro öffnet alle meine Teile/Baugruppe gut, bevor ich die Hauptbaugruppe öffne und die verschiedenen Komponenten einfüge, muss ich wahrscheinlich einen Weg finden, sie nacheinander zu öffnen und zu schließen, sonst wird es schwer.

 

Beim Einsetzen meiner verschiedenen Bauteile in meine Baugruppe sind diese zwar gut aufgelöst, aber trotz meines swMate alle an ihrem Schwerpunkt positioniert. Also bin ich für den Moment blockiert.

 

Vielen Dank für Ihre Antwort, d.roger. Die Kästchen, auf die verwiesen wird, sind in der Regel gut gefüllt. Ich habe die MsgBox-Zeile (longstatus) eingefügt, sie gibt die Meldung 4 = Falsche Auswahl für Mate zurück. Daraus schließe ich, dass meine Kartons nicht richtig gefüllt sind.

In J setze ich meine Referenzpunkte 'Point1@Origine@'. Für den Ursprung der Montage habe ich nur 'Point1@Origine'

In K nenne ich meine Komponenten 'Part1-1@assemblage1'

Dieser Teil soll dort überarbeitet werden, ich möchte nur meine Bearbeitung zum Laufen bringen, aber mit meinen zwei Zeilen Code:

boolstatus = Part.Extension.SelectByID2("J100", "EXTSKETCHPOINT", 0, 0, 0, False, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("J101" & "K101", "EXTSKETCHPOINT", 0, 0, 0, True, 1, Nothing, 0)

 

Normalerweise mache ich keine Fehler, oder?

 

Zu guter Letzt werden meine Komponenten in meiner Baugruppe nach meinem Makro nicht fixiert, aber ich habe diese drei Zeilen:

    boolstatus = Part.Extension.SelectByID2("K101", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
    Part.FixComponent
    Part.ClearSelection2 True

 

 

Vielen Dank, ich halte Sie über meine Fortschritte auf dem Laufenden.

Hallo

Ihre Auswahl ist daher nicht gut, da SOLIDWORKS in Ihren Teilen und Baugruppen nach Elementen mit den Namen "J100", "J101" und "K101" sucht. Sie müssen die Werte der Zellen  in Excel abrufen und sie dann an Zeichenfolgenvariablen übergeben, die Sie dann Ihren SelectByID2-Funktionen zuweisen.

Dim FirstSelection As String
FirstSelection = 'valeur de la cellule Excel (attention ce n'est pas le numéro de la cellule)'
Dim SecondSelection As String
SecondSelection = 'valeur de la cellule Excel (attention ce n'est pas le numéro de la cellule)'
        
Part.ClearSelection2 True
boolstatus = swAssemblyDoc.Extension.SelectByID2(FirstSelection, "EXTSKETCHPOINT", 0, 0, 0, False, 1, Nothing, 0)
boolstatus = swAssemblyDoc.Extension.SelectByID2(SecondSelection, "EXTSKETCHPOINT", 0, 0, 0, True, 1, Nothing, 0)

Herzliche Grüße

Hallo

 

In der Tat war es keine gute Idee, den J100- oder J101-Wert zurückzugeben, ein Anfängerfehler oder jemand, der nicht an VBA gewöhnt ist. Also habe ich das genommen, was in der vorderen Station war, um voranzukommen, so sieht es aus:

 

        For i = 101 To 103
boolstatus = Part.AddComponent(ActiveSheet.Range("H" & i), 0, 0, 0)

Dim CompInsert As String
CompInsert = ActiveSheet.Range("E" & i) & "-1@" & ActiveSheet.Range("E100")
Dim FirstSelection As String
FirstSelection = "Point1@Origine@" & CompInsert
Dim SecondSelection As String
SecondSelection = "Point1@Origine"

    'positionnement de la pièce
            'suppression du "fixe" sur la première pièce
            boolstatus = Part.Extension.SelectByID2(CompInsert, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
            Part.unFixComponent

Part.ClearSelection2 True
boolstatus = Part.Extension.SelectByID2(FirstSelection, "EXTSKETCHPOINT", 0, 0, 0, False, 1, Nothing, 0)
boolstatus = Part.Extension.SelectByID2(SecondSelection, "EXTSKETCHPOINT", 0, 0, 0, True, 1, Nothing, 0)
            
Set swMate = Part.AddMate5(20, -1, False, 0, 0.001, 0.001, 0.001, 0.001, 0.5235987755983, 0.5235987755983, 0.5235987755983, False, False, 0, longstatus)

 

Im Moment schafft es mein Makro, diese Operationen durchzuführen:

Öffnen Sie alle Komponenten nacheinander, um den ungelösten Modus zu vermeiden, ich werde später an eine weniger umständliche Lösung denken.

Es öffnet meine Hauptbaugruppe oder fügt die Komponenten ein.

Es macht die Komponente "frei". (Variable "CompInsert" ok)

Es platziert meine Origin/Origin-Komponenten und repariert sie.

 

Vielen Dank für Ihre Hilfe, jetzt muss ich einen Weg finden, meine Komponenten direkt in meiner Baugruppe zu öffnen und zu lösen.

Es ist nicht erforderlich, alle Komponenten zu öffnen, um sie auf aufgelöst zu setzen, listen Sie einfach die Threads der Baugruppe auf, die in Solidworks mit der Funktion "GetRootComponent3" geladen wurden, und versetzen Sie sie dann mit der Funktion "SetComponentDelete" in den aufgelösten Modus.

Herzliche Grüße