Zobrazit plnou verzi příspěvku: Max rozměry ipt

Otasek
07.03.2005, 14:40
Lze nějak zjistit největší rozměry dílce ve směrech souřadného systému? Není potřeba rozlišovat jeho tvar, pouze největší opsaný kvádr, do kterého se vejde

Keberdle Václav
07.03.2005, 15:48
Nejak ano :)
 viz vyber > dle rozmeru

Otasek
07.03.2005, 15:56
??????
ani náhodu se nechytám....možná není chyba na mé straně...toto je téma programování, nikoliv ovládání AI...takže doplním otázku o pointu.
Max rozměr potřebuji k automatickému doplnění polotovaru.. nějaký výběr dle rozměru je mi k ničemu.

Beru, že 90% uživatelů místo toho aby si dalo na chvilku odpočinulo a za něj ty polotovary vypsalo makro, tak budou několik hodin sedět a tupě vypisovat jeden rozměr za druhým.
Děkuji nemám zájem, raději budu 2dny programovat a pak si užívat chvilku v křesílku s nohama na stole, popíjení kafíčko a pozoravat jak se sčot snažíOtasek38418.6689583333

Slade
07.03.2005, 16:21
 
Jeee doufám že někdo příjde s tím jak na to s tím to se neustále peru a byl bych moc rád jak to udělat aby to šlo samo mám na mysli výběr polotovaru
doufám a pevně věřím že toto již někde existuje

Otasek
07.03.2005, 16:32
taky doufám, že to půjde, ale v angličtně dost plavu, takže je mi celý slavný admapi_9_0.chm prakticky k ničemu. Stačilo by zjistit nějakou fci, které by to ten model ošahala... řešit to pomocí manuálního součtu kot je taky schůdné, popř. si v hotovém modelu udělat 2 náčrty a v nich zakotovat krajni body , tím lze získat řízené koty, které již lze postat do razítka ale nelze je nějak sloučit do jedné hodnoty, to mě příliž nevadí, ale hodilo by se to - smůa, že je to tak hodně neobratné ...

Radek Pícha
07.03.2005, 16:54
Také marně přemýšlím jak na to...ale vidím, že jste mnohem dál - zatím ani nechápu, co jsou "řízené koty" a jak je "lze postat do razítka"...
Domníval jsem se, že by to šlo cestou exportu parametrů modelu, ale nevím jak...

Otasek
07.03.2005, 17:15
-řízené koty jsou takové ty v závorách, jejich velikost je dána přímo tvarem geometrii - prostě je to kota na vic (u obdelníku dvěma kotami zadáte jeho velikost, když zakotujete ještě uhlopříčku, tak to už bude řízená kota, protože pro definici je již nadbytečná) - na přepnutí řídící a řízené koty je v AI tlačítko
-hodnotu jakékoliv koty (=i řízené) exportujete pomocí zatržítka v tabulce parametrů... do razítka pak přídáte vlastní nadefinovaný parametr podle názvu v modelu - tam lze i jednotlivé hodnoty spojovat dohromaty do jednoho "slova"

Radek Pícha
07.03.2005, 19:55
Jo funguje to,akorát místo polotovaru: P6-100x200mi vystupuje do razítka: P6,000mm-100,000mmx200,000mm(asi poradíte jak toto upravit)
Když vytvořím šablony pro polotovar plech, ... mohlo by to stačit, ne?Pomocí parametrů můžu přidat i přídavky na obrábění...
Chtěl jste ale asi vytvořit makro, které projede modely vytvořené jakoukoli šablonou, že?

Otasek
07.03.2005, 20:18
no to je právěže ten problém... toto jsem kdysi zkoušel (tak -1,5roku), ale jak odsranit jednotky jsem nepřišel - a tedka jsem vám to zapoměl říct.. soráč

pokud byste podobnou věc udělal pomocí kusovníku, tak tak ty jednotky vypnout jsou, ale zase se nedají slučovat sloupce a taky nelze ráměček kusovníku vypnout.. takže jedině žebyste to měl odděleně v kolonkách.. pak vy šlo rozlišovat klidně i kulatina, Tr. P. plocháč apod
Pro ty co mi chtělí odporovat, at to vkládám z "mechsoftu", že ten má rozměry v BOM2, tak to mají pravdu, ale nejsem tak geniální, že vím dopředu u každé součásti, z jakého polotovaru ho budu vyrábět a moji zákazníci nechcou polotovary, ty předepisuje jejich technolog (ale pouze u složitých dílů), ale jen největší rozměry - přídavky si zvolí podle potřeby a podle toho co mají ve skladu

proto si chcu udělat makro, které projede všechny ipt, zjistí velikost, vhodně ji sformátuje bez jednotek a zapíše ho do nějaké proměné jako text.. ten pak naprosto jednoduše vložím tak kam chci.
prozatím to dělám ručně,ale je to:
1) pakárna
2) lehce se u toho dělají chyby (překlepy - zrovna včera sem se sekl o -100mm) a při změně dílce se na to musí myslet a přepsat tu hodnotu - koty se změní samy, ale v těch to málokdo hledá

Myšlenka asi nebude nic moc nová, ale provedení pořád nikde a příliž nepředpokládám, že by příští verze AI, něco podobného uměla.. pokud ne, tak fakt nemám důvod proč si ji kupovat. Také jsem zvědavý, jestli konečně přidají do vlastnostní hmotnost... ono by toho bylo asi víc, ale to není problém tohoto příspěvkuOtasek38418.8518634259

Radek Pícha
08.03.2005, 07:47
Hmotnost vkládám z fyzikální do uživatelské vlastnosti, tu pak do razítka:
Public Sub SetHmotnost(oModel As Variant)    On Error Resume Next    'R-Hmotnost (do R-Hmotnost v záložce Uživatelské vlastnosti zapíše Hmotnost ze zál. Fyzikální)    'Uživatelské vlastnosti modelu    Dim oModelUserPropSet As PropertySet    Set oModelUserPropSet = oModel.PropertySets("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" )    Dim sHmotnost As String    sHmotnost = FormatNumber(oModel.ComponentDefinition.MassProperties.mass, 3) 'Fyzikální hmotnost - text    Call oModelUserPropSet.Item("R-Hmotnost").Delete    Call oModelUserPropSet.Add(sHmotnost, "R-Hmotnost")End Sub
S Mechsoftem je to horší - nová verze pod názvem Design Accelerator už nemá BOM1,2..., takže se nedá ovlivnit, jaký text vystupuje do uživatelských vlastností (nebo se mýlím?)

