Solidworks API Een virtueel onderdeel maken in een assembly

Hallo gemeenschap.

 

Om binnen mijn bedrijf een macro te ontwikkelen, wil ik het maken van virtuele onderdelen in de assemblage automatiseren.

Het lukt me echter niet om de code te ontwikkelen die deze actie mogelijk maakt.

 

Hieronder vind je het begin van mijn onderzoek.

 

Dim swApp als object
Sub hoofd()

Stel swApp = Toepassing.SldWorks in
Stel swmodel = swApp.ActiveDoc in
Dim swModelTitle als SldWorks.ModelDoc2


     
'-------------------------------------------------------------------------------------------------------------
'Controleren of een ASM-dossierdocument open is
'-------------------------------------------------------------------------------------------------------------

     Zo niet, swmodel is niets dan' als een SW-bestand wordt geopend
     Debug.Print "een SW-bestand is geopend" 'dan msg debuggen en doorgaan

     Anders: MsgBox ("Er is geen SW-bestand geopend, open een assembly en start de macro opnieuw") 'als er geen SW-bestand open is => msg
Sub afsluiten
    Einde als
    

     
     Dim type_doc als snaar
     type_doc = swDocumentTypes_e.swDocPART
     Foutopsporing.Print type_doc
     
     Als swmodel. GetType = swDocumentTypes_e.swDocASSEMBLY dan
     Debug.Print "Het geopende bestand is een assembly-bestand"
     Anders: Debug.Print "het geopende bestand is geen assembly-bestand, open een assembly en start de macro opnieuw"
     MsgBox ("het geopende bestand is geen assemblagebestand, open een assemblage en start de macro opnieuw")
Sub afsluiten
      Einde als
      

'----------------------------------------------------------------------------------------------------------
'De bestandsnaam ophalen'
'----------------------------------------------------------------------------------------------------------
Dim pad als snaar
Dim name_asm als snaar
name_asm = zwenkmodel. Titel ophalen
pad = swmodel. GetPathName (GetPathNaam)
Debug.Print "bestandsnaam: " & name_asm
Debug.Print "pad:" & pad
Zon nom_asm
nom_asm = Links(name_asm, (InStrRev(name_asm; ".", -1, vbTextCompare) - 1))
Fouten opsporen.Afdrukken nom_asm


'-----------------------------------------------------------------------------------------------------------
"Creatie van opdrukonderdelen
'-----------------------------------------------------------------------------------------------------------


Dim nom_pe als snaar
nom_pe = "EMP_" & nom_asm
Debug.Print "naam van het onderdeel impressum: " & nom_pe
Zon new_part

boolstatus = swmodel. Extension.SelectByID2("Gezichtsvlak", "VLAK", 0, 0, 0, Onwaar, 0, Niets, 0) 'Gezichtsvlak selecteren
new_part = swmodel. InsertNewVirtualPart(boolstatus, nom_pe)

swmodel. ForceRebuild3 Waar
swmodel. BekijkenZoomtofit2


Einde Sub

 

 

De foutcode die op de lijn wordt verkregen new_part = ....

 

Heb je enig idee wat ik verkeerd doe???

Ik geef toe dat het voorbeeld van de API-hulp me perplex achterlaat...

 

 

 

 


sans_titre.png

Hallo

Een basisregel bij het programmeren is het correct declareren van je variabelen.

In dit geval is de regel waarop er een fout is:

Sun trapt de verklaring af

New_part de naam van de variabele

om het type in te stellen

... een type

 

Dus je mist het type. Ik denk dat het het soort stuk is om te zien in de hulp ...

1 like

Hallo

A priori meng je de naam met het onderdeel zelf.

Ruilen:

Dim nom_pe als snaar

In 

Dim nom_pe als component2

En verwijder de regel:

nom_pe = "EMP_" & nom_asm

Edit: zie de gecorrigeerde macro in PJ.

Bewerken 2:

Als u de naam wilt wijzigen, moet u het volgende doen:

nom_pe.Naam2 = EMP_" & nom_asm

Ik heb de macro op de pc bijgewerkt.


macro_piece_virtuelle.pdf
1 like

@ remrem

Ik ben een beginner in prog en heb nog steeds grote hiaten

Ik dacht dat het niet zetten van een... Laat de keuze aan het prog over om het meest geschikte type variabele te nemen.

 

@.PL

Ik krijg nog steeds dezelfde foutmelding.

 

Is de fout op dezelfde regel?

Is er in de 3D van SolidWorks een kant geselecteerd?

Edit: probeer de wijziging als bijlage.

Als er een fout is, geef dan aan op welke regel u dat wilt.


macro_piece_virtuelle.txt

Ja, altijd op dezelfde lijn.

Ik heb het voorvlak dat in de vorige regel is geselecteerd.

 

Sterker nog, daarom moet je er een gewoonte van maken om alle variabelen correct aan te geven.

Als we de variabelen niet declareren, gebruiken ze het standaardvarianttype. Dit kan functionaliteits- en prestatieproblemen veroorzaken...

