Assemblage exporteren naar DXF

Hallo

We zouden assemblagebestanden moeten exporteren naar DXF (schaal 1:1)
Geen massa-export, maar in het idee zou het eerder een export onder ontwerp zijn

Eerste probleem, zoals u wellicht weet, is het onmogelijk om een assemblage rechtstreeks naar DXF te exporteren (althans voor zover ik weet in 2017)
We hebben misschien de mogelijkheid om een macro te maken, om naar een deel te exporteren en vervolgens naar DXF te exporteren, hier tweede probleem omdat we geen kennis hebben van macro's

Tot onze beschikking hebben we myCADtools of myPDMtools
Maar we kennen niet echt alle mogelijkheden van deze tools.

Heb je aanknopingspunten om te geven?
Bij voorbaat dank,
Séb 

Hallo

Ik vond een lange tijd geleden deze macro op het forum die alle bestanden van een assembly in PDF opslaat; Als je weet wat je doet, kun je je aanpassen 


pdf_des_composants_de_lassemblage.swp

 Bedankt ac cobra 427 voor uw bestand
Maar ik kan het niet starten, er wordt niets uitgevoerd, ik heb de indruk, er wordt geen pdf-bestand gegenereerd
En op het gebied van macrobewerking ben ik een knikker

Edit: Ik begreep net dat je een drw plan al gemaakt
Als gevolg hiervan wordt de macro uitgevoerd

Het is niet mogelijk om een assembly naar een dxf te exporteren, het is noodzakelijk om een tekening door te nemen met de keuze van de te exporteren aanzichten.

Natuurlijk zal het lid van het Europees Parlement in de loop van de procedure opnieuw moeten worden geregistreerd.

Ik weet niet zeker of een macro u veel tijd zal besparen. Het is net zo snel om je 3 weergaven neer te zetten en jezelf te exporteren ^me als om op een knop te drukken en de macro zijn werk te laten doen.

Voor de MyCad-tool hetzelfde, niet echt interessant voor het onderwerp

Hallo

Ik heb een macro die onderdelen en samenstellingen DXFs.

Het enige wat u hoeft te doen is een lege achtergrond te maken (pad aan te geven in de macro) en de macro records in dxf op schaal 1.

Ik hoop dat dit uw verzoek zal beantwoorden

een+


dxf.txt
1 like

Heel erg bedankt gwygwy
Dit is al een enorme stap vooruit!

DXF van assemblage genereert correct
Ik hoef alleen maar de assemblage in 0,0,0 te positioneren (door noodzakelijkerwijs de oorsprong van de 3D)
En om het bestand te hernoemen

Is het mogelijk om vanuit een macro een dialoogvenster te hebben om de naam van het gewenste bestand te schrijven? of de naam van een SW-eigenschap van het bestand ophalen?

1 like

Hallo

Een klein voorbeeld HIER om een aangepaste eigenschap op te halen...

Anders voor een dialoogvenster dat wacht op een reactie:

Dim maValeur As String
maValeur = InputBox("Ma question ?", "Mon titre", "Ma valeur par défaut")

Vriendelijke groeten

 Bedankt d.roger voor de aanvulling,

Dus als ik wil dat de gegenereerde DXF een naam krijgt met "myValue"
Moet ik het blok Part.SaveAs wijzigen in de macro die door gwygwy is verzonden?

    
'--- Het redden van de dxf en het sluiten van de tijdelijke
    MEP Part.SaveAs PathNoExtension & ". DXF"
    Part.ClearSelection2 True
    Set Part = swApp.ActiveDoc
    swApp.CloseDoc swDraw.GetTitle 'Stopt zonder een back-up te maken van de MEP.

 

 .

Ik heb ook moeite om mijn assemblage in 0,0,0 te positioneren
Standaard ligt de oorsprong van de DXF altijd in het midden van mijn assemblage

Ja, u moet het blok Part.SaveAs wijzigen om de variabele PathNoExtension opnieuw te berekenen.

Een klein voorbeeld:

Dim maValeur As String
maValeur = InputBox("Ma question ?", "Mon titre", "Ma valeur par défaut")
    
Dim FilePath As String
Dim FileTitle As String
Dim PathSize As Long
Dim TitleSize As Long
Dim PathNoExtension As String
FilePath = Part.GetPathName
FileTitle = Part.GetTitle
PathSize = Strings.Len(FilePath)
TitleSize = Strings.Len(FileTitle)
PathNoExtension = Strings.Left(FilePath, PathSize - TitleSize)

MsgBox PathNoExtension & maValeur & ".dxf"

Vriendelijke groeten

Heel erg bedankt d.roger

De macro uitvoeren vanuit een assembly,
Ik heb het onderdeel vervangen door sw.model

FilePath = Deel.GetPathName
FileTitle = Deel.GetTitle

Het resultaat is echt niet slecht,
Het enige dat overblijft is om het geheel in 0,0,0 te positioneren
En om de DXF in een bestand in raw op te nemen en niet aan de spietsen van de 3D

