Macroblokcreatie van 2D-schets in een onderdeel

Hallo

Ik wil een macro maken (SW2019) om automatisch blokken te maken van de 2D schetsen.
Schetsen zijn een enkele laag in een dxf-bestand.

Dus ik open de dxf en ik kom uit op verschillende 2D-schetsen.

Hier is de code van de macro die wordt gegenereerd door opname met opmerkingen...:

Dim swApp als object

Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long

Sub hoofd()

Stel swApp = Toepassing.SldWorks in

Deel instellen = swApp.ActiveDoc

"Selectie van de schets van de "bovenste steun"
boolstatus = Part.Extension.SelectByID2("top press", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Dim myBlockDefinition als object
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Het blok maken

"Selectie van de schets van de "onderste punten"
boolstatus = Part.Extension.SelectByID2("onderste tips", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Het blok maken

'Selectie van de schets "wiggen pm"
boolstatus = Part.Extension.SelectByID2("cales pm", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Het blok maken

Einde Sub

De directory van registratie wordt gedefinieerd in de documentopties.
Maar er worden geen blokken geregistreerd...
Kan iemand mij alstublieft een aanwijzing geven? Bij voorbaat dank
Fred

Hallo
Het moet aan het einde van de procedure worden opgeslagen.
Methode opslaan (ISketchBlockDefinition) - 2022 - SOLIDWORKS API Help

1 like

Hartelijk dank!
Ik heb het geprobeerd, maar omdat ik geen specialist ben, heb ik moeite met het toepassen van de methode.
Een beetje hulp zou welkom zijn.

Re
Voeg aan het einde van de code dit toe:

bRet = swSketchBlockDef.Save(NomDeFichier+Chemin)

Meteen daarna:

Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing)

De bestandsnaam moet xxx.sldblk zijn

Sorry, ik kan er niet goed in zijn...

Hier is mijn code:
Sub hoofd()

Dimwaarde als Booleaanse waarde
Dim bRet als Booleaanse

Stel swApp = Toepassing.SldWorks in

Deel instellen = swApp.ActiveDoc

Dim Dir als snaar
Dir = Deel.GetPathName()
dir = left(dir, InStrRev(dir, ""))

"Selectie van de schets van de "bovenste steun"
boolstatus = Part.Extension.SelectByID2("top press", "SKETCH", 0, 0, 0, False, 0, Nothing, 0)
Dir = Dir & "ondersteuning top.sldblk"

Dim myBlockDefinition als object
Set myBlockDefinition = Part.SketchManager.MakeSketchBlockFromSelected(Nothing) ' Het blok maken
bRet = myBlockDefinition.Save(Dir)

Ik krijg een foutmelding "runtime error ‹ 91 ›:
objectvariabele of blokvariabele met niet gedefinieerd"

Wanneer de stap voor stap, mijn "myBlockDefinition" is gelijk aan "niets" voor het opslaan. Is het omdat mijn blok leeg zou zijn? toch kies ik mijn schets goed uit...

Bedankt voor je geduld en reactievermogen.

In plaats van bezwaar te maken tegen deze regel:

Dim myBlockDefinition as Object

Zetten:

Dim myBlockDefinition As SldWorks.SketchBlockDefinition
1 like

Hallo @fgauvreau
Inderdaad, je maakt een fout in de selectie,
De functie makesketchfromselected() heeft een sketch-entiteit nodig, niet de sketch zelf
Gebruik anders mackesketchblockfromscketch()

1 like

Ontzagwekkend!! Het werkt perfect
Heel erg bedankt voor je hulp