DXF Plaatwerk Export Macro Probleem

Hallo allemaal, ik heb een macro geschreven om de uitgevouwen plaatwerkonderdelen te exporteren, alles werkt goed als het vanuit een onderdeel is ingeschakeld.

Ik wil het laten werken, zelfs als het actieve document een plan is (ik kom er voor de exportstap).

Het doel is, in het geval dat het startpunt een plan is, om het gelijknamige deel te openen/activeren en vervolgens te exporteren via ExportToDWG2.

Maar ik krijg in deze context de foutmelding "eigenschap of methode die niet door dit object wordt afgehandeld", ideeën?

(echter, na het openen van het onderdeel, vertelt MsgBox ("Het actieve document is: " & swApp.ActiveDoc.GetTitle) me dat het deel actief is)

---------------------------------CONTEXTCONTROLE EN LANCERING-------------------------

Sub dxfexport()

Zo niet, dan is swDOC niets
Als swDOC.GetType = swDocDRAWING Dan
Als fso. FileExists(PART_PATH) dan
Oproep openpart
Bel dxf
Bel closepart

    Else: MsgBox ("Pièce Introuvable")
    End If
ElseIf swDOC.GetType = swDocPART Then
    'openpart
    dxf
End If

Anders
MsgBox "Open a.u.b. een document", vbUitroep + vbOKOnly
Einde als

Einde Sub

--------------------------------- OPENING VAN DE KAMER----------------------------
Sub openpart()
Dim swApp als object
Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long
Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc

Doen
Als fso. FileExists(PART_PATH) dan
Deel instellen = swApp.OpenDoc6(PART_PATH, 1, 0, "", longstatus, longwarnings)
swApp.ActivateDoc3 PART_PATH, False, swRebuildOnActivation_e.swDontRebuildActiveDoc, longstatus
'swApp.ActivateDoc2 PART_PATH, False, longstatus
Deel instellen = swApp.ActiveDoc
Else: MsgBox ("deel niet gevonden")

Einde als
Herhalen tot Part.GetType = swDocPART

Deel.BewerkenOpnieuw opbouwen3
Deel.WeergaveZoomtofit2
MsgBox ("Het actieve document is: " & swApp.ActiveDoc.GetTitle)
Einde Sub

-------------------------------------------EXPORTEREN------------------------------------
Sub dxf()

Dim modelPath als tekenreeks
Dim longstatus Zo lang

modelPath = swDOC.GetPathName



Dim OUT_PATH As String
OUT_PATH = EXPORT_PATH & FILE_NAME & Indice + ".DXF"

Dim options As Long
options = 1 Or 2 Or 4 Or 8 Or 16 Or 32

'Codes d'options d'export:
'ExportFlatPatternGeometry = 1
'IncludeHiddenEdges = 2
'ExportBendLines = 4
'IncludeSketches = 8
'MergeCoplanarFaces = 16
'ExportLibraryFeatures = 32
'ExportFormingTools = 64
'ExportBoundingBox = 2048

If modelPath = "" Then
Err.Raise vbError, "", "Enregistrez votre pièce avant export"

Anders

If False = swDOC.ExportToDWG2(OUT_PATH, PART_PATH, swExportToDWG_e.swExportToDWG_ExportSheetMetal, True, Empty, False, False, options, Empty) Then
    Err.Raise vbError, "", "Erreur d'export DXF"
End If

Einde als

Einde Sub

Hallo @Clément_Barillot_1 ,

De fout is waarschijnlijk te wijten aan de ExportToDWG2-methode , die specifiek is voor de IPartDoc-klasse, niet voor ImodelDoc2.
Daarom moet het actieve deeldocument worden toegewezen aan een swPart-variabele van het type SldWorks.PartDoc.

 Dim swPart As SldWorks.PartDoc
        Set swPart = swApp.ActiveDoc
        If False = swPart.ExportToDWG2(OUT_PATH, PART_PATH, swExportToDWG_e.swExportToDWG_ExportSheetMetal, True, Empty, False, False, options, Empty) Then
            Err.Raise vbError, "", "Erreur d'export DXF"
        End If
1 like

BEDANKT! Ik worstel al een aantal dagen, ik heb zelfs chatGPT gebruikt om me te helpen... Je bent op dit moment beter dan " hij " :wink:

Nogmaals bedankt

Hallo
Om dit te laten werken, moet u ook de declaraties verplaatsen naar (voorheen in globaal) de hoofdfunctie, namelijk "dxfexport()" en niet "openpart()",
Voeg de referentie, verklaring en toewijzing van de "fso" toe,
Verwijder de "do"-lus dat als de fso het bestand niet vindt, dit zal resulteren in een oneindige lus,
(zo werkte het voor mij)

In werkelijkheid was het een vergissing van mijn kant in openpart:

Deel instellen = swApp.ActiveDoc
In plaats van
Stel swDOC = swApp.ActiveDoc in

Maar dxf() exporteert op basis van swDOC...

Dus onvermijdelijk... Het principe was goed, maar de variabele, niet...

De tussenkomst van de heer Blt stelde me in staat om dit te beseffen, heel eenvoudig...

Wat betreft de declaraties, ik heb nog steeds duplicaten, maar ze zijn van het openbare type en niet van Dim, bij het initialiseren van Main()

dxfexport() is niet mijn hoofdfunctie, de volledige macro-export in DXF, STEP + PDF, of je nu in een kamer bent of het plan.

Ik zal zien over de inifinie lus, ik heb geen enkel probleem gehad tot nu toe, maar ik zal opmerken...

Hallo
Laten we zeggen dat er minder risico is, omdat het bestand noodzakelijkerwijs bestaat.
Aan de andere kant vraag ik me af wat het nut is van deze controle van het bestaan van het bestand, want als ik het goed heb begrepen, hebben we ofwel de 3D direct geopend of openen we hem vanuit de 2D, dus het bestaat noodzakelijkerwijs.
Edit: aan de andere kant zou het veel nuttiger zijn om te controleren of het geëxporteerde bestand nog niet bestaat (en het bijbehorende gedrag te genereren)

Hallo
Ik vermoedde dat er andere functies bestaan, maar ik kan alleen omgaan met wat je hebt gepost :wink:

Hallo Cyril
Inderdaad, de 3d bestaat zeker, maar niet noodzakelijkerwijs met dezelfde naam, of zelfs meer in de gespecificeerde directory die de lus zal beginnen met een oneindig bericht

Uh, nee, als het wordt verkregen uit een 2D-weergave, kan het alleen bestaan op de gedefinieerde locatie, tenzij het een virtueel bestand van een asm is, maar dat is hier niet het geval voor zover ik weet.
Als ik het goed begrijp, is het SW open met het bestand in visueel, dus het moet bestaan.

Wat niet het geval is, want in de post gaf hij dezelfde naam op als de tekening

1 like

Nauwkeurig, verkeerd gelezen

1 like