Maak beperkingen tussen twee kamers

Hallo 
Het doel van mijn werk is om een onderdeel toe te voegen aan een set onderdelen, die al bestaan, in de Solidwoks software. Bovendien moet het met deze set worden geassembleerd met behulp van de VB.NET API's .
Dus ik ben erin geslaagd om het onderdeel toe te voegen aan de set onderdelen in Solidworks, maar het probleem is dat ik het niet met VB.NET kan monteren, ik heb verschillende zoekopdrachten op het net gedaan en ik heb dit algoritme gevonden, wanneer ik het uitvoer, werkt het foutloos, maar het voert de montageactie niet uit.
Hier is het algoritme: 
 

Code:

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

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

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


        swModel.ViewZoomtofit2()
daarnaast heb ik geprobeerd MsgBox (mateError) toe te voegen, en het geeft me 4 als resultaat.
Ik wacht op uw antwoorden en dank u bij voorbaat.

Hallo 

Allereerst moet u controleren of deze macro de vlakken selecteert waarop u de beperkingen wilt toepassen. Dat wil zeggen, controleer of de definities van "FirstSelection" en "SecondSelection" werken.

Dan moet de beperking die je toevoegt overeenkomen. In het gegeven voorbeeld probeer je een "coaxiale" spanning toe te passen.

 

2 likes

Hallo en bedankt voor je antwoord,

Ja, het doel van mijn algoritme is om een coaxialiteitsbeperking toe te passen tussen een toegevoegd onderdeel en de set onderdelen.

Voor de eerste en tweede selectie, ik denk dat alles nu in orde is, heb ik een kleine revisie gemaakt: 

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

 

Maar het probleem blijft hetzelfde, er zijn geen beperkingen toegevoegd aan de onderdelen.

Aan de andere kant denk ik dat het probleem voortkomt uit deze regels: (het is gewoon een voorstel in afwachting van uw hulp): 

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

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

Hallo

Je kunt geen concentrische mat toevoegen tussen twee punten. dus het mate-type dat je zou moeten proberen te gebruiken is een toeval. Dit is waarschijnlijk uw belangrijkste probleem.

Ook denk ik dat uw SelectByID2 lijnen wat werk nodig hebben

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

Deze pagina geeft wat details, maar ik denk dat de jouwe regels er meer uit zouden moeten zien als:

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

 

3 likes

Hallo

In de code die je terug kreeg, gebruik je AddMate3 die verouderd is, vervang deze door AddMate5 (zie hier) en zoals gezegd door Gauthik67 en David let op uw SelectByID2-functie, de tweede waarde komt overeen met het type object dat u selecteert, leeg of te nemen uit swSelectType_e opsomming, en niet het type beperking zoals u stelt. Let ook op de beperking die u instelt, deze moet consistent zijn met uw selecties. Een voorbeeld van wat je wilt doen vind je hier.

Vriendelijke groeten

2 likes

Hallo en bedankt voor je antwoorden,

Ik heb de wijzigingen aangebracht zoals u mij hebt gevraagd ze aan te brengen: 

voor de SelectBylD2: 

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

voor de addMate5 krijg ik deze foutmelding: 

Het openbare lid 'AddMate5' van het type 'AssemblyDoc' is niet gevonden

Ik denk omdat ik VB.NET 2013 gebruik, en ik denk niet dat het een groot probleem is, omdat AddMAte3 de bolo doet.