Mrázek
08.03.2005, 07:59
Spoléhat na to, že různé myšlenky tu už byly a že určitě se to už v příští verzi musí objevit, je naprosto lichá. Uvědomte si, že vývojáři jsou programátoři a ne konstruktéři (kromě zakladatelů bývalé fy Mechsoft .. to byli programující strojaři, proto také jejich produkty měly hlavu a patu). Takže pokud máte nějký nápad, jak vylepšit funčnost nějakého produktu, existuje na stránkách Autodesku tzv. Wishlist, jehož vyplněním tento nápad sdělíte vývojářům a alespoň nepatrnou měrou můžete přispět k tomu, že upgrady mohou mít smysl, protože budou řešit to, co nás pálí.

Mrázek
08.03.2005, 08:11
Pane Pícha, asi se mýlíte. My už máme nyní ve firmě jednotně nastavené zobrazování vlastností, takže to nemůžu vyzkoušet, ale jsem si skoro jistý, že když jsem viděl Dessign accelerator poprvé, tak obsahoval BOM1,2 a 3 úplně stejně, jako dřívější nadstavba Mechsoft.

Radek Pícha
08.03.2005, 08:14
Svoje připomínky jsem do Wishlistu vkládal od verze 5.3, ale už mě to přešlo. Nikterak mě v Autodesku nepřesvědčili o ochotě vycházet vstříc požadavkům českého konstruktéra... a jak je vidět z odstranění tak dobrých věcí jako bylo např BOMx, zlomili i programující strojaře bývalé fy Mechsoft...

Radek Pícha
08.03.2005, 08:23
Omlouvám se (i Autodesku), tuto možnost jsem přehlédl. Dík za upozornění.

Otasek
08.03.2005, 08:40
Díky za to makro na tu hmotnost. Vyzkouším a uvidím, škoda že se nemění asociativně se změnou v modelu, ale musí se pokaždé znovu zkpouštět. Kdepak se vám podařilo ho schrastit?
Já to řeším přes kusovník, ručně vložím jedno políčko do oblasti roh.razítka... takže si toho skoro nikdo nevšimne, je to asociativní (teda po aktualizaci), ale trošku je problém sladit velikost textu a rámečku, tak aby se to krylo s razítkem
Ty BOMy funkují... jen nejsou v AI interní knihovně norm. dílů
Že programátoži autodesku nejsou konstruktéři, tak to je jejich problém, ale podřezávají si tím větem na které sedí, asi se furt domnívají, že jsou dominantní na scéně 2D CAD, ale ve sféře 3D sou v těžké konkurenci...
Já EN moc neumím, takže sesumírovat poznámku, tak aby to pochopily bych nedokázal a stejně si myslím, že ji je to úplně jedno. Kdyby vyřešili v AI10 všechny doposud známé nedostatky tak co by potom bylo nového v AI11 (aby to nedopadlo jako přechod z 6na 7-změnily acad, v AI uživatelsky nic nového)

Tedka trošku zase programování:
Když zjistit velikost dílu se nějak nedaří, nevíte jakým příkazem lze zaktualizovat kusovník ve výkrese? Ďk

Radek Pícha
08.03.2005, 09:14
Jak zaktualizovat kusovník bych také chtěl vědět.
Ručně vložit jedno políčko do oblasti roh.razítka je podle mě pro uživatele zatěžující. Spouštění makra jedním tlačítkem před dokončením výkresu se mi zdá jednodušší. Makro, které spouštím, řeší více věcí, například aktualizuje datum poslední změny. Též by se mi líbilo, kdyby to fungovalo bez nutnosti mačkat tlačítko...
Makro včetně vkládání hmotnosti jsem zmastil sám, více snad mimo konferenci, máte-li zájem.
Pro překlad svých přání do EN využívám služeb prodejce AI.

Ľubomír Pápay
08.03.2005, 09:19
Co sa tyka tej hmotnosti. ja pouzivam utilitku verejne dostupnu "iProperty Collection V2.1" od Patricka de Stobbeleira a som uplne spokojny. O hmotnost sa uz nemusim starat. Vzdy ju mam v rohovom razitku aktualnu. Jedine co musim pri akejkolvek zmene modelu urobit, je stlacit tlacitko SAVE, aby sa to updatovalo.
 

Otasek
08.03.2005, 09:57
tak jsm si zkusil iProperty Collection a je teda bomba !! úžasné, si připadám úplně mimo realitu

škoda že to umí celkové rozměry jen u plechových dílcůOtasek38419.4475578704

Keberdle Václav
08.03.2005, 10:46
Reaguji na
na sebe :)
tim vybrat dle velikosti jsem myslel vas chtel popostrcit.
Inventor totiz dokaze vyhledat vsechny dily v sestave jenz maji mensi /vetsi
"telesovou uhlopricku" takze
to nejak jde..
Staci jen zjistit jak to dela..

Keberdle Václav
08.03.2005, 10:48
[QUOTE=Otasek]Lze nějak zjistit největší rozměry dílce ve směrech souřadného systému? Není potřeba rozlišovat jeho tvar, pouze největší opsaný kvádr, do kterého se vejde[/QUOTE]
Ale to se muze lisit .. nemusi to byt jen kvadr jako nejlepsi polotovar.
Nebylo by lepsi udelat uzivatelske vlastnosti a ty pak definovat > nacist do razitka ..

Otasek
08.03.2005, 11:00
s tím přesným určením polotovaru je to dost těžké, asi programově by to odladit dokonale nešlo, ale chcu to alespon pro kontrolu
nedávno jsem se upsal a ve výrobě uřezaly leštěnou duralovou desku místo 1000x500 tak 1000x400, zjistili to až když to frezafi nějak nevycházelo a to už je celkem pozdě. Tak bych si alespon mohl "ošahat" celkové rozměry a porovnat je s tím co mám napsané v razítku (koty byly v pořádku, jen se na ně nikdo nepodíval) a tím se vyhnout takovým a podobným nepříjemnostem

