Vítejte !   Přihlášení | Registrace
Hlavní menu
CATIA fórum.cz
Novinky
Seriál CATIA
Obecně o CAD
Novinky ze světa DS
Makra pro CATIA V5
Diskuse
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Přeukládání drawing

UživatelPříspěvek
petan86

Poslat zprávu | Profil
Datum: 24.9. 2015 | Zobrazeno: 10832x
Konfigurace CATIA: R24 SP04, MD2

Text dotazu:
Dobrý den, přemyšlím nad makrem, které by přeukládalo větší množství výkresu.

Staré a nove názvy bych měl zapsané v excelu nebo textovém dokumentu.

Je to možné nebo je to blbost?

Děkuji

Andrej Verný

Poslat zprávu | Profil
[#5366] | Publikováno: 24.09. 2015 - 20:14
Ja by som v tom problém nevidel. Podľa mna je to možné aj z TXT ako aj Excel súboru. Osobne by som preferoval asi excel súbor :). (plusom je práca s bunkami )

petan86

Poslat zprávu | Profil
[#5367] | Publikováno: 24.09. 2015 - 20:39
No a teď jak to naprogramovat ...
Andrej Verný

Poslat zprávu | Profil
[#5368] | Publikováno: 24.09. 2015 - 20:53
Alt+F11 v CATII a ide sa :D. Alebo pokiaľ nie sú znalosti VBA , tak odporúčam youtube štúdium a tým pádom je poriešený aj Excel. Potom už len doštudovať Ojekty Catie , kde by som doporúčal si dokúpiť aj literatúru, ktorá urýchly ten proces. A už len skúšať a čítať fóra (EN / DE) a raz to pôjde.
Andrej Verný

Poslat zprávu | Profil
[#5369] | Publikováno: 24.09. 2015 - 20:57
Alebo varianta dva - nechať si to niekym známim napísať.
Andrej Verný

Poslat zprávu | Profil
[#5370] | Publikováno: 24.09. 2015 - 21:14
známym... Ospravedlňujem sa za chyby. Ale nevidím tu možnosť opraviť po sebe text po publikovaní.
petan86

Poslat zprávu | Profil
[#5371] | Publikováno: 24.09. 2015 - 21:30
Když teď nebudu řešit načítání dat z excelu a měl bych v jedné proměnné uložený název starého výkresu a v druhé proměnné název nového výkresu, tak jak postupovat dál??

Zkoušel jsem použít záznam makra v Catii a vyšlo mě tohle:

Sub CATMain()


Dim drawingDocument1 As DrawingDocument
Set drawingDocument1 = CATIA.ActiveDocument

drawingDocument1.SaveAs "C:\new\Pokus.CATDrawing"

End Sub
Andrej Verný

Poslat zprávu | Profil
[#5372] | Publikováno: 24.09. 2015 - 21:44
treba googliť a niečo si z toho zobrať.
https://v5vb.wordpress.com/2010/02/08/file-dialogs/
Ing Jan Cinert

Poslat zprávu | Profil
[#5373] | Publikováno: 24.09. 2015 - 22:45
V principu by to mohlo vypadat nějak takhle...

Sub CATMain()

' nacteni starych a novych nazvu z text souboru nebo excelu Do pole OldNames a NewNames
' to si nekde najdete ...

Set oDocs = CATIA.Documents

For i = 0 To UBound(OlNames)
' otevreni puvodniho vykresu
If CATIA.FileSystem.FileExist("cesta ke starym souborum"\OldNames(i)) Then
' otevreni souboru
Set oDoc = oDocs.Open("cesta ke starym souborum"\OldNames(i))
' preulozeni souboru
oDoc.SaveAs("cesta k novym souborum"\NewNames(i))
End If
End Sub



petan86

Poslat zprávu | Profil
[#5374] | Publikováno: 25.09. 2015 - 19:01
Dobrý den,

Děkuji, tohle mi velice pomůže. Akorád si nevím rady s příkazem:
If CATIA.FileSystem.FileExist("cesta ke starym souborum"\OldNames(i)) Then

Chápu, že má určit jestli zadaný soubor je uložený na zadané cestě. Pokud, ale zadám přímo:
If CATIA.FileSystem("C:\pokus\Deska.CATDrawing") Then


Tak mi na zadaném řádku pořád vyskakuje chyba. Nevim si s tím rady.

Ing Jan Cinert

Poslat zprávu | Profil
[#5375] | Publikováno: 26.09. 2015 - 10:09
To bude tím, že to má být ...FileExists, s "s" na konci. Je to běžná funkce ve všech jazycích. Mě to "s" vypadlo, většinou tyhle kusy kódu píšu z hlavy.

Pokud byste psal v nějakém vývojovém prostředí, tak vás to samo upozorní na chybu, ale editor v Catii je otřesný.
petan86

Poslat zprávu | Profil
[#5376] | Publikováno: 26.09. 2015 - 10:50
Dobrý den, super už mě to funguje. Děkuji moc.

Ještě se zeptám. Když mám v Catii otevřený produt.CATProduct a více Drawingu např. Deska.CATDrawing a Svarenec.CATDrawing, tak jak pomocí makra aktivuju nebo vyberu Drawing?
Napřiklad abych měl aktivní Deska.CATDrawing a mohl použí příkaz.
oDoc.SaveAs("cesta k novym souborum"\NewNames(i))

Jde me o to, že výkresy, které chci přeuloži už budu mít otevřené, tak abych je nemusel znovu otevírat. Příkazem:
Set oDoc = oDocs.Open("cesta ke starym souborum"\OldNames(i))

Prostě nevim jak se na daný soubor jinak odkázat.



petan86

Poslat zprávu | Profil
[#5378] | Publikováno: 26.09. 2015 - 18:38
Dobrý den, ještě mám jednu otázku.

Jak lze přepnout z aktivního prostředí assembly do Drawing pomocí makra?

Děkuji

Ing Jan Cinert

Poslat zprávu | Profil
[#5379] | Publikováno: 27.09. 2015 - 10:24
Všechny otevřené soubory jsou dostupné v kolekci Documents, tedy:
Set oDocs = CATIA.Documents

K jednotlivým souborům v kolekci se pak dostanete přes jejich index, tj.
Set oDrwDoc = oDocs.Item("Vykres.CATDrawing")

a když už máte instanci dokumentu, lze ji jednoduše aktivovat
oDrwDoc.Activate() 
petan86

Poslat zprávu | Profil
[#5386] | Publikováno: 30.09. 2015 - 20:25
Dobrý den, trochu jsem postoupil, ale zasekl jsem se..

Option Explicit

Private renameDict As Dictionary
Dim DestinationFolder As String

Public Sub CATMain()
Dim excelApp As Excel.Application
Dim wb As Workbook
Dim MyDocuments As Documents
Dim MyDocument As Document
Dim i As Integer
Dim newName As String
Dim aFileName As String

'vybrání excel souboru
aFileName = Trim(CATIA.FileSelectionBox("Select Excel-file...", "*.xls*", CatFileSelectionModeOpen))
If aFileName = "" Then Exit Sub
'vybrání cílového adresaře
If Not selectFolder(DestinationFolder) Then Exit Sub

'zde bude skript pro nacitání dat z excelu Do promenne renameDict

Set MyDocuments = CATIA.Documents
'prochazeni dokumentu a ukladani Do nove slozky
For i = 1 To MyDocuments.Count
Set MyDocument = MyDocuments.Item(i)
MyDocument.Activate
If CATIA.FileSystem.FileExist(MyDocuments.Item(i).path & "\" & MyDocument.Name) Then
newName = renameDict(MyDocuments.Item(i).Name)
MyDocuments.Item(i).SaveAs (DestinationFolder & "\" & newName)
End If
Next i
End Sub
petan86

Poslat zprávu | Profil
[#5387] | Publikováno: 30.09. 2015 - 20:37
Chybu má v poslední části, kde se snažim přejmenovat soubory. Chci tím ověřit jestli soubor na disku opravdu existuje než ho začnu kopírovat.
 If CATIA.FileSystem.FileExist(MyDocuments.Item(i).path & "\" & MyDocument.Name) Then

petan86

Poslat zprávu | Profil
[#5388] | Publikováno: 30.09. 2015 - 20:47
Tak už vím kde je chyba. Špatný název příkazu. FileExists. Chybělo mě tam zase "s"

If CATIA.FileSystem.FileExists(MyDocuments.Item(i).path & "\" & MyDocument.Name) Then
petan86

Poslat zprávu | Profil
[#5389] | Publikováno: 30.09. 2015 - 21:44
Ještě bych měl jednu otázku, když spustím makro a začnou se mi ukládat jednotlivé díly a produkty, tak mě ukaždého dílu vyskakuje hlážka že mám použít save manager.. Jde pomocí makra tato hláška potvrdit abych nemusel u každého souboru mačkat OK????

Nebo jde to vyřešit nějak lépe???

Makro jsem ještě upravil, že se nejdříve uloží party, pak produkty a naposledy výkresy.. Ukladají se od posledního k prvnímu.

Děkuji za každou radu.

Přiložené obrázky:

Ing Jan Cinert

Poslat zprávu | Profil
[#5390] | Publikováno: 30.09. 2015 - 23:26
Tyhle souborové hlášky se dají vypnout, jinak by (v některých případech) způsobily pád makra. Pokud přistupujete ke CATIA zvenčí (.NET), makro nepředpokládá tuto hlášku, která je kolikrát na pozadí a čeká na potvrzení. Někdy ani nečeká a rovnou to skončí na výjimce.

Je to přepínač CATIA.DisplayFileAlerts = False - ale na konci makra je dobré to zase zapnout, jinak se vám to může vymstít.
Petr

Poslat zprávu | Profil
[#5455] | Publikováno: 08.11. 2015 - 09:28
Dobrý den,

Jde pomocí makra zjistit jméno souboru na které se linkuje výkres?

Děkuji
Andrej Verný

Poslat zprávu | Profil
[#5457] | Publikováno: 09.11. 2015 - 08:39
Ano , ide to cez metódu "DrawingViewGenerativeBehavior".
Ing Jan Cinert

Poslat zprávu | Profil
[#5459] | Publikováno: 09.11. 2015 - 09:00
Přesně tak, je to vlastnost každého pohledu - výkres může mít více linků.

Celá kontextová cesta k vlastnosti je (v případě výkresu):

CATIA.ActiveDocument.DrawingRoot.Sheets.Item(i).Views.Item(i).GenerativeBehavior.Document

Tohle vrátí link konkrétního pohledu - objekt typu Document (může být typu CATPart nebo CATProduct, popř. i jiný) a z něj už si pak vyčtete název - vlastnost Name. Vždy se vrací vrcholový objekt struktury, tj. i když je pohled linkovaný na instanci v sestavě, vrací to celou sestavu.

Pak je ještě metoda pro zjištění jednotlivých linků, ale ta funguje ne úplne ideálně a musí se správně ošetřit. (Vlastnost GenerativeLinks a její metody FirstLink a NextLink)
Andrej Verný

Poslat zprávu | Profil
[#5460] | Publikováno: 09.11. 2015 - 09:34
Dík za upresnenie. Na generativeLinks som zabudol :))
Petr

Poslat zprávu | Profil
[#5462] | Publikováno: 11.11. 2015 - 21:26
Děkuji, tohle mi pomůže
Petr

Poslat zprávu | Profil
[#5466] | Publikováno: 15.11. 2015 - 10:56
Dobrý den,
v macru se odkazuji na excel soubor, který chci otevřit a zapsat do něj data.

Set wb = myExcel.Workbooks.Open(Filename:=fName, ReadOnly:=False)

Do FName, ale musím napsat celou cestu k souboru.

Jde nějak jednoduše zadat pouze relativní relativní cestu, když mám excel soubor uložený u macra????

Děkuji
Ing Jan Cinert

Poslat zprávu | Profil
[#5467] | Publikováno: 15.11. 2015 - 20:08
Dobrý den,

zkuste nastavit pracovní adresář při spuštění makra. Jde to udělat přes WScript.

Set oShell = CreateObject("WScript.Shell")

oShell.CurrentDirectory = "cesta k souboru s makrem"


Pak by mohla relativní cesta zafungovat.

Já to používám u .NET maker, která si načítají různé konfigurace ze souborů a po až po spuštění. Soubory jsou v root složkách u spustitelného souboru. Skript nejdřív nastaví pracovní adresář a já si ho pak můžu snadno zjistit jako proměnnou a zbytek cesty mi stačí relativně.

Petr

Poslat zprávu | Profil
[#5468] | Publikováno: 16.11. 2015 - 20:22
Dobrý den, tohle mi nefunguje. Programuji ve vba, které je v catii. Je ještě nějaká možnost, jak to vyřešit?
Ing Jan Cinert

Poslat zprávu | Profil
[#5469] | Publikováno: 17.11. 2015 - 00:01
Ale tohle funguje v catii. Je to součástí CATScriptu, který spouští .NET makra. V integrovaném VBA by mělo fungovat stejně. Resp. i VBA makro se dá spustit pomocí CATScriptu, který nastavení pracovního adresáře může zajistit.

Nechci to tvrdit, ale myslím si, že pokud v makru použijete relativní cestu, vždy se bude vázat právě k aktuálně nastavenému pracovnímu adresáři. Takže buď tento nastavíte podle toho jak potřebujete, nebo prostě máte smůlu.

Musela by existovat nějaká funkce ve VBA, která by vracela, odkud je skript spuštěný - já o ní nevím.

Pořád si myslím, že by vám to co jsem popsal v předchozím příspěvku mohlo pomoct.

Navíc makro máte někde uložené, abyste ho mohl spouštět. Co vám brání v tom, abyste cestu zadal absolutně?

Andrej Verný

Poslat zprávu | Profil
[#5470] | Publikováno: 17.11. 2015 - 07:03
Cesta odkiaľ sa spúšťa makro sa dá nájsť takto :

Sub Catmain()
MsgBox NAJDICESTU
End Sub

Function NAJDICESTU()
Dim apc
Set apc = CreateObject("MSAPC.Apc")
Dim oCesta, oAdresar As String

oCesta = apc.vbE.ActiveVBProject.FileName
oAdresar = Left(oCesta, InStrRev(oCesta, "\") - 1)
NAJDICESTU = oAdresar

End Function
Ing Jan Cinert

Poslat zprávu | Profil
[#5471] | Publikováno: 17.11. 2015 - 12:04
Tak přece...

Zkoušel jsem hledat něco o objektu MSAPC.Apc, na zahraničích fórech je toho plno (COE,...). Určitě to spoustě lidem pomůže.

Já to od přechodu na .NET neřeším, ale přiznám se, že jsem o tomhle neměl ani tušení.

Díky za dobrý tip.
Petr

Poslat zprávu | Profil
[#5472] | Publikováno: 17.11. 2015 - 18:10
Dobrý den, děkuji funguje to výborně.
Andrej Verný

Poslat zprávu | Profil
[#5473] | Publikováno: 17.11. 2015 - 20:16
Som veľmi rád,že som trošku pomohol.


Uživatel nepřihlášen

Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.