1 like

altijd de regel eronder foutief

new_part = swmodel. InsertNewVirtualPart(boolstatus, nom_pe)
 

Runtime-fout 13 Type komt niet overeen

 

 

Domme vraag die zeker niets met het probleem te maken heeft, maar de "_" is geen bron van fouten?

Ik denk het niet, want ik heb het veel gebruikt in een eerdere macro die ik eerder deed.

 

Ik had niet al te veel problemen.

 

Gezien mijn onervarenheid kan ik immers niets garanderen...

 

1 like

Ik zal het waarschijnlijk pas morgenavond kunnen testen.

 @.PL

 

Geen zorgen, het is al heel leuk om te proberen me te helpen...

Ik zal mijn onderzoek en tests voortzetten, wat er ook gebeurt, en zal posten als het evolueert.

 

 

Goedenavond

Kijkend naar de API-help, zijn de variabele e-types in parameter niet goed.

Naar mijn mening is het rechterhandschrift het handschrift in het bijgevoegde bestand (getest en functioneel).


correction_macro_piece_virtuelle.txt

@lyric.

 

Inderdaad, het werkt wonderwel.

Een grote dank aan u.

Voorlopig geef ik toe dat ik het waarom en het hoe niet echt begrijp. Ik zal naar deze regels code kijken om de ins en outs te begrijpen.) 

 

Nogmaals bedankt

 

Blije papa

Hallo Happydad,

Om dit te begrijpen, zal een snelle blik op de API-help door de functie InsertNewVirtualPart als zoekcriterium te plaatsen , grotendeels verklaren waar het probleem vandaan kwam.

Het type variabele dat door deze functie als parameter wordt verwacht, wordt uitgelegd en dit is waar het probleem vandaan komt (eerste incompatibele parameter).

De txt-punt van de songtekst werkt niet als ik de tekst kopieer naar een lege macro in vba (pb van accenten onder andere).

Kan iemand na de .swp of .swb alstublieft?

' De functionele macro geeft dit bij vaste ;)

Dim swApp als object
Sub hoofd()
Stel swApp = Toepassing.SldWorks in
Stel swmodel = swApp.ActiveDoc in
Dim swModelTitle als SldWorks.ModelDoc2
'-------------------------------------------------------------------------------------------------------------
'Controleren of een ASM-dossierdocument open is
'-------------------------------------------------------------------------------------------------------------
     Zo niet, swmodel is niets dan' als een SW-bestand wordt geopend
     Debug.Print "een SW-bestand is geopend" 'dan msg debuggen en doorgaan
     Anders: MsgBox ("Er is geen SW-bestand geopend, open een assembly en start de macro opnieuw") 'als er geen SW-bestand open is => msg
Sub afsluiten
    Einde als
     Dim type_doc als snaar
     type_doc = swDocumentTypes_e.swDocPART
     Foutopsporing.Print type_doc
     Als swmodel. GetType = swDocumentTypes_e.swDocASSEMBLY dan
     Debug.Print "Het geopende bestand is een assembly-bestand"
     Anders: Debug.Print "het geopende bestand is geen assembly-bestand, open een assembly en start de macro opnieuw"
     MsgBox ("het geopende bestand is geen assemblagebestand, open een assemblage en start de macro opnieuw")
Sub afsluiten
      Einde als
'----------------------------------------------------------------------------------------------------------
'Opgehaald©artion van de bestandsnaam
'----------------------------------------------------------------------------------------------------------
Dim pad als snaar
Dim name_asm als snaar
name_asm = zwenkmodel. Titel ophalen
pad = swmodel. GetPathName (GetPathNaam)
Debug.Print "bestandsnaam: " & name_asm
Debug.Print "pad:" & pad
Zon nom_asm
nom_asm = Links(name_asm, (InStrRev(name_asm; ".", -1, vbTextCompare) - 1))
Fouten opsporen.Afdrukken nom_asm
'-----------------------------------------------------------------------------------------------------------
"Creatie van opdrukonderdelen
'-----------------------------------------------------------------------------------------------------------
Dim nom_pe als SldWorks.Component2
Zon swSelMgr As SldWorks.SelectionMgr
Dim swPlaneFeature als SldWorks.Feature
Dim swPlane als SldWorks.RefPlane
Zon new_part zo lang
Dim boolstatus als Booleaanse

Stel swSelMgr = swmodel in. SelectieManager
boolstatus = swmodel. Extension.SelectByID2("Gezichtsvlak", "VLAK", 0, 0, 0, Onwaar, 0, Niets, 0) 'Gezichtsvlak selecteren
Stel swPlaneFeature in = swSelMgr.GetSelectedObject6(1, -1)
Stel swPlane in = swPlaneFeature.GetSpecificFeature2

new_part = swmodel. InsertNewVirtualPart(swPlane, nom_pe)

nom_pe. Name2 = "Naar EMP_" & nom_asm

swmodel. ForceRebuild3 Waar
swmodel. BekijkenZoomtofit2
Einde Sub