Lubomír Baďura
08.03.2005, 11:15
[QUOTE=Radek Pícha]
Ručně vložit jedno políčko do oblasti roh.razítka je podle mě pro uživatele zatěžující. Spouštění makra jedním tlačítkem před dokončením výkresu se mi zdá jednodušší. Makro, které spouštím, řeší více věcí, například aktualizuje datum poslední změny. Též by se mi líbilo, kdyby to fungovalo bez nutnosti mačkat tlačítko...
[/QUOTE]
Dobrý den!
Automatické spuštění makra lze v Inventoru zajistit jeho správným pojmenováním. Pokud název makra obsahuje "AutoOpen", "AutoNew", "AutoSave", "AutoClose" nebo "AutoEdit", makro se automaticky spustí při provádění příslušné akce, např. při ukládání výkresu (podrobnosti viz. Help v Inventoru).
Pro inspiraci přikládám makro (viz. níže), které řeší zápis hmotnosti modelu a použitých výkresových měřítek do uživatelských parametrů výkresu.
Prosím kohokoliv, kdo je ochoten poskytnout nějaká makra pro Inventor, aby je poslal na mou adresu nebo je zveřejnil v této konferenci (třeba pod nějakým novým tématem). Děkuji.
Option ExplicitConst SpaceBeforeMassUnit As Integer = 1Const TotalMassUnit As String = "kg"
'Always use X and Y in the Scale display string'Example HowToDisplayFirstViewScale=[X:Y] will display as [1:2] in the propertiesConst HowToDisplayFirstViewScale As String = "X:Y"
'Always use X and Y in the Scale display string'Example HowToDisplayAllViewScales=X:Y will display as 1:2 in the propertiesConst HowToDisplayAllViewScales As String = "X:Y" 'Set the charactor for the All View Scales list separator'Example ListSparator="," the list will dispaly as [5:1],[1:1]Const ListSparator As String = " " 'Value that will control if the the First View is excluded from the All View Scales list'True: Exclude the Scale of the First View from the All View Scales list'False: All View Scales are included in the listConst ExcludeFirstInAllScales As Boolean = True
'True: Uses the same display style as inventor, Scale 2.5 is shown as 2.5:1'False: Always find an integer value for both values, Scale 2.5 is shown as 5:2Const ShowScaleAsInventor As Boolean = TrueConst ShowScaleAsInventorDecimals As Integer = 2
Public Sub AutoSave()    Call UpdateTotalMassInPartsList    Call ShowFirstViewScale    Call ShowAllScalesEnd Sub
 Public Sub UpdateTotalMassInPartsList()        'ThisApplication.StatusBarText = "Updating Totalmass in the Parts List, Please wait."
    'On Error GoTo WrongPartsList    ' Set a reference to the drawing document.    ' This assumes a drawing document is active.    Dim oDrawDoc As DrawingDocument    Set oDrawDoc = ThisApplication.ActiveDocument        Dim oPropSet As Property    'Set the custom property "TotalMass" with the Assembly Mass    Set oPropSet = oDrawDoc.PropertySets("{D5CDD505-2E9C-101B-9397-08002B2CF9AE }").Item("TotalMass")
    If oDrawDoc.ReferencedFiles.Count <> 0 Then        Dim oTotalMass As MassProperties        Set oTotalMass = oDrawDoc.ReferencedFiles.Item(1).ComponentDefinition.MassPro perties            Dim TotalMass As Double        TotalMass = Round(oTotalMass.Mass, 1)                oPropSet.Value = TotalMass & Space(SpaceBeforeMassUnit) & TotalMassUnit    Else        MsgBox ("Ve výkresu není pohled")        oPropSet.Value = ""    End If    End Sub
Private Sub ShowFirstViewScale()     Dim oDrawDoc As DrawingDocument    Set oDrawDoc = ThisApplication.ActiveDocument    Dim ScaleProp As String        On Error Resume Next      'Find the Scale of the first View on the first Sheet    ScaleProp = ConvScale2Fraction(oDrawDoc.Sheets.Item(1).DrawingViews.Item (1).Scale, True)        'Add a custom property "Scale" with all the view scales    Dim oPropSet As PropertySet        Set oPropSet = ThisApplication.ActiveDocument.PropertySets("{D5CDD505-2E9C- 101B-9397-08002B2CF9AE}")    Call oPropSet.Item("FirstViewScale").Delete    Call oPropSet.Add(ScaleProp, "FirstViewScale")        'Still having some problems that the last property does not update correct    Call RefreshProperties    End Sub 
Private Sub ShowAllScales()        Dim oDrawDoc As DrawingDocument    Set oDrawDoc = ThisApplication.ActiveDocument        ' Set a reference to the first drawing view on the active sheet.    ' This assumes that a parts list is on the active sheet.        Dim ScaleProp As String    Dim UniqueScales As New Collection    Dim SortedScales() As Double    Dim temp As Double    Dim AllScales As String        On Error Resume Next        Dim i, j As Integer        'Find all unique Scale on all the Sheets    For j = 1 To oDrawDoc.Sheets.Count        For i = 1 To oDrawDoc.Sheets.Item(j).DrawingViews.Count              UniqueScales.Add CStr(oDrawDoc.Sheets.Item(j).DrawingViews.Item(i).Scale), CStr(oDrawDoc.Sheets.Item(j).DrawingViews.Item(i).Scale)        Next i    Next j          ' Exclude the Scale of the First View from the All View Scales list    If ExcludeFirstInAllScales Then UniqueScales.Remove (CStr(oDrawDoc.Sheets.Item(1).DrawingViews.Item(1).Scale))          ReDim SortedScales(UniqueScales.Count - 1)          'Copy the Scales from the Collection to an Array for bubble sort    For i = 0 To UniqueScales.Count        SortedScales(i) = CDbl(UniqueScales.Item(i + 1))    Next i          'Bubble Sortes the Scales    For i = 0 To UBound(SortedScales) - 1        For j = 0 To UBound(SortedScales) - 1              If SortedScales(j) > SortedScales(j + 1) Then                  temp = SortedScales(j)                  SortedScales(j) = SortedScales(j + 1)                  SortedScales(j + 1) = temp              End If        Next j    Next i        ' Add all the Scales to a String    For i = UBound(SortedScales) To 1 Step -1        AllScales = AllScales + ConvScale2Fraction(SortedScales(i), False) + ListSparator    Next i                AllScales = AllScales + ConvScale2Fraction(SortedScales(0), False)            'Add a custom property "Scale" with all the view scales    Dim oPropSet As PropertySet        Set oPropSet = ThisApplication.ActiveDocument.PropertySets("{D5CDD505-2E9C- 101B-9397-08002B2CF9AE}")    oPropSet.Item("AllViewScales").Delete    Call oPropSet.Add(AllScales, "AllViewScales")        'Still having some problems that the last property does not update correct    Call RefreshProperties        End Sub     Private Function ConvScale2Fraction(ValScale As Double, FirstView As Boolean) As String     Dim TempStr As String    Dim sx As Long    Dim sy As Long    Dim dsx As Double    Dim dsy As Double
        'Convert the deciaml value to a fraction    Call DecToFrac(ValScale, sx, sy)        dsx = sx    dsy = sy        If ShowScaleAsInventor Then        If sx > 1 And sy >= 1 Then              dsx = Round(ValScale, ShowScaleAsInventorDecimals)              dsy = 1        End If    End If        If FirstView Then        TempStr = Replace(UCase(HowToDisplayFirstViewScale), "X", CStr(dsx))        ConvScale2Fraction = Replace(TempStr, "Y", CStr(dsy))    Else        TempStr = Replace(UCase(HowToDisplayAllViewScales), "X", CStr(dsx))        ConvScale2Fraction = Replace(TempStr, "Y", CStr(dsy))    End If
