"Save Copy As" W moim przypadku - PDF (iLogic) + K


Autor tematu
Zenobah
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 2
Rejestracja: 14 maja 2014, 18:29
Lokalizacja: Litwini wracają

"Save Copy As" W moim przypadku - PDF (iLogic) + K

#1

Post napisał: Zenobah » 14 maja 2014, 19:04

Przede wszystkim: Witaj społeczności!

Wstęp:
Od 3ch miesięcy w pracy korzystam z Inventora - tworze dokumentacje wcześniej samodzielnie zamodelowanych mniej lub bardziej skomplikowanych projektów.
Jestem inventoro-nowicjuszem i jak to bywa próbuje ułatwić sobie życie różnymi możliwościami jakie oferuje nowa zabawka.

Problem:
Stworzyłem, albo raczej wykorzystałem znaleziony w necie kod, do stworzenia Reguły która używa opcji "Save Copy As" i publikuje otwarty rysunek w formacie PDF z zadynymi właściwościami

'------start of iLogic-------
oPath = ThisDoc.Path
oFileName = ThisDoc.FileName(False) 'without extension
oRevNum = iProperties.Value("Project", "Revision Number")
oPDFAddIn = ThisApplication.ApplicationAddIns.ItemById _
("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
oDocument = ThisApplication.ActiveDocument
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

If oPDFAddIn.HasSaveCopyAsOptions(oDataMedium, oContext, oOptions) Then
oOptions.Value("All_Color_AS_Black") = 0
oOptions.Value("Remove_Line_Weights") = 1
oOptions.Value("Vector_Resolution") = 600
oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
'oOptions.Value("Custom_Begin_Sheet") = 2
'oOptions.Value("Custom_End_Sheet") = 4
End If

'get PDF target folder path
oFolder = Left(oPath, InStrRev(oPath, "\PDF")) & "PDF"


'Check for the PDF folder and create it if it does not exist
If Not System.IO.Directory.Exists(oFolder) Then
System.IO.Directory.CreateDirectory(oFolder)
End If

'Set the PDF target file name
oDataMedium.FileName = oFolder & "\" & oFileName & _
"" & oRevNum & ".pdf"

'Publish document
oPDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)

trigger = iTrigger0

'------end of iLogic-------

Dodałem tylko końcówke - wyzwalanie reguły, pozmieniałem opcje PDFu i w miejscu:
oFolder = Left(oPath, InStrRev(oPath, "\PDF")) & "PDF"
Dopisałem \PDF

Teraz tak - Reguła działa fajnie... Ale.
Nie łapie kompletnie lokalizacji pliku - zamiast zapisywać się w lokalizacji Rysunku (z którego jest publikowany PDF) w podfolderze /PDF, to bydle zapisuje mi się tam gdzie ostatnio zapisywany był plik (jakikolwiek z którym pracowałem wcześniej), przy pomocy komendy "Save Copy As".
Kompletnie sobie z tym nie radze.
Niech już nawet zapisuje się dokładnie w tym samym miejscu, albo zawsze w jednym, ale nie tak! Dochodzi do sytuacji w których więcej czasu spędzam na szukaniu zagubionych pdf'ów niż faktycznie działam -,-'
Czy ktoś może rzucić jakimś pomysłem, albo fragmentem kodu który pobierał by lokalizację otwartego rysunku, i zapisywał by publikowany PDF w tym samym folderze?

Pytania (skoro już się produkuje nad wątkiem):
1. Nie mogę wygrzebać z Edytora Stylów ustawień odpowiadających za grubość linii na rysunku (chcę zwęzić linie modelu) - gdzie tego szukać?
2. Czy istnieje możliwość zmiany koloru szkicu w modelu? (kolor ich wyświetlania - kolor szkicu zdefiniowanego/niezdefiniowanego/linii geometrii rzutowanej etc) - przyzwyczaiłem się do innych i.... tyle - chciałbym je zmienić.
3. Czy możliwe jest przypisania bindu (konkretnego klawisza), do konkretnej reguły? Póki co korzystam z zbindowanego iTriggera i nim wywołuje najczęściej używaną Regule - resztę uruchamiam ręcznie


Serdecznie dziękuje za poświęcony czas i ewentualną pomoc!
Krystian




PIBAL
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 2
Posty: 11
Rejestracja: 14 maja 2014, 10:42
Lokalizacja: Bytom / Warszawa

#2

Post napisał: PIBAL » 16 maja 2014, 09:23

