Festlegen von Abhängigkeiten zwischen zwei Räumen

Hallo 
Das Ziel meiner Arbeit ist es, ein Teil zu einem Satz von Teilen hinzuzufügen, die bereits in der Solidwoks-Software vorhanden sind. Darüber hinaus muss es mit diesem Satz mithilfe der VB.NET-APIs zusammengestellt werden.
Also, ich habe es geschafft, das Teil zum Teilesatz in Solidworks hinzuzufügen, aber das Problem, dass ich es nicht mit VB.NET zusammenbauen kann, ich habe mehrere Suchen im Internet durchgeführt und diesen Algorithmus gefunden, wenn ich ihn ausführe, funktioniert er ohne Fehler, aber er führt die Montageaktion nicht aus.
Hier ist der Algorithmus: 
 

Code:

strCompName = swComponent.Name2()
        Debug.Print(" Teil ist  " & strCompName)
        swModel.ClearSelection2(True)
        swDocExt = swModel.Extension()
        MateName = "Konzentrisch" + strCompName
        FirstSelection = "Point1@Origin@" + strCompName & "@" + AssemblyName
        SecondSelection = "Point1@Origin@" + AssemblyName

        boolstat = swDocExt.SelectByID2(FirstSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nichts, swSelectOption_e.swSelectOptionDefault)
        boolstat = swDocExt.SelectByID2(SecondSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nichts, swSelectOption_e.swSelectOptionDefault)

   
        matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCONCENTRIC, swMateAlign_e.swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)
        swModel.ClearSelection2(True)


        swModel.ViewZoomtofit2()
Außerdem habe ich versucht, MsgBox(mateError) hinzuzufügen, und es gibt mir 4 als Ergebnis.
Ich warte auf Ihre Antworten und danke Ihnen im Voraus.

Hallo 

Zunächst müssen Sie überprüfen, ob dieses Makro die Flächen auswählt, auf die Sie die Beschränkungen anwenden möchten. Das heißt, überprüfen Sie, ob die Definitionen von "FirstSelection" und "SecondSelection" funktionieren.

Dann muss die Einschränkung, die Sie hinzufügen, übereinstimmen. Im gegebenen Beispiel versuchen Sie, eine "koaxiale" Spannung anzuwenden.

 

2 „Gefällt mir“

Hallo und vielen Dank für Ihre Antwort,

Ja, das Ziel meines Algorithmus ist es, eine Koaxialitätsbeschränkung zwischen einem hinzugefügten Teil und der Menge von Teilen anzuwenden.

Für Erst- und Zweitauswahl, ich denke, jetzt ist alles in Ordnung, habe ich eine kleine Überarbeitung vorgenommen: 

FirstSelection="Point1@Origin" + strCompName & "@" + AssemblyName
        SecondSelection="Point1@Origin" + AssemblyName

 

Aber das Problem bleibt dasselbe, es werden keine Einschränkungen zu den Teilen hinzugefügt.

Auf der anderen Seite denke ich, dass das Problem von diesen Zeilen herrührt: (es ist nur ein Vorschlag, während man auf Ihre Hilfe wartet): 

boolstat = swDocExt.SelectByID2(FirstSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nichts, swSelectOption_e.swSelectOptionDefault)
        boolstat = swDocExt.SelectByID2(SecondSelection, "CONCENTRIC", 0, 0, 0, True, 1, Nichts, swSelectOption_e.swSelectOptionDefault)

   
        matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCONCENTRIC, swMateAlign_e.swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)
        swModel.ClearSelection2(True)

Hallo

Es ist nicht möglich, eine konzentrische Verknüpfung zwischen zwei Punkten hinzuzufügen. Der Verknüpfungstyp, den Sie verwenden sollten, ist also ein lagegleicher Typ. Dies ist wahrscheinlich Ihr Hauptproblem.

Außerdem denke ich, dass Ihre SelectByID2-Zeilen etwas Arbeit benötigen

