Vytisknout stránku | Zavřít okno

VBA pre Inventor

Vytištěno z: CAD Fórum
Kategorie: Autodesk - stavebnictví, strojírenství, CAD/GIS
Název fóra: CAD programování
Popis fóra: Otázky programování - nadstavby a utility pro CAD a GIS aplikace Autodesk (VBA, AutoLISP, ARX/C++, .Net, JavaScript, Python, MEL...)
URL: https://www.cadforum.cz/forum/forum_posts.asp?TID=16485
Datum vytištění: 13.kvě.2026 v 22:21


Téma: VBA pre Inventor
Odeslal: mimo0912
Předmět: VBA pre Inventor
Datum odeslání: 17.led.2013 v 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.



Odpovědi:
Odeslal: Vladimír Michl
Datum odeslání: 17.led.2013 v 21:17
Máte tam překlep: ActiveDcoument --> ActiveDocument

-------------
Vladimír Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: mimo0912
Datum odeslání: 18.led.2013 v 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").Value
načí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.




Odeslal: Vladimír Michl
Datum odeslání: 18.led.2013 v 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ř.:
oJednotky = oDoc.UnitsOfMeasure
pak funkce
GetStringFromValue(Value As Double, UnitsSpecifier) As String
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 Michl (moderátor)
ARKANCE CZ - https://arkance.world - arkance.world
(podpora viz helpdesk.arkance-systems.cz)


Odeslal: mimo0912
Datum odeslání: 20.led.2013 v 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.PartDocument
Set oPartDoc = ThisApplication.ActiveDocument

Dim oParams As Parameters
Set oParams = moPartDoc.ComponentDefinition.Parameters

oParams("Dlzka").Expression = 800

Samozrejme, ž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


Odeslal: Navara
Datum odeslání: 21.led.2013 v 09:19
Jenom pro upřesnění.
Pozor na rozdíl mezi (String) Parameter.Expression a (Double) Parameter.Value
Co 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é.


Odeslal: mimo0912
Datum odeslání: 29.led.2013 v 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.


Odeslal: flesar
Datum odeslání: 29.led.2013 v 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.


Odeslal: Navara
Datum odeslání: 30.led.2013 v 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.)


Odeslal: mimo0912
Datum odeslání: 12.úno.2013 v 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 ......?!?!Cry


Odeslal: Navara
Datum odeslání: 12.úno.2013 v 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


Odeslal: mimo0912
Datum odeslání: 12.úno.2013 v 17:22
OK, skúsim sa posunúť o krok vpred.



Vytisknout stránku | Zavřít okno