1. Odpuść sobie pisanie kodu do generowania plików exportowanych w sklepie http://apps.exchange.autodesk.com/pl znajdziesz masę rewelacyjnych, dopracowanych wtyczek.
2. Jeśli już musisz tu masz kod:

AD1 - nie ma globalnej zmiany grubvosci lini - musisz zmieniac w edytorze stylow kazda kolejno grubosc linii modelu to (visible, albo "widoczne" z tego co pamietam)
AD2 tak - również edytor styli - warstwy
AD3 Oczywiście, ale z poziomu głównego projektu VBA






'------start of iLogic-------
oPath = ThisDoc.Path
oFileName = ThisDoc.FileName(False) 'without extension
oPDFAddIn = ThisApplication.ApplicationAddIns.ItemById _
("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
oDocument = ThisApplication.ActiveDocument
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

'Define the drawing
Dim oDrawing As DrawingDocument
oDrawing = ThisDoc.Document

Dim oSheet As Sheet
Dim lPos As Long
Dim rPos As Long
Dim sLen As Long
Dim sSheetName As String
Dim iSheetNumber As Integer

'step through each drawing sheet
For Each oSheet In oDrawing.Sheets

'find the seperator in the sheet name:number
lPos = InStr(oSheet.Name, ":")
'find the number of characters in the sheet name
sLen = Len(oSheet.Name)
'find the sheet name
sSheetName = Left(oSheet.Name, lPos -1)
'find the sheet number
iSheetNumber = Right(oSheet.Name, sLen -lPos)

'set PDF Options
If oPDFAddIn.HasSaveCopyAsOptions(oDataMedium, oContext, oOptions) Then
oOptions.Value("All_Color_AS_Black") = 1
oOptions.Value("Remove_Line_Weights") = 1
oOptions.Value("Vector_Resolution") = 400
oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintSheetRange
oOptions.Value("Custom_Begin_Sheet") = iSheetNumber
oOptions.Value("Custom_End_Sheet") = iSheetNumber
End If

'get PDF target folder path
oFolder = "O:\"
'MsgBox(oFolder)

'Check for the PDF folder and create it if it does not exist
If Not System.IO.Directory.Exists(oFolder) Then
System.IO.Directory.CreateDirectory(oFolder)
End If


'Set the PDF target file name
oDataMedium.FileName = oFolder & "\" & oFileName & ".pdf"

' oDataMedium.FileName = oFolder & "\" & oFileName & " " & sSheetName & " " & iSheetNumber & ".pdf"

'Publish document
oPDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)

Next
'------end of iLogic-------


Autor tematu
Zenobah
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 2
Rejestracja: 14 maja 2014, 18:29
Lokalizacja: Litwini wracają

#3

Post napisał: Zenobah » 17 maja 2014, 12:55

Dzięki PIBAL. Niestety twój kod nie działa - albo inaczej - działa w określonych warunkach gdy akurat dostępna jest lokalizacja "O:/".
Rozumiem, że chciałeś pokazać, że można stworzyć kod który na sztywno zapisuje plik w określonej przez nas lokalizacji. Trochę nie o to chodziło.

ROZWIĄZANIE:

Okazało się proste:
Należy zastąpić ścieżkę
oFolder = Left(oPath, InStrRev(oPath, "\")) & "PDF"
Prostym
oFolder = ThisDoc.Path & "/PDF"
Pobiera ścieżkę pliku który mamy otwarty i zapisuje w tej samej lokalizacji nasz .pdf, w stworzonym folderze "PDF"
Jednak reguła musi być zapisana na szablonie, a nie globalnie ;/
Z tym jeszcze nie potrafię sobie poradzić. A problem pojawia się wtedy gdy muszę zmienić starą - istniejącą dokumentacje, w której szablonie reguła jeszcze nie istniała.

Za link do sklepu dziękuje. Znalazłem nawet bezpłatną app'kę która rozwiąże problem całkowicie - będę musiał jednak zorganizować ID od "instancji wyższej" aby się zalogować do serwisu :)

A z tej reguły jednak nie zrezygnuje - liczę na to, że pomoże mi lepiej zrozumieć iLogic.

Pozdrawiam,
Krystian


PIBAL
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 2
Posty: 11
Rejestracja: 14 maja 2014, 10:42
Lokalizacja: Bytom / Warszawa

#4

Post napisał: PIBAL » 19 maja 2014, 08:10

Wysyłając kod liczyłem na szczątkową znajomość VBA ;) dlatego nie tłumaczyłem.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Autodesk Software (Autocad, Inventor etc) ”