http://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.imodeldocextension~selectbyid2.html

Diese Seite gibt einige Details, aber ich denke, Ihre Zeilen sollten eher so aussehen:

boolstat = swDocExt.SelectByID2(FirstSelection, "", 0, 0, 0, True, 1, Nichts, swSelectOption_e.swSelectOptionDefault)

 

3 „Gefällt mir“

Hallo

In dem Code, den Sie zurückbekommen haben, verwenden Sie AddMate3, das veraltet ist, ersetzen Sie es durch AddMate5 (siehe hier) und wie von Gauthik67 gesagt und David Achten Sie auf Ihre SelectByID2-Funktion, der zweite Wert entspricht dem Typ des Objekts, das Sie auswählen, entweder leer oder aus swSelectType_e Enumeration zu übernehmen, und nicht dem Typ der Einschränkung, wie Sie ihn eingeben. Achten Sie auch auf die Einschränkung, die Sie festlegen, sie muss mit Ihrer Auswahl übereinstimmen. Ein Beispiel dafür, was Sie tun möchten, finden Sie hier.

Herzliche Grüße

2 „Gefällt mir“

Hallo und vielen Dank für Ihre Antworten,

Ich habe die Änderungen so vorgenommen, wie Sie mich darum gebeten haben: 

für den SelectBylD2: 

 boolstat = swDocExt.SelectByID2(FirstSelection, "", 0, 0, 0, True, 1, Nichts, swSelectOption_e.swSelectOptionDefault)
        boolstat = swDocExt.SelectByID2(SecondSelection, "", 0, 0, 0, True, 1, Nichts, swSelectOption_e.swSelectOptionDefault)

für den addMate5 gibt es mir diese Fehlermeldung: 

Der öffentliche Member "AddMate5" vom Typ "AssemblyDoc" wurde nicht gefunden

Ich denke, weil ich VB.NET 2013 benutze, und ich glaube nicht, dass es ein großes Problem ist, weil AddMAte3 das Bolo macht.

Ich habe versucht, diesen Code hinzuzufügen, um zu definieren, wo das Problem liegt: 

matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCOINCIDENT, swMateAlign_e.swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)

 Wenn matefeature nichts ist, dann
            MsgBox("" Verknüpfung fehlgeschlagen! ")
        Ende, wenn 
 
 

Und es gibt mir die Meldung "Mate failed" zurück, was bedeutet, dass die MateFeature-Funktion nicht funktioniert hat.

Ich warte auf Ihre Hilfe und danke Ihnen.

Hallo

Sind Sie sicher, dass die Auswahl Ihrer Elemente gut funktioniert? (Ich glaube, es fehlt ein "e" am Ende des Ursprungswortes in der Deklaration Ihrer FirstSelection und SecondSelection). Ersetzen Sie außerdem das "" durch "EXTSKETCHPOINT" in den 2 SelectByID2-Zeilen.

Wenn Sie den Ursprung Ihres Teils auf den Ursprung Ihrer Baugruppe beschränken möchten, ersetzen Sie "swMateType_e.swMateCOINCIDENT" durch "swMateType_e.swMateCOORDINATE" und "swMateAlign_e.swMateAlignALIGNED" durch "-1" in der AddMate3-Funktion.

Welche Version von Solidworks verwenden Sie für die AddMate5-Funktion?

Hier ist ein Beispielcode:

Dim FirstSelection As String
FirstSelection = "Point1@Origine@Pièce1-1@" & AssemblyName
Dim SecondSelection As String
SecondSelection = "Point1@Origine@" & AssemblyName
        
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)
Dim matefeature As Mate2
Set matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCOORDINATE, -1, False, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)
Part.ClearSelection2 True
Part.EditRebuild3

Herzliche Grüße

1 „Gefällt mir“

Hallo und vielen Dank für Ihre Antwort,

Ich habe die Version 2013 von Solidworks.

Für "Point1@Origine@" wird in der SolidWorks Hilfe der Ursprung ohne e geschrieben.