End Function Private Sub DecToFrac(DecimalNum As Double, Numerator As Long, Denom As Long)    ' The BigNumber constant can be adjusted to handle larger fractional parts   Const BigNumber = 1000   Const SmallNumber = 0.0001    Dim Inverse As Double, FractionalPart As Double   Dim WholePart As Long, SwapTemp As Long    Inverse = 1 / DecimalNum   WholePart = Int(Inverse)   FractionalPart = Frac(Inverse)    If 1 / (FractionalPart + SmallNumber) < BigNumber Then        ' Notice that DecToFrac is called recursively.        Call DecToFrac(FractionalPart, Numerator, Denom)        Numerator = Denom * WholePart + Numerator         SwapTemp = Numerator        Numerator = Denom        Denom = SwapTemp   Else ' If 1 / (FractionalPart + SmallNumber) > BigNumber        ' Recursion stops when the final value of FractionalPart is 0 or        ' close enough.  SmallNumber is added to prevent division by 0.        Numerator = 1        Denom = Int(Inverse)   End If   End Sub ' This function is used by DecToFrac and DecToProperFact Private Function Frac(x As Double) As Double    Frac = Abs(Abs(x) - Int(Abs(x)))End Function ' This additional procedure handles "improper" fractions and returns' them in mixed form (a b/c) when the numerator is larger than the denominator Private Sub DecToProperFrac(x As Double, a As Long, b As Long, c As Long)   If x > 1 Then a = Int(x)   If Frac(x) <> 0 Then      Call DecToFrac(Frac(x), b, c)   End IfEnd Sub Private Sub RefreshProperties()        Dim oPropSet As PropertySet    Dim oPropSets As PropertySets        Set oPropSet = ThisApplication.ActiveDocument.PropertySets("{D5CDD505-2E9C- 101B-9397-08002B2CF9AE}")    Call oPropSet.Add("", "MyDummy")    oPropSet.Item("MyDummy").Delete        Call oPropSets.FlushToFile End Sub

Otasek
08.03.2005, 11:22
jj přesně něco takového (mám takový pocit že dokonce doslovně) obsahuje utilitka iProperty Collection, a je dokonce uživatelsky velmi příjemná, celé nastavení je v jednom ini souboru


jen mě začíná čím dál tím štvát fakt, že takové makra si musí nějak složitě uživatelé navzájem zprostředkovávat a autodesk se hezky směje jak mu platíme za updaty a nic takového nám nenabízí.

hodně lidem by stačilo, kdyby přeložily help k API, pokud by to bylo lokalizované, tak si tam hromadu věcí člověk najde u udělá podle svých představ, ale takhle...!!Otasek38419.4782523148

Augustyn
08.03.2005, 11:35
[QUOTE=Lubomír Baďura][QUOTE=Radek Pícha]
Ručně vložit jedno políčko do oblasti roh.razítka je podle mě pro uživatele zatěžující. Spouštění makra jedním tlačítkem před dokončením výkresu se mi zdá jednodušší. Makro, které spouštím, řeší více věcí, například aktualizuje datum poslední změny. Též by se mi líbilo, kdyby to fungovalo bez nutnosti mačkat tlačítko...
[/QUOTE]
Dobrý den!
Automatické spuštění makra lze v Inventoru zajistit jeho správným pojmenováním. Pokud název makra obsahuje "AutoOpen", "AutoNew", "AutoSave", "AutoClose" nebo "AutoEdit", makro se automaticky spustí při provádění příslušné akce, např. při ukládání výkresu (podrobnosti viz. Help v Inventoru).
Pro inspiraci přikládám makro (viz. níže), které řeší zápis hmotnosti modelu a použitých výkresových měřítek do uživatelských parametrů výkresu.
Prosím kohokoliv, kdo je ochoten poskytnout nějaká makra pro Inventor, aby je poslal na mou adresu nebo je zveřejnil v této konferenci (třeba pod nějakým novým tématem). Děkuji.
Option ExplicitConst SpaceBeforeMassUnit As Integer = 1Const TotalMassUnit As String = "kg"
'Always use X and Y in the Scale display string'Example HowToDisplayFirstViewScale=[X:Y] will display as [1:2] in the propertiesConst HowToDisplayFirstViewScale As String = "X:Y"
'Always use X and Y in the Scale display string'Example HowToDisplayAllViewScales=X:Y will display as 1:2 in the propertiesConst HowToDisplayAllViewScales As String = "X:Y" 'Set the charactor for the All View Scales list separator'Example ListSparator="," the list will dispaly as [5:1],[1:1]Const ListSparator As String = " " 'Value that will control if the the First View is excluded from the All View Scales list'True: Exclude the Scale of the First View from the All View Scales list'False: All View Scales are included in the listConst ExcludeFirstInAllScales As Boolean = True
'True: Uses the same display style as inventor, Scale 2.5 is shown as 2.5:1'False: Always find an integer value for both values, Scale 2.5 is shown as 5:2Const ShowScaleAsInventor As Boolean = TrueConst ShowScaleAsInventorDecimals As Integer = 2
Public Sub AutoSave()    Call UpdateTotalMassInPartsList    Call ShowFirstViewScale    Call ShowAllScalesEnd Sub
Public Sub UpdateTotalMassInPartsList()        'ThisApplication.StatusBarText = "Updating Totalmass in the Parts List, Please wait."
    'On Error GoTo WrongPartsList    ' Set a reference to the drawing document.    ' This assumes a drawing document is active.    Dim oDrawDoc As DrawingDocument    Set oDrawDoc = ThisApplication.ActiveDocument        Dim oPropSet As Property    'Set the custom property "TotalMass" with the Assembly Mass    Set oPropSet = oDrawDoc.PropertySets("{D5CDD505-2E9C-101B-9397-08002B2CF9AE }").Item("TotalMass")
    If oDrawDoc.ReferencedFiles.Count <> 0 Then        Dim oTotalMass As MassProperties        Set oTotalMass = oDrawDoc.ReferencedFiles.Item(1).ComponentDefinition.MassPro perties            Dim TotalMass As Double        TotalMass = Round(oTotalMass.Mass, 1)                oPropSet.Value = TotalMass & Space(SpaceBeforeMassUnit) & TotalMassUnit    Else        MsgBox ("Ve výkresu není pohled")        oPropSet.Value = ""    End If    End Sub