Ik heb geprobeerd deze code toe te voegen om te definiëren waar het probleem is: 

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

 Als matefeature niets is, dan
            MsgBox ("" mate mislukt! ")
        Einde als 
 
 

En het geeft me de melding "Mate mislukt", wat betekent dat de matefeature-functie niet werkte.

Ik wacht op uw hulp en dank u.

Hallo

Weet u zeker dat de selectie van uw elementen goed verloopt? (Ik denk dat er een "e" ontbreekt aan het einde van het oorsprongswoord in de declaratie van uw FirstSelection en SecondSelection). Vervang ook de "" door "EXTSKETCHPOINT" in de 2 SelectByID2 regels.

Als u de oorsprong van uw onderdeel wilt beperken tot de oorsprong van uw assemblage, vervangt u "swMateType_e.swMateCOINCIDENT" door "swMateType_e.swMateCOORDINATE" en "swMateAlign_e.swMateAlignALIGNED" door "-1" in de functie AddMate3.

Voor de AddMate5-functie, welke versie van Solidworks gebruikt u?

Hier is een voorbeeldcode:

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

Vriendelijke groeten

1 like

Hallo en bedankt voor je antwoord,

Ik heb de 2013 versie van Solidworks.

Voor "Point1@Origine@" wordt in de SolidWorks Help de oorsprong geschreven zonder e.

Ik heb uw versie van de code getest, maar ik heb geen resultaten gekregen.

pff deze code maakt me gek, ik ben bijna 1 maand oud dat ik vastzit '(

 

 

 

Hallo

Op de opmerking " voor "Point1@Origine@", in de solidworks-help, wordt origin geschreven zonder e. " Ik zou geneigd zijn te zeggen dat dit normaal is, aangezien de Solidworks-help codevoorbeelden geeft voor een Engelse versie van Solidworks, dus oorsprong zonder e, maar als je solidworks in het Frans is, dan neemt origine een e, Kijk hoe het in je bouwboom staat.

Vriendelijke groeten

2 likes

Zet ook MsgBox FirstSelection en MsgBox SecondSelection achter hun waardetoewijzingen om te controleren of ze overeenkomen met wat u verwacht.

1 like

Hallo en hartelijk dank  voor deze opmerking,

Ik heb "Origin" gevonden in de bouwboom.

en ik heb de MsgBoxes gemaakt voor

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

SecondSelection: " Point1@Origin@Assembly "

Ik denk dat ze nu goede resultaten hebben gegeven.

Het blijft voor mij alleen om deze twee punten samen te laten vallen om de twee stukken samen te voegen.

 

Uh, een kleine controle, je onderdelen staan in de opgeloste modus in Solidworks, anders werkt het niet omdat referenties zoals de oorsprong van onderdelen niet worden geladen!!

Vriendelijke groeten

2 likes

Om onderdelen in de code-omgezette modus te zetten, zie http://help.solidworks.com/2013/English/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IAssemblyDoc~SetComponentSuppression.html?verRedirect=1 en http://help.solidworks.com/2013/English/api/swconst/SolidWorks.Interop.swconst~SolidWorks.Interop.swconst.swComponentSuppressionState_e.html.

Vriendelijke groeten

Ja meneer D.Roger, ik heb de modus van de onderdelen gewijzigd om opgelost te zijn door op de assemblage te klikken en de modus te wijzigen, nu ben ik erin geslaagd om de oorsprong van het onderdeel bij de oorsprong van de assemblage te monteren.

Heel erg bedankt meneer voor uw hulp en aan alle forumleden die hebben deelgenomen aan dit onderwerp.

 

1 like

Hallo

Alstublieft, ik heb twee korte vragen:

1/ Ik wil twee stukken in elkaar zetten met behulp van de bijlen die ik voor ze heb gemaakt.

Ik heb deze code geprobeerd:

Code 

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

 

'Axe1 en Axe2 zijn de namen van de assen'

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

 

Maar het liet me zien dat de asselectie onjuist is.

2/ hoe ik één zijde van het onderdeel kan selecteren om twee delen samen te voegen met behulp van de vlakken.

 

Hallo

Om de juiste waarden te vinden om in de regels "SelectByID2" en "AddMate3" te zetten, kunt u de Solidworks-macrorecorder gebruiken (zie hier), dan hoeft u alleen maar de betreffende regels te kopiëren en de namen van de elementen aan te passen aan uw behoeften. 

Vriendelijke groeten

1 like