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.
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
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)
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
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
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
Zet ook MsgBox FirstSelection en MsgBox SecondSelection achter hun waardetoewijzingen om te controleren of ze overeenkomen met wat u verwacht.
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
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.
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