Private Sub ShowFirstViewScale()     Dim oDrawDoc As DrawingDocument    Set oDrawDoc = ThisApplication.ActiveDocument    Dim ScaleProp As String        On Error Resume Next      'Find the Scale of the first View on the first Sheet    ScaleProp = ConvScale2Fraction(oDrawDoc.Sheets.Item(1).DrawingViews.Item (1).Scale, True)        'Add a custom property "Scale" with all the view scales    Dim oPropSet As PropertySet        Set oPropSet = ThisApplication.ActiveDocument.PropertySets("{D5CDD505-2E9C- 101B-9397-08002B2CF9AE}")    Call oPropSet.Item("FirstViewScale").Delete    Call oPropSet.Add(ScaleProp, "FirstViewScale")        'Still having some problems that the last property does not update correct    Call RefreshProperties    End Sub 
Private Sub ShowAllScales()        Dim oDrawDoc As DrawingDocument    Set oDrawDoc = ThisApplication.ActiveDocument        ' Set a reference to the first drawing view on the active sheet.    ' This assumes that a parts list is on the active sheet.        Dim ScaleProp As String    Dim UniqueScales As New Collection    Dim SortedScales() As Double    Dim temp As Double    Dim AllScales As String        On Error Resume Next        Dim i, j As Integer        'Find all unique Scale on all the Sheets    For j = 1 To oDrawDoc.Sheets.Count        For i = 1 To oDrawDoc.Sheets.Item(j).DrawingViews.Count             UniqueScales.Add CStr(oDrawDoc.Sheets.Item(j).DrawingViews.Item(i).Scale), CStr(oDrawDoc.Sheets.Item(j).DrawingViews.Item(i).Scale)        Next i    Next j          ' Exclude the Scale of the First View from the All View Scales list    If ExcludeFirstInAllScales Then UniqueScales.Remove (CStr(oDrawDoc.Sheets.Item(1).DrawingViews.Item(1).Scale))          ReDim SortedScales(UniqueScales.Count - 1)          'Copy the Scales from the Collection to an Array for bubble sort    For i = 0 To UniqueScales.Count        SortedScales(i) = CDbl(UniqueScales.Item(i + 1))    Next i          'Bubble Sortes the Scales    For i = 0 To UBound(SortedScales) - 1        For j = 0 To UBound(SortedScales) - 1             If SortedScales(j) > SortedScales(j + 1) Then                 temp = SortedScales(j)                 SortedScales(j) = SortedScales(j + 1)                 SortedScales(j + 1) = temp             End If        Next j    Next i        ' Add all the Scales to a String    For i = UBound(SortedScales) To 1 Step -1        AllScales = AllScales + ConvScale2Fraction(SortedScales(i), False) + ListSparator    Next i                AllScales = AllScales + ConvScale2Fraction(SortedScales(0), False)            'Add a custom property "Scale" with all the view scales    Dim oPropSet As PropertySet        Set oPropSet = ThisApplication.ActiveDocument.PropertySets("{D5CDD505-2E9C- 101B-9397-08002B2CF9AE}")    oPropSet.Item("AllViewScales").Delete    Call oPropSet.Add(AllScales, "AllViewScales")        'Still having some problems that the last property does not update correct    Call RefreshProperties        End Sub     Private Function ConvScale2Fraction(ValScale As Double, FirstView As Boolean) As String     Dim TempStr As String    Dim sx As Long    Dim sy As Long    Dim dsx As Double    Dim dsy As Double
        'Convert the deciaml value to a fraction    Call DecToFrac(ValScale, sx, sy)        dsx = sx    dsy = sy        If ShowScaleAsInventor Then        If sx > 1 And sy >= 1 Then             dsx = Round(ValScale, ShowScaleAsInventorDecimals)             dsy = 1        End If    End If        If FirstView Then        TempStr = Replace(UCase(HowToDisplayFirstViewScale), "X", CStr(dsx))        ConvScale2Fraction = Replace(TempStr, "Y", CStr(dsy))    Else        TempStr = Replace(UCase(HowToDisplayAllViewScales), "X", CStr(dsx))        ConvScale2Fraction = Replace(TempStr, "Y", CStr(dsy))    End If
