vbamania.pl
login:
hasło:
 
  *Rejestracja *Zapomniane hasło
 Dziś jest piątek, 26 kwietnia 2024 roku.
Ustaw jako stronę startową Ulubione Napisz
PowrótPowrót do serwisu  RegulaminRegulamin rssRSS

  tytuł wątku:
Wątki dyskusji

Inventor - płaski wzór z opisem do dxf.


otwartyotwarty rozpoczął: Arcess postów: 13



napisał: Arcess
postów: 9


umieszczony:
16 listopada 2015
15:52

edytowany:
16 listopada 2015
15:54

  
nazwa pliku rozmiar
A1.png 527.68 kB

W załączniku screen.

Okno z poprawną ścieżką też się pokazało, ale zaraz po wciśnięciu Ok taki komunikat. I pliku dxf brak.
napisał: Harry
postów: 42


umieszczony:
13 listopada 2015
12:03

  
Aby dxf były zapisywane w miejscu złożenia to wstaw kod z mojego poprzedniego posta czyli:
DxfFold=Left$(oDoc.FullFileName, InStrRev(oDoc.FullFileName, "\"))



tuż pod linijką:
oDataMedium.FileName = NfPath & "dxf"


wstaw
MsgBox oDataMedium.FileName


i napisz jaki komunikat wyskoczy, powinna tam być poprawna pełna scieżka do pliku dxf.
napisał: Arcess
postów: 9


umieszczony:
13 listopada 2015
11:52

  
Ścieżkę zapisu ustawiłem tak:
Cytat:
Dim DxfFold As String: DxfFold = "D:\VAULT\GMN"


Nie wiem jak ustawić tak, aby ścieżke zczytało z głównego złożenia (za każdym razem może być inna).

Nie wiem o co chodzi z tym :

Cytat:
Co do tego dziwnego komunikatu to sprawdz czy:
oDataMedium.FileName = NfPath & "dxf"


zawiera poprawną scieżkę wraz z nazwą pliku i jego rozszeżeniem


Nie programuje więc to dla mnie czarna magia.
napisał: Harry
postów: 42


umieszczony:
13 listopada 2015
08:56

  
Aby ustwawić miejsce eksportu dxf muzisz zdefiniować zmienną DxfFold, patrz post poniżej.
Można to zrobić np tak:
DxfFold=Left$(oDoc.FullFileName, InStrRev(oDoc.FullFileName, "\"))



Co do tego dziwnego komunikatu to sprawdz czy:
oDataMedium.FileName = NfPath & "dxf"


zawiera poprawną scieżkę wraz z nazwą pliku i jego rozszeżeniem
napisał: Arcess
postów: 9


umieszczony:
13 listopada 2015
06:15

edytowany:
13 listopada 2015
06:21

  
nazwa pliku rozmiar
Makro.png 275.74 kB

W załaczniku screen. Jest problem z zapisem. Wyskakuje okno "dokument który próbujesz zapisać nie jest dokumentem rysunku"


Dodam, że dobrze by było gdyby dxfy zapisywało tam gdzie główne złożenie. Nie wiem jak to ustawić.
napisał: Harry
postów: 42


umieszczony:
11 listopada 2015
08:58

  
Aby makro działało musisz w kodzie ustawić sobie dwie zmienne:
DxfFold = "C:\temp\" - miejsce gdzie dxf maja byc zapisywane oraz
strIniFile = "C:\dxfExport.ini" - plik z parametrami exportu

Napisz czy dziala poprawnie:

Sub AssemblyDxfExport()
If ThisApplication.Documents.count = 0 Then MsgBox "Brak otwartych dokumentów": Exit Sub
If Not ThisApplication.ActiveDocument.DocumentType = kAssemblyDocumentObject Then MsgBox "Otwarty dokument nie zlozeniem! ": Exit Sub

Dim oDoc As AssemblyDocument
Set oDoc = ThisApplication.ActiveDocument

Dim oBOM As BOM
Set oBOM = oDoc.ComponentDefinition.BOM
Dim oPartsOnlyBOMView As BOMView

If oBOM.StructuredViewFirstLevelOnly Then oBOM.StructuredViewFirstLevelOnly = False
oBOM.PartsOnlyViewEnabled = True
Set oPartsOnlyBOMView = oBOM.BOMViews.Item(oBOM.BOMViews.count)

Dim colSH As ObjectCollection
Set colSH = ThisApplication.TransientObjects.CreateObjectCollection

Dim BR As BOMRow

For Each BR In oPartsOnlyBOMView.BOMRows
    If BR.ComponentDefinitions.Item(1).Document.DocumentType = kPartDocumentObject Then
        If BR.ComponentDefinitions.Item(1).Document.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then
            If Not BR.ComponentDefinitions.Item(1).Document.ComponentDefinition.FlatPattern Is Nothing Then
                colSH.Add BR
            End If
        End If
    End If
Next BR

If colSH.count = 0 Then MsgBox "Brak blach z rowinieciami!", vbCritical: Set colSH = Nothing: Exit Sub

Dim oPartDoc As PartDocument
Dim W As Double, H As Double
Dim oPt As Point2d
Dim oView As DrawingView
Dim sH As BOMRow

Dim oBaseViewOptions As NameValueMap
Set oBaseViewOptions = ThisApplication.TransientObjects.CreateNameValueMap
Call oBaseViewOptions.Add("SheetMetalFoldedModel", False)

Dim DXFAddIn As TranslatorAddIn
Set DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")

Dim oContext As TranslationContext
Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism

Dim oOptions As NameValueMap
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

Dim oDataMedium As DataMedium
Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

Dim DxfFold As String: DxfFold = "C:\temp\"
Dim strIniFile As String
Dim NfPath As String

Dim oDrw As DrawingDocument
Set oDrw = ThisApplication.Documents.Add(kDrawingDocumentObject, ThisApplication.FileManager.GetTemplateFile(kDrawingDocumentObject))
oDrw.SaveAs DxfFold & "Temp.idw", False

Dim oSheet As Sheet
Set oSheet = oDrw.Sheets.Item(1)
W = oSheet.width: H = oSheet.Height
Set oPt = ThisApplication.TransientGeometry.CreatePoint2d(W / 2, H / 2)

strIniFile = "C:\dxfExport.ini"
If Dir(strIniFile) = "" Then MsgBox "Plik ini nie istnieje!", vbCritical: Set colSH = Nothing: Exit Sub

Dim RaportTxt As String: RaportTxt = ""
Close #1
Open DxfFold & "Raport_" & Format(Now(), "YYMMDD_hhmmss") & ".txt" For Append As #1
    
For Each sH In colSH
    
    NfPath = DxfFold & Mid(sH.ComponentDefinitions.Item(1).Document.DisplayName, 1, InStrRev(sH.ComponentDefinitions.Item(1).Document.DisplayName, "."))

    Set oView = oSheet.DrawingViews.AddBaseView(sH.ComponentDefinitions.Item(1).Document, oPt, 0.1, kDefaultViewOrientation, kHiddenLineRemovedDrawingViewStyle, , , oBaseViewOptions)
    oView.Label.FormattedText = "Grubosc = " & sH.ComponentDefinitions.Item(1).Document.ComponentDefinition.Thickness.ModelValue * 10 & "<Br/>Material = " & sH.ComponentDefinitions.Item(1).Document.ComponentDefinition.Material.name & "<Br/>Ilosc = " & sH.ItemQuantity
    If oView.ShowName = False Then oView.ShowName = True
    RaportTxt = "Grubosc = " & sH.ComponentDefinitions.Item(1).Document.ComponentDefinition.Thickness.ModelValue * 10 & " | Material = " & sH.ComponentDefinitions.Item(1).Document.ComponentDefinition.Material.name & " | Ilosc = " & sH.ItemQuantity
    '*************************************************
    If DXFAddIn.HasSaveCopyAsOptions(oDrw, oContext, oOptions) Then oOptions.Value("Export_Acad_IniFile") = strIniFile
    oDataMedium.FileName = NfPath & "dxf"
    
    DoEvents
    Call DXFAddIn.SaveCopyAs(oDrw, oContext, oOptions, oDataMedium)
    DoEvents
    '*************************************************
    
    If Not Dir(NfPath & "dxf") = "" Then
        Print #1, RaportTxt & " | OK"
    Else
        Print #1, RaportTxt & " | Blad !"
    End If
    
    oView.Delete

Next sH
    
    oDrw.Close True
    Kill DxfFold & "Temp.idw"
    Set colSH = Nothing
    Close #1
    Set oView = Nothing
    Set oSheet = Nothing
    Set oDrw = Nothing

End Sub

napisał: Harry
postów: 42


umieszczony:
6 listopada 2015
13:43

edytowany:
6 listopada 2015
13:44

  
Niestety nie moge poświecić wystarczajaca czasu żeby napisać takie makro i je przetestować. Poniżej kolejność operacja która musi byyc wykonana wraz z przykładami z helpa.

1. Pobieramy ze złożenia liste części:

Public Sub BOMExport()
    ' Set a reference to the assembly document.
    ' This assumes an assembly document is active.
    Dim oDoc As AssemblyDocument
    Set oDoc = ThisApplication.ActiveDocument

    ' Set a reference to the BOM
    Dim oBOM As BOM
    Set oBOM = oDoc.ComponentDefinition.BOM
    
    ' Set the structured view to 'all levels'
    oBOM.StructuredViewFirstLevelOnly = False

    ' Make sure that the structured view is enabled.
    oBOM.StructuredViewEnabled = True

    ' Set a reference to the "Structured" BOMView
    Dim oStructuredBOMView As BOMView
    Set oStructuredBOMView = oBOM.BOMViews.Item("Structured")
    
    ' Export the BOM view to an Excel file
    oStructuredBOMView.Export "C:\temp\BOM-StructuredAllLevels.xls", kMicrosoftExcelFormat
  
    ' Make sure that the parts only view is enabled.
    oBOM.PartsOnlyViewEnabled = True

    ' Set a reference to the "Parts Only" BOMView
    Dim oPartsOnlyBOMView As BOMView
    Set oPartsOnlyBOMView = oBOM.BOMViews.Item("Parts Only")

    ' Export the BOM view to an Excel file
    oPartsOnlyBOMView.Export "C:\temp\BOM-PartsOnly.xls", kMicrosoftExcelFormat
End Sub



2. Filtrujemy tylko blachy z rozeinięciami:
Dim BR As BOMRow
For Each BR In oPartsOnlyBOMView.BOMRows
    If BR.ComponentDefinitions.Item(1).Document.DocumentType = kPartDocumentObject Then 'tylko cześci
        If BR.ComponentDefinitions.Item(1).Document.DocumentSubType.DocumentSubTypeID = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then 'tylko blachy
            If Not BR.ComponentDefinitions.Item(1).Document.ComponentDefinition.FlatPattern Is Nothing Then 'tylko blachy z rowinieciami
                colSH.Add BR 'wpisujemy do kolekcji
            End If
        End If
    End If
Next BR



3.Tworzymy nowy rysunek
Dim oDrw As DrawingDocument
Set oDrw = ThisApplication.Documents.Add(kDrawingDocumentObject, ThisApplication.FileManager.GetTemplateFile(kDrawingDocumentObject))



4. W petli po naszej nowej kolekcji colSH dodajemy widok z rozinięciem.
Public Sub AddFlatPatternDrawingView()
    ' Set a reference to the drawing document.
    ' This assumes a drawing document is active.
    Dim oDrawDoc As DrawingDocument
    Set oDrawDoc = ThisApplication.ActiveDocument

    'Set a reference to the active sheet.
    Dim oSheet As Sheet
    Set oSheet = oDrawDoc.ActiveSheet

    ' Create a new NameValueMap object
    Dim oBaseViewOptions As NameValueMap
    Set oBaseViewOptions = ThisApplication.TransientObjects.CreateNameValueMap

    ' Set the options to use when creating the base view.
    Call oBaseViewOptions.Add("SheetMetalFoldedModel", False)

    ' Open the sheet metal document invisibly
    Dim oModel As Document
    Set oModel = ThisApplication.Documents.Open("C:\temp\SheetMetal.ipt", False)

    ' Create the placement point object.
    Dim oPoint As Point2d
    Set oPoint = ThisApplication.TransientGeometry.CreatePoint2d(25, 25)

    ' Create a base view.
    Dim oBaseView As DrawingView
    Set oBaseView = oSheet.DrawingViews.AddBaseView(oModel, oPoint, 1, _
    kDefaultViewOrientation, kHiddenLineRemovedDrawingViewStyle, _
    , , oBaseViewOptions)
End Sub



ustawiamy etykiete widoku: (sh - element kolekcji, Dim sH As BOMRow)

oView.Label.FormattedText = "Grubosc = " & sH.ComponentDefinitions.Item(1).Document.ComponentDefinition.Thickness.ModelValue * 10 & "<Br/>Material = " & sH.ComponentDefinitions.Item(1).Document.ComponentDefinition.Material.name & "<Br/>Ilosc = " & sH.ItemQuantity



wyswieltlamy etykiete widoku
If oView.ShowName = False Then oView.ShowName = True



5. W tej samej petli robimy export do dxf:
Public Sub PublishDXF()
    ' Get the DXF translator Add-In.
    Dim DXFAddIn As TranslatorAddIn
    Set DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")

    'Set a reference to the active document (the document to be published).
    Dim oDocument As Document
    Set oDocument = ThisApplication.ActiveDocument

    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    oContext.Type = kFileBrowseIOMechanism

    ' Create a NameValueMap object
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

    ' Create a DataMedium object
    Dim oDataMedium As DataMedium
    Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

    ' Check whether the translator has 'SaveCopyAs' options
    If DXFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then
        Dim strIniFile As String
        strIniFile = "C:\tempDXFOut.ini"

        ' Create the name-value that specifies the ini file to use.
        oOptions.Value("Export_Acad_IniFile") = strIniFile
    End If

    'Set the destination file name
    oDataMedium.FileName = "c:\tempdxfout.dxf"

    'Publish document.
    Call DXFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)
End Sub



6. Zapis raportu do pliku można zrobic tak:
Sub WriteTextToFile(ByVal FileName As String, tekst As String)

'If dIr(FileName) = "" Then Exit Sub
Close #1
Open FileName For Append As #1
    Print #1, tekst
Close #1

End Sub




Opis do wszystkich przkładów znajdziesz w helpie do VBA INVENTORA

jak bedziesz miał jakies pytania to pisz.
napisał: Arcess
postów: 9


umieszczony:
5 listopada 2015
07:03

  
Dxf`y nie muszą być w jednym pliku. Każdy element oddzielnie.
napisał: Harry
postów: 42


umieszczony:
4 listopada 2015
16:24

edytowany:
4 listopada 2015
16:25

  
Da sie zrobic takie makro, nie wiem tylko kiedy bede mógł to napisać. Makro bedzie się składac z kilku wiekszych części.

Jeżeli wszystkie rozwinięcia mają być na jednym rysunku to jeszcze bedzie trzeba napisać makro które to poukłada. Kiedyś już coś takiego pisałem musze poszukać.
napisał: admin
postów: 613


umieszczony:
2 listopada 2015
18:31

  
Cytat:
Plik dxf załączam do postu.

Dxf zawsze wygląda tak samo. Zawiera kontur elementu do wycięcia oraz opis w postaci:
Ilość
Materiał
Grubość

Dxf musi zostać nazwany tak samo jak plik macierzysty inventora z którego był generowany płaski wzór. Ważne jest też, aby dxf był generowany z płaskiego wzoru a nie za pomocą eksportu powierzchni.


Witam,

Właśnie dopiero teraz doczytałem, że chodzi o makro do Inventora.
Ja robiłem makra tego typu dla AutoCADa. Harry, może ty?

pozdrawiam
admin
napisał: Arcess
postów: 9


umieszczony:
2 listopada 2015
06:54

  
nazwa pliku rozmiar
1936-0001.dxf 341.03 kB

Plik dxf załączam do postu.

Dxf zawsze wygląda tak samo. Zawiera kontur elementu do wycięcia oraz opis w postaci:
Ilość
Materiał
Grubość

Dxf musi zostać nazwany tak samo jak plik macierzysty inventora z którego był generowany płaski wzór. Ważne jest też, aby dxf był generowany z płaskiego wzoru a nie za pomocą eksportu powierzchni.
napisał: admin
postów: 613


umieszczony:
31 października 2015
20:12

  
Cytat:
Witam,
Szukałem ale nic takiego nie znalazłem.

Chciałbym zautomatyzować wykonywanie dxf na laser.
Póki co wygląda to tak, że każdy element otwieram i generuje dxf z płaskiego wzoru. Potem otwieram każdy dxf z osobna i wpisuje komentarz pod kształtem w postaci:
Ilość:
Materiał:
Grubość:
Czy jest możliwość wykonywania tego makrem? Musiałoby ono być odpalane w głównym złożeniu. Wtedy analizuje ile jest plików z płaskim wzorem. Wyrzuca dxf, wykonuje komentarz zaciągając parametr Grubość i materiał z iProperties no i wstawia wcześniej analizowaną ilość wystąpień.

Dodatkowo fajnie by było gdyby wyrzucił raport gdzie umieści Nr części, Ilość wystąpień, materiał i grubość.


Witam,

Żaden problem.
Napisałem wiele makr tego rodzaju.
Ale potrzeba mi więcej konkretów, przykładowy plik dxf.
Czy pliki dxf wyglądają tak samo?

pozdrawiam
Admin
napisał: Arcess
postów: 9


umieszczony:
31 października 2015
09:07

edytowany:
31 października 2015
09:27

  
Witam,
Szukałem ale nic takiego nie znalazłem.

Chciałbym zautomatyzować wykonywanie dxf na laser.
Póki co wygląda to tak, że każdy element otwieram i generuje dxf z płaskiego wzoru. Potem otwieram każdy dxf z osobna i wpisuje komentarz pod kształtem w postaci:
Ilość:
Materiał:
Grubość:
Czy jest możliwość wykonywania tego makrem? Musiałoby ono być odpalane w głównym złożeniu. Wtedy analizuje ile jest plików z płaskim wzorem. Wyrzuca dxf, wykonuje komentarz zaciągając parametr Grubość i materiał z iProperties no i wstawia wcześniej analizowaną ilość wystąpień.

Dodatkowo fajnie by było gdyby wyrzucił raport gdzie umieści Nr części, Ilość wystąpień, materiał i grubość.


<-wstecz  1  dalej->
wszystkich stron: 1


Sortuj posty: z