Ich habe Ihre Codeversion getestet, aber ich habe keine Ergebnisse erhalten.

pff dieser Code macht mich verrückt, ich bin fast 1 Monat alt, dass ich feststecke '(

 

 

 

Hallo

Zur Bemerkung " für "Point1@Origine@", in der Solidworks-Hilfe wird origin ohne e geschrieben. " Ich würde dazu neigen zu sagen, dass dies normal ist, da die Solidworks-Hilfe Codebeispiele für eine englische Version von Solidworks gibt, also origin ohne e, aber wenn Ihr Solidworks auf Französisch ist, dann nimmt origin ein e an, Schauen Sie sich an, wie es in Ihrem Baubaum geschrieben steht.

Herzliche Grüße

2 „Gefällt mir“

Setzen Sie außerdem MsgBox FirstSelection und MsgBox SecondSelection nach ihren Wertzuweisungen, um zu überprüfen, ob sie Ihren Erwartungen entsprechen.

1 „Gefällt mir“

Hallo und vielen Dank  für diese Bemerkung,

Ich habe "Origin" im Build-Baum gefunden.

und ich habe die MsgBoxen für

FirstSelection:  " Point1@Origin@Key-1@Assembly "

SecondSelection: " Point1@Origin@Assembly "

Ich denke, sie haben jetzt gute Ergebnisse erzielt.

Es bleibt mir nur übrig, diese beiden Punkte zusammenzutreffen , um die beiden Teile zusammenzusetzen.

 

Äh, eine kleine Überprüfung, Ihre Teile befinden sich in Solidworks im gelösten Modus, sonst funktioniert es nicht, da Referenzen wie Teileursprünge nicht geladen werden!!

Herzliche Grüße

2 „Gefällt mir“

Informationen zum Versetzen von Teilen in den codeaufgelösten Modus finden Sie unter http://help.solidworks.com/2013/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IAssemblyDoc~SetComponentSuppression.html?verRedirect=1 und http://help.solidworks.com/2013/English/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swComponentSuppressionState_e.html.

Herzliche Grüße

Ja Herr D.Roger, ich habe den Modus der Teile auf gelöst geändert, indem ich auf die Baugruppe geklickt und den Modus geändert habe, jetzt habe ich es geschafft, den Ursprung des Teils am Ursprung der Baugruppe zu montieren.

Vielen Dank, Sir, für Ihre Hilfe und an alle Forenmitglieder, die sich an diesem Thema beteiligt haben.

 

1 „Gefällt mir“

Hallo

Bitte, ich habe zwei kurze Fragen:

1/ Ich möchte zwei Teile mit den Achsen zusammensetzen, die ich erstellt habe.

Ich habe diesen Code ausprobiert:

Code 

 FirstSelection ="Axe1@" + strCompName & "@" + AssemblyName
        SecondSelection = "Axe2@" + strCompModelname2 & "@" + AssemblyName

 

'Axe1 und Axe2 sind die Namen der Achsen'

        boolstat = swDocExt.SelectByID2(FirstSelection, "AXIS", 0, 0, 0, True, 1, Nichts, 0)
        boolstat = swDocExt.SelectByID2(SecondSelection, "AXIS", 0, 0, 0, True, 1, Nichts, 0)
        matefeature = swAssemblyDoc.AddMate3(swMateType_e.swMateCOINCIDENT, swMateAlign_e.swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)

 

Aber es hat mir gezeigt, dass die Achsenauswahl falsch ist.

2/ wie ich eine Fläche des Teils auswählen kann, um zwei Teile mit den Flächen zu verbinden.

 

Hallo

Um die richtigen Werte für die Zeilen "SelectByID2" und "AddMate3" zu finden, können Sie den Solidworks Makrorekorder verwenden (siehe hier), dann müssen Sie nur noch die betreffenden Zeilen kopieren und die Namen der Elemente nach Ihren Bedürfnissen anpassen. 

Herzliche Grüße

1 „Gefällt mir“