End Function Private Sub DecToFrac(DecimalNum As Double, Numerator As Long, Denom As Long)    ' The BigNumber constant can be adjusted to handle larger fractional parts   Const BigNumber = 1000   Const SmallNumber = 0.0001    Dim Inverse As Double, FractionalPart As Double   Dim WholePart As Long, SwapTemp As Long    Inverse = 1 / DecimalNum   WholePart = Int(Inverse)   FractionalPart = Frac(Inverse)    If 1 / (FractionalPart + SmallNumber) < BigNumber Then        ' Notice that DecToFrac is called recursively.        Call DecToFrac(FractionalPart, Numerator, Denom)        Numerator = Denom * WholePart + Numerator         SwapTemp = Numerator        Numerator = Denom        Denom = SwapTemp   Else ' If 1 / (FractionalPart + SmallNumber) > BigNumber        ' Recursion stops when the final value of FractionalPart is 0 or        ' close enough.  SmallNumber is added to prevent division by 0.        Numerator = 1        Denom = Int(Inverse)   End If   End Sub ' This function is used by DecToFrac and DecToProperFact Private Function Frac(x As Double) As Double    Frac = Abs(Abs(x) - Int(Abs(x)))End Function ' This additional procedure handles "improper" fractions and returns' them in mixed form (a b/c) when the numerator is larger than the denominator Private Sub DecToProperFrac(x As Double, a As Long, b As Long, c As Long)   If x > 1 Then a = Int(x)   If Frac(x) <> 0 Then      Call DecToFrac(Frac(x), b, c)   End IfEnd Sub Private Sub RefreshProperties()        Dim oPropSet As PropertySet    Dim oPropSets As PropertySets        Set oPropSet = ThisApplication.ActiveDocument.PropertySets("{D5CDD505-2E9C- 101B-9397-08002B2CF9AE}")    Call oPropSet.Add("", "MyDummy")    oPropSet.Item("MyDummy").Delete        Call oPropSets.FlushToFile End Sub[/QUOTE]

Radek Pícha
08.03.2005, 12:11
Jsem jen příležitostný "použivatel" VBA a z helpu jsem pochopil, že automaticky spustitelné makro může být pouze v DocumentProject (musí být součástí souboru - idw, ipt). Protože nemůžu zajistit, že všechny soubory budou z mé dílny rozhodl jsem se pro AplicationProject a to neumím spustit jinak než třeba tlačítkem. Jak to dokáže Patrick de Stobbeleir nevím. Spáchachl jsem si udělátko, které mi pomáhá s vyplňováním kusovníků (můžu z hlavní sestavy upravovat všechny podřízené kusovníky).
Návrh "poskytnout nějaká makra pro Inventor" je zajímavý, ale dost mi připomíná příběh někdy okolo roku 1990, kdy jsem měl hromádku prospěšných lispů a poskytl jsem je zakladateli Mechsoftu (MP). Jeho odpověď byla asi tato: Budiž vám odměnou, že vaše lispy budou zahrnuty do nové verze našeho programu (tehdy myslím Profi). Pak jsem si svoje utility kupoval vrámci balíku Profi...

Otasek
08.03.2005, 12:40
jak sem to tak zkoumal tak Patrik se napichnul do registrů a pomocí nic při volání "save" zpouští svou rutinku a je mu celkem jedno jestli je to ipt, iam, idw.. podle druhu souboru doplňuje volitelné proměnné

S tím poskytování vylepšení by chtělo přejít na úplně jinou politiku. Nikoliv prodávat vylepšení, ale vylepšení by měla být volně dostupná, aby každý potencionální uživatel viděl, že když si koupí tento soft, tak dopředu ví co tím získá a že nekupuje zajíce v pytli s těm co takové fičurky vymýšlí by měli ještě poskytovat slevy na upgrade.

Tedka pokud bych chtěl přejít ke konkurenci, tak vím přesně na co se zaměřit, co mě tady chybí a jaké jsou nedostatky a sondoval jak tyto problémy řeší oni.

Jan Liska
08.03.2005, 12:47
Dobrý den,
poznámka ohledně automatického spouštění - aplikace pro Inventor může být kromě makra také ve formě tzn. add-inu. Add-in má schopnost reagovat na různé události, mj. např. na uložení dokumentu.
Technicky je třeba pro add-in používat Visual Basic, popř. C++, C#, VB.Net atd. pro makra postačuje VBA, které je součásti instalace.
S pozdravem

Radek Pícha
08.03.2005, 13:12
hmm tak to už jsem vysunut out... nemám ambice tvořit profi rutiny pomocí "Visual Basic, popř. C++, C#, VB.Net atd." a VBA mi autospouštění v AplicationProject neumožní (jako třeba starý lisp)...
K návrhu politiky poskytování prospěšných rutin by se mohl vyjádřit třeba pan Michl...

Ľubomír Pápay
08.03.2005, 13:17
p. Janča, som rád že vás iProperty Collection dostal úplne mimo realitu...
Keď som si to ja stiahol z Webu anainštaloval, zažil som podobnú eufóriu...Od radosti som napísal ´dakovný mail Patrickovi. Potešilo ho to...
 

Otasek
08.03.2005, 13:22
tolik radosti co způsobyly 100kB text sem dlouho nezažil, a když člověk smaže ten ini soubor, tak při následném uložení si ten "zázrak" po sobě pouklízí

Radek Pícha
08.03.2005, 15:27
Jak jste docílili toho, že SM_Extents_Width a SM_Extents_Length v aplikaci plech, vytvořené pomocí iProperties, nejsou nulové?

Otasek
08.03.2005, 15:30
a máte udělaný rozvin? bez toho te nejde

Radek Pícha
08.03.2005, 15:46
dík, už to jede...
... hmm, ještě by to chtělo, aby Patrick reagoval na naše další návrhy, když se do toho nechce Autodesku...

Otasek
08.03.2005, 16:39
Tedka mě tak trklo, že AI zjistit velikost dílce nějakým způsobem umí.
Když dělám plechařinu a nejsem zarovnaný do souřadného systému (kreslím nějak zešika) tak pak je rozvin také zašikma, a když se podívám na jeho velikost tak to hlásí největší rozměry vzhledem k osám souř.systému. a to je ta vlastnost co chci, jenže standartně je jen u plechů.
Každý dílec jde zapnout jako plech, ale to je trošku difné řešení...

