Zobrazit plnou verzi příspěvku: VBA pre Inventor

mimo0912
17.01.2013, 20:44
Pozdravujem,začal som šprtať trochu do VBA.Na začiatok som chcel získať parameter, trochu to upraviť pod VBA a vrátiť späť upravený.Prikladám kód, ktorý hlási chybu pri príkaze Set ... .Mám veľmi málo skúsenosti z VBA pre Inv a tento kód som našiel v odbornom článku.Prikladám tiež dialóg References.Ďakujem.

Vladimír Michl
17.01.2013, 21:17

Máte tam překlep: ActiveDcoument --> ActiveDocument

mimo0912
18.01.2013, 22:07
Áno bola to chyba, no nevšimol som si. Skopíroval som to, nepozornosť.Takže som pokročil a ak zadám:oParam2 = ThisApplication.ActiveDocument.ComponentDefinition.Parameters.Item("d0").Valuenačíta sa mi do premennej hodnota 0,6 pritom skutočná hodnota je 6.Napr. parameter s hodnotou 1000 načíta do premennej 100.Je to u všetkých parametroch ktoré sú v mm, t. j. 10x menšie číslo.Ak je parameter v cm potom je to OK.Ak je parameter v metroch potom do premennej načíta 100x väčšie číslo.Je to vlastnosť? Robím chybu ja? Je to v nejakom nastavení? Prosím o radu. Ďakujem.

Vladimír Michl
18.01.2013, 22:18

To je v pořádku, rozměrové parametry jsou v API implicitně vyjádřeny v [cm].
 Možná ještě pro doplnění - pokud potřebujete rozměr v aktuálních jednotkách dokumentu, můžete použít např.:[CODE]oJednotky = oDoc.UnitsOfMeasure[/CODE]pak funkce[CODE]GetStringFromValue(Value As Double, UnitsSpecifier) As String [/CODE]vrátí přepočtený řetězec rozměru včetně jednotek (přičemž UnitsSpecifier jde zadat buď jako řetězec - např. "in" nebo jao oJednotky)Vladimír Michl2013-01-19 10:56:38

mimo0912
20.01.2013, 16:53
Robím v strojárstve a tam je to takmer vždy v [mm], preto by som skôr používal:Dim oPartDoc As Inventor.PartDocumentSet oPartDoc = ThisApplication.ActiveDocumentDim oParams As ParametersSet oParams = moPartDoc.ComponentDefinition.ParametersoParams("Dlzka").Expression = 800Samozrejme, že parameter už existuje a sú zname dlžkové jednotky.-------------Ešte mám dve otázky:1) Mám otvorenú zostavu (aktívna). Je možnosť cez VBA upraviť ľubovoľný parameter niektoreho z partov danej zostavy bez jeho aktivácie?2) Mám otvorený part (aktívny), ktorý je vytvorený ako odvodená súčasť. Je možné zmeniť parameter v základnej komponente, zktorej je aktívny part vytvorený?Za odpoveď vopred ďakujem

Navara
21.01.2013, 09:19

Jenom pro upřesnění. Pozor na rozdíl mezi (String) Parameter.Expression a (Double) Parameter.ValueCo se týká úpravy parametru v dílu použitého v sestavě, tak tam záleží na tom, zda je načtený v paměti. To souvisí s úrovní detailu. Pokud je soubor načtený v paměti, je možné ho upravovat, ale je potřeba si ohlídat aktulizaci.U odvozených součástí je to podobně, ale tady si nejsem jistý, kdy základní komponentu načítá do paměti a s aktualizací to taky bude asi o něco pracnější. Al eobecně jsou oba požadavky proveditelné.

mimo0912
29.01.2013, 21:27
Skúsil som meniť parameter v parte, ktorý je súčasťou otvorenej zostavy. Funguje to, pri aktualizácii a zmena sa prejavila aj v zostave. Funguje to aj pri odvodenej súčasti.Teraz som narazil na ďalší nedostatok vedomosti.Potreboval by som cez VBA s otvorením dokumentu otvoriť dialóg hlásením o nemožnosti upravovať tento dokument. Kliknutím na OK zatvorí sa tento dokument. Niečo také ako "Spúšťač udalosti" v iLogic-u. Nerád by som išiel cez iLogic, ale nevylučujem tú možnosť. Ďakujem.

flesar
29.01.2013, 21:51
Pro automatické spouštění maker jsou určené předdefinované názvy maker, např. AutoOpen, AutoNew, AutoClose ...V makru už si vytvoříte vlastní dialog a ošetříte si uzavření dokumentu.

Navara
30.01.2013, 08:56
Potíž s těmito automatickými makry je v tom, že musí být obsaženy v dokumentu a ne v projektu aplikace splečné pro všechny dokumenty. Ve VBA je tato úloha velmi komplikovaně řešitelná. V tomto případě je mnohem jednodušší celé to napsatat jako AddIn, který se sám spouští při startu a dokáže pracovat s mnohem širší paletou takzvaných událostí (např. otevření a uložení  dokumentu, atd.)

mimo0912
12.02.2013, 15:48
To by mi nevadilo, skôr to vyhovuje. Ale problém je v tom, že potrebujem pri otváraní partu zakázať jeho otvorenie s upozornrním napr. cez MsgBox, ale pri otvorení zostavy to musí fungovať bez akýchkoľvek upozornrní. V prípade ak je otvorená zostava a edituje sa daný part, opäť by to malo byť uživateľsky znemožnené.Pozn. Tak ako som pri otvorení tejto témy uviedol, že začínam šprtať do VBA, tak ako to písať cez AddIn ......?!?!

Navara
12.02.2013, 16:41

Tohle opravdu není úloha pro začátečníka.V podstatě se na to musí jít tak, že vytvoříte nějaký mechanizmus rozpoznávání, zda je otevíraný dokument možno editovat. Tento mechanizmus musí být nezávislý na tom, jak a kdo dokument otevírá. Například se to dá vyřešit uživatelskou iVlastností.Druhá část je samotné rozhodování o tom, zda se otevření nebo aktivace povolí či nikoli. K tomu slouží v Inventoru takzvané události. Pro náš případ přichází v úvahu dvě: ApplicationEvents.OnActivateDocument ApplicationEvents.OnOpenDocument Během těchto událostí se bude kontrolovat 1) v jakém kontextu dochází o otevření/aktivaci souboru. Zda se jedná o samostatné otevření, nebo o otevření v kontextu jiného souboru.2) Zda se jedná o zakázaný dokument. Pokud ano, je potřeba danou akci přerušit, nebo vrátit zpět. Podrobnosti k popisovaným událostem najdete v dokumentaci k API Inventoru

mimo0912
12.02.2013, 17:22
OK, skúsim sa posunúť o krok vpred.