Wat bedoel je met "Het enige wat je hoeft te doen is het hele ding in 0,0,0 te positioneren"? Een screenshot van wat je krijgt en wat je zou willen, zou welkom zijn.

En om de dxf in een raw-map op te slaan, moet je de variabele "PathNoExtension" naar wens herwerken.

Aan de linkerkant, dxf van de macro
Een rechtse, handmatig gewijzigde dxf met herpositionering van de projectie op de oorsprong

Wat betreft het pad, ik heb een beetje gekrabd en het is ok;)


origine.png

OK, dus laten we eens kijken of zoiets als het volgende bij je past:

Option Explicit

Sub main()

    Dim swApp           As SldWorks.SldWorks
    Dim swModel         As SldWorks.ModelDoc2
    Dim swDraw          As SldWorks.DrawingDoc
    Dim swView          As SldWorks.View
    Dim retval          As String
    Dim FilePath        As String
    Dim FileTitle       As String
    Dim PathSize        As Long
    Dim TitleSize       As Long
    Dim PathNoExtension As String
    Dim maValeur        As String

    Set swApp = CreateObject("SldWorks.Application")
    Set swModel = swApp.ActiveDoc

'--- Création du nom du fichier
    FilePath = swModel.GetPathName
    FileTitle = swModel.GetTitle
    PathSize = Strings.Len(FilePath)
    TitleSize = Strings.Len(FileTitle)
    PathNoExtension = Strings.Left(FilePath, PathSize - TitleSize)
    
    maValeur = InputBox("Veuillez indiquer le nom du fichier dxf ?", "Macro Asm To DXF", "MonFichier")

    PathNoExtension = PathNoExtension & maValeur & ".dxf"

'--- Calcul du décalage de l'origine
    Dim vBox                    As Variant
    Dim swAssy                  As SldWorks.AssemblyDoc
    Dim X_max                   As Double
    Dim X_min                   As Double
    Dim Y_max                   As Double
    Dim Y_min                   As Double
    Dim Z_max                   As Double
    Dim Z_min                   As Double

    If swModel.GetType() <> swDocASSEMBLY Then Exit Sub
    
    Set swAssy = swModel
    vBox = swAssy.GetBox(swBoundingBoxIncludeRefPlanes)

    X_max = vBox(3)
    X_min = vBox(0)
    Y_max = vBox(4)
    Y_min = vBox(1)
    Z_max = vBox(5)
    Z_min = vBox(2)

    Dim decalX As Double
    Dim decalY As Double
    decalX = (X_max - X_min) / 2
    decalY = (Y_max - Y_min) / 2
    
'--- Création de la mise en plan
    retval = swApp.GetUserPreferenceStringValue(swDefaultTemplateDrawing)
    Set swDraw = swApp.NewDocument(retval, 0, 0, 0)

'--- Insertion de la vue
    Set swView = swDraw.CreateDrawViewFromModelView3(swModel.GetPathName, "*Face", decalX, decalY, 0)
    
'--- Rend invisible les annotations de plis
    swView.ShowSheetMetalBendNotes = False

'--- Force la vue à l'échelle 1:1
    Dim swSheet As Sheet
    Dim status As Boolean
    Set swView = swDraw.GetFirstView
    Set swSheet = swDraw.GetCurrentSheet
    status = swSheet.SetScale(1, 1, True, True)
    
'--- Sauvegarde du dxf et fermeture de la MEP temporaire
    swDraw.SaveAs PathNoExtension & ".DXF"
    swDraw.ClearSelection2 True
    swApp.CloseDoc swDraw.GetTitle

End Sub

Ik heb het niet aangepakt om het dxf-bestand in een andere map op te slaan...

Vriendelijke groeten

Hallo

@sjoly_TRI

Ik ben blij dat mijn macro je vooruit heeft geholpen

A+

Dank je wel d.roger
Er wordt een herpositionering gedaan, maar deze is niet goed ingesteld op x0 y0 (CF-afbeelding)

Ik geef toe dat ik het principe van decalX en decalY niet begrijp met de xMax xMin (...)


2020-10-27_16_02_01-draftsight_enterprise_-_monfichier1.dxf_.png

Eindelijk, ik heb net de reden gevonden,
We hebben een skelet van opnamen die niet in 3D zijn gemaakt
En de ombouw met de Xmax Xmin... Houd rekening met de plannen

 


2020_10_27_16_16_58_solidworks_premium_2017_x64_edition_r_a.106568.sldasm_lecture_seule_.png

Het principe is om de afmetingen van de "BoundingBox" van de assemblage te berekenen en de weergave met de helft ervan te verplaatsen, aangezien de oorsprong van de weergave standaard het midden van de assemblage is.

Probeer de lijn te vervangen:

vBox = swAssy.GetBox(swBoundingBoxIncludeRefPlanes)

Door het:

vBox = swAssy.GetBox(Onwaar)

Wanneer je een plan hebt dat in de weg zou staan...

Vriendelijke groeten

Daniël

Inderdaad, het is beter zo
Hartelijk dank aan jullie allemaal voor de tijd die jullie hebben besteed en voor jullie hulp!

1 like