Jan Liska
08.03.2005, 17:17
Dobrý den,
pokud by vám nevadilo použití VBA, tak lze ke zjištění max. rozměru použít metodu RangeBox objektu SurfaceBody, např.
Sub PrintRange()    Dim oApp As Inventor.Application        Set oApp = ThisApplication    Dim oPartDoc As PartDocument        Set oPartDoc = ThisDocument    Dim oCompDef As ComponentDefinition            Set oCompDef = oPartDoc.ComponentDefinition    Dim oSurfBody As SurfaceBody        Set oSurfBody = oCompDef.SurfaceBodies.Item(1)    Dim oBox As Box        Set oBox = oSurfBody.RangeBox    MsgBox "X=" & oBox.MaxPoint.X - oBox.MinPoint.X & "," & vbCrLf & _        "Y=" & oBox.MaxPoint.Y - oBox.MinPoint.Y & "," & vbCrLf & _        "Z=" & oBox.MaxPoint.Z - oBox.MinPoint.ZEnd Sub
Uvedené makro bylo testováno pouze v souboru součásti (IPT, v ThisDocument), pro sestavu by bylo třeba rozšířit.
S pozdravem

Otasek
08.03.2005, 17:27
Jo, to je přesně to co celou dobu chci o sestavu se mi nejedná.
No tedka ještě zjistit jak načíst hodnotu z položky "POPIS" v ipt a mám vyřešeno což se mi s pomocí p. Lisky hravě zdařilo...díky moc
Až budu mít udělátor hotový tak určitě dám vědětOtasek38419.7519675926

EuroTec
10.03.2005, 13:49
Z povzdálí sleduji tuto velice zajímavou debatu a čekám jako sup, co z Vás vypadne.
Já se sanažím maximálně využívat databázy MechSoftu (nakonec i plocháč se dá ohnout, když do parametru touštka dosadíte sílu plocháče). Takto mám zajištěno, že mi rozměry polotovaru skáčou do kusovníku. Překvapilo mně proto že v 9. jsou nějaká omezení v používání BOMů. Mám je dost podstatně využívané: název (nerad bych, aby se mi v kusovníku objevovali podobné ptákoviny jako "Šroub s válcovou hlavou a vnitřním šestihranem" atd., mám tam i německou mutaci) materiál (to je kapitola sama pro sebe - nechápu proč si každý .ipt s sebou tahá materiálovou tabulku, velmi pracně editovatelnou - trvalé změny v šabloně - navíc MechSoft používá šablony mně nedostupné a ještě anglické. Proč nelze materiál volit z externí editovatelné tabulky- mohlo by tam být i porovnání zahraničních norem. Do kusovníku by pak samozřejmě lezlo číselné označení materiálu dle příslušné normy a ne nějakej Steel, Mild a pod.).
jiná věc jsou různé složitosti (těch ale není zas až moc), ale hlavně plechy. To by byla bomba. Jelikož jsem na štýru s programováním (naposledy jsem něco psal ve Fortranu za krále Klacka) toužebně vzhlížím jestli z Vás něco nevypadne. Dejte prosím vědět.

Otasek
10.03.2005, 14:10


no v součastnosti mě zakazníci honěj jak zdutou kozu, tak je vůbec zázrak, že mám na nějakou diskusi čas.. štěstí, že den má tolik hodin.. takže si na programování možná udělám čas tedka přes víkend, třeba se mě něco povede sesmolit, ale bude to šito na míru mím potřebám, takže nějakou univerzální aplikaci nečekejte

add Mechsoft: ve slavných dobách AI5 šlo vzorové dílce Mechsoftu pro generování součástí přímo editovat a také textové detabázové soubory z nichž se vytahovaly rozměry a názvy.
Takže sem si dal tu práci a nastavil vše tak aby mě vyhovovalo (normy dle ČSN nikoliv ISO EN ČSN, materiál tak jak má být...11373, 11600, pojmenování taktéž - takže žádný šroub se šestihrannou hlavou (ikdyž tak se to podle ISO fakt jmenuje) + třeba díru v maticích sem zvětšil na rozměr šroubu, aby mě to při kontrole kolizí neukazovalo kolize..apod ) a takto vytáhanou databázi (cca 1500 dílů) používám doted...

Různé popisky, rozměry atd mám nasáčkované do několika proměnných z kterých to beru pokud se to vyrábí.. pokud je to normalizované, tak se to táhá z BOMů.. už sem to tady párkrát psal, externě to pak zpracuju ( vymažu materiál u normálií, nějak přeformátuju texty, oddělím rozměry...) a přes works to vytisknu anebo exportuju do xls apod

Sem se snažil rozpoutat diskusi, jak toto dělají ostatní, ale nějak to vyšumělo bez odezvy, tak si spokojeně šmudlím dál podle sebe a směju se těm, co to dělají nějak extrémě složitě a nemožou se z toho vymotat

Ľubomír Pápay
10.03.2005, 14:16
Reagujem na tie materiály v Inventore.
Mechsoft nemám, DA som si po preformátovaní disku opätovne už nenainštaloval...Počkám si na AIS 10 a potom to začnem študovať...
Ak som Vás správne pochopil, hovoríte že nejde v AIS9 pri vkladaní normalizovaných súčiastok vyberať materiál...To ale ide. Treba si ho len zprístupniť. (dúfam že som Vás správne pochopil...)
 

Otasek
10.03.2005, 14:28
Nevím... mě tento problém netíží.. ale jen pro třesnost - u normalizovaných dílců se materiál uvádět nemá, je zahrnut v označení normy jako doplňová číslice

Spíš je to potřeba volit u hutních plotovarů..ty táhám jak sem spal předtím, tzn žádný problém tam nemám (11353, 11373, 11600 sem si tam už dávno doplnil) - a hranaté a kulaté tvary kreslím přímo - čtverec anebo kruh nakreslím rychleji, než když do budu táhat z mechsoftu

EuroTec
10.03.2005, 15:53
Protože mám 9. stále ještě v šuplíku (nebyl čas), vyděsila mně zmínka o BUMeh a jejich používání. Nic víc. Mám to nastaveno tak, že to celkem slušně funguje a nerad bych o to přišel. Snaha je "jen" o to, aby se změny projevily automaticky do kusovníku aniž bych mzsel ručně opravovat třeba jen jednu proměnou - (semeniště možných chyb). Momentálně mně vlastně bolí jen ty plechy.

Otasek
10.03.2005, 16:11
BOM1,2,3 normálně funkuje - prostředí je trošku pozměněné (třeba hutní profily jsou schované pod "nosník"), ale jinak se s tím dá normálně žít

Přechod na AI9 doporučuji, budete příjemně překvapen používáním stylů - já to považuji za největší + která tato verze má - chvilku to teda trvalo, než sem to nastavil k obrazu svému, ale pak už je to balada

Radek Pícha
11.03.2005, 11:21
[QUOTE=EuroTec]...Já se sanažím maximálně využívat databázy MechSoftu (nakonec i plocháč se dá ohnout, když do parametru touštka dosadíte sílu plocháče). Takto mám zajištěno, že mi rozměry polotovaru skáčou do kusovníku. ..[/QUOTE]

často potřebujete nejprve navrhout tvar dílu a pak se rozhodovat z čeho jej vyrobit
při vkládání profilů z knihovny se upravované rozměry neprojeví v kusovníku (musel bych jako otrok stále "vyměňovat komponenty")
Velmi si cením návrhu pana Janči. S použitím rutiny pana Lišky se snad podaří kusovníky průběžně aktualizovat... Dík za podněty.

Ľubomír Pápay
11.03.2005, 11:32
[QUOTE=Radek Pícha]
při vkládání profilů z knihovny se upravované rozměry neprojeví v kusovníku (musel bych jako otrok stále "vyměňovat komponenty")
[/QUOTE]
Neviem či Vás chápem správne, ale prečo "stale vyměňovat" ? Ved to ide celkom pohodlne editovať. A v kusovníku sa to tiež prejaví...
 

Radek Pícha
11.03.2005, 12:43
Myslíte editovat text, který vystupuje do kusovníku? Tato debata hledá jak toto nemuset dělat. Stává se, že pro množství práce zapomenete po úpravě rozměru opravit i text s rozměrem vystupující do kusovníku.

EuroTec
11.03.2005, 14:08
Ne editovat text. Prostě změnit objekt v MechSoftu (lze ho i vyměnit za něco úplně jiného). Do kusovníku leze vždy to, co jste naposledy vybral v knihovně = BOMy se přepisují samy. Samozřejmně se jedná o jednoduché součástky

Otasek
11.03.2005, 22:51
Náhodou netušíte někdo:
- jak se dá přerušit běh VB sciptu ? (na nějaký interní podmět, který jeho během vznikl) - na další pokračování bych pak musel na něco kliknout... tedka používám MsgBox - vipadá to dost amatérsky

- existuje nějaký příkaz na pauzu ?

- jak měnit položku např. Label.Caption za běhu ? prozatím se mi povedlo rozchodit UserForm.Caption - u ostatních změny dosáhnu až po ukončení běhu.. chci vypisovat informace průběžně

- prokousávám se tím slíbeným makrem na kontrolu polotovarů a nějak nemožu rozchodit dělení řetězce dvěma znaky = "x" nebo "-"
pro jeden to funkuje: popis = Split(xyz, "x")
ale jak tam dstat i to "-" netuším (v php by to bylo [x-])
tak toto už sem odladil, nepovešdlo se mi to přímou cestou ale přednahrazením před samotným rozdělením
Otasek38423.5695717593

Otasek
12.03.2005, 15:59
Přináším první vlaštovku, toho co jsem sesmolil - kliknutím na obr získáte plný náhled
celý kod je postaven na základu od pana Lišky, viz předcházející strana ( http://www.cadforum.cz/forum/forum_posts.asp?TID=533&PN=1&TP N=5) + dodělané podle vlastních potřeb - každý používá jiný způsob značení, takže finální provedení nechávámna každém z Vás co se do toho pustí


.....
pokračuji i druhou vlaštovkou v trošku lepším provedením s ošetřením rozměrů obsahující 2 aneno 4 číselné údaje (což pochopitelně není ve formu vidět) a s možností volby zavírání souborů při nalezení nesrovnalostí.. prozatím se mě nějak moc nechce ladit možnost přímé editace nesprávných hodnot
ke kontrole jsem připojil i aktualizaci hmotnosti (se zaokrouhlením na celá kg při hmotnostech přesahující 50kg), ale protože soubory otvírám v cyklu s podmínkou
[code]while dir("cesta k adresáři" <>"")[/code] tak musím zavírat bez uložení, jinak se to zacyklí.. (asi by to chtělo vymyslet lepší variantu - prozatím to řeším ukládáním souborů do jiného adresáře a zpětným ručním překopírováním - tím se ale může narušit identifikace souborů...)
Otasek38423.8414699074

Otasek
12.03.2005, 22:59
Povedlo se někomu rozchodit to makro od p. Baďury ?

Doufám, že nebudu za hujera - ale třeba někomu zkrátím trápení s tím makrem - při vkládání došlo k vložení mezery do D5CDD505-2E9C-101B-9397-08002B2CF9AE + kod není zcelá úplný - na konci je volání Call oPropSets.FlushToFile - a raději si zapněte ohlašování chyb...

Ať se vám všem daří    a máte hezkou neděli

a pokud chcete využívat "dokonalosti" AI při zobrazování měřítek (0,33 => 1:3) tak si zakažte ShowScaleAsInventorOtasek38424.0083217593

Radek Pícha
14.03.2005, 18:57
Nevíte jaka) nastavit automatickou aktualizaci rozpisky?b) spustit aktualizaci rozpisky makrem VBA?

Jan Liska
14.03.2005, 20:35
Dobrý den,
pro aktualizaci rozpisky můžete použít metodu Update objektu PartsList.
S pozdravem
 

Radek Pícha
15.03.2005, 09:43
Pane Liška, děkuji za aktualizaci rozpisky, fungující zápis je:
'Aktualizace rozpisky, kde oVykres je dokument typu výkresoVykres.ActiveSheet.PartsLists.Item(1).Update
Měl bych ještě jednu prosbu:Dalo by se domluvit vytvoření Add-In z mého AplicationProject?Nemám vývojové prostředí, které je na to podle dřívějšího příspěvku potřebné.