Seznam příspěvků uživatele
V tabulce jsou všechny příspěvky uživatele Michal (CATaMAT) řazené podle témat. Kliknutím na název téma se zobrazíte celou diskusi.
Téma | Založeno | Odpověď | ||
Kompilace maker do R24 | 2.2. 2015 | V 64bit VBA rozhrani se změnily deklarace API funkcí apod.
jak na to je napsané např. zde: https://msdn.microsoft.com/en-us/library/office/ee691831(v=office.14).aspx tady je docela pěkný seznam API funkcí s 32bit a 64bit deklarací. Ještě jsem měl jeden dobrý odkaz, ale nemůžu ho najít, což mě samotného teda dost mrzí. Potom jsou docela problémy pokud používáte 32bit komponenty. Typicky je to např. common dialog. 64bit varianty neexistují, takže se celý dialog musí nahradit API funkcemi. Ale jde to a funguje to potom jak ve 32bit tak v 64bit VBA rozhraní | ||
Spuštění makra z externího souboru | 15.5. 2014 | ve VBA se ještě musí nastavit velikost pole, jestli si dobře pamatuju.
ReDim Params(1) vytvoří dvouprvkové pole nevím přesně jak to bude ve vbscriptu. | ||
Súradnice bodu | 6.3. 2014 | Nedá mi to... odpověď na dotaz: ano řešení existuje:)
Počítám, že chcete asi aj vědět jaké? Hledejte v nápovědě "Measurable" objekt. příklad Dim TheSPAWorkbench As SPAWorkbench Dim TheMeasurable As Measurable Dim vMeasurable As Variant Dim Coordinates(2) Dim oPart As Part Dim oPartDoc As PartDocument Dim oPoint As Object Dim oRef As Reference Set oPartDoc = CATIA.ActiveDocument Set oPart = oPartDoc.Part Set oPoint = 'bod, ktery chcete merit Set oRef = oPart.CreateReferenceFromObject(oPoint) Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench") Set TheMeasurable = TheSPAWorkbench.GetMeasurable(oRef) Set vMeasurable = TheMeasurable Call vMeasurable.GetPoint(Coordinates) dX = CDbl(Coordinates(0)) dY = CDbl(Coordinates(1)) dZ = CDbl(Coordinates(2)) | ||
R22 a problém s catvba | 3.12. 2014 | Podle mě není důvod v R22 registrovat knihovnu z R19. Jestli Vám padá makro, když se snažíte použít nějaký objekt z knihovny, tak je knihovna špatně zaregistrovaná a nějakou knihovnu prostě zaregistrovat musíte. Tak je lepší vždycky tu novější.
Jinak mi na registraci knihovny fungoval návod: http://digital.ni.com/public.nsf/allkb/4F811A9B23F1D46E862566F700615B7A sekce "Type Libraries". | ||
Označení dílu a zjištění sestavy do které patří | 25.9. 2013 | Zdravím,
nejsem si jistý jestli Vám úplně dobře rozumím, ale chcete vědět jméno nadřazené sestavy. dim oSelProduct as Product set oSelProduct = UserSel.Item(1).Value do nadřazené sestavy se potom dostanete přes parenta vybrané sestavy dim oParentProduct as Product set oParentProduct = oSelProduct.Parent.Parent Snad je to, co jste hledal. | ||
Prace s polem (array) | 16.9. 2013 | Zdravím,
add 1) - v tomto případě mi přijde vhodnější použít kolekci než pole. Dim colBodies as Collection set colBodies = new Collection metodou Add přidáš objekt do kolekce - je to přímo body, které by si potom chtěl dát do NoShow. Tzn nemusíš ho potom hledat přes FindObjectByName, ale colBodies.Item(1) můžeš přidat do selekce. add 2) - opět bych volil kolekci, protože do kolekce můžeš přidat objekt s klíčem - colBodies.Add(objekt, klíč). Spadne to pokud vložíš dvakrát stejný klíč. Nicméně colBodies.Item(klíč) ti vrátí objekt. Když klíč neexistuje, tak to taky spadne. Procházet pole mi přijde dost zdlouhavé. Teď mě ani nenapadá jak to jednoduše provést. Používám kolekce | ||
Makro - Vytvorenie referencie z bodov zo skice pre vytvorenie geometrie valca | 19.7. 2013 | No ono & se používá na spojení řetězců, např:
Dim s1 as string dim s2 as string dim s3 as string s1 = "abraka" s2 = "dabra" s3 = s1 & " " & s2 debug.print s3 ve vysledku bude "abraka dabra" takže právě logicky musíš udělat zřetězení, protože debug.print (BEdge:(Brp:(Sketch.1;PNum) ti vypíše (BEdge:(Brp:(Sketch.1;PNum) PNum je v tomto případě kus řetězce, nikoli hodnota tvojí proměnné. kdežto debug.print (BEdge:(Brp:(Sketch.1; " & (PNum) & " ) ti vypíše např (BEdge:(Brp:(Sketch.1;1) pokud PNum = 1, prostě do řetězce vložíš hodnotu proměnné PNum | ||
Makro - Vytvorenie referencie z bodov zo skice pre vytvorenie geometrie valca | 16.7. 2013 | Asi si trochu nerozumíme.
máš řetězec "BorderFVertex:(BEdge:(Brp:(Sketch.1;PNum);None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)" tzn. PNum se teď bere jako kus stringu. Nedosadí se za PNum 1, 2 atd. musíš si ten řetězec složit nějak takto -> "BorderFVertex:(BEdge:(Brp:(" & JmenoSketche & ";" & Cstr(PNum) & ");None:(Limits1:();Limits2:();+1);Cf11:());WithPermanentBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)" nejsem si jistý jestli ti to teď pojede, myslím, že ještě se musí pošéfovat uvozovky. Když tak bych zkusil pohledat nějaké makro. | ||
Makro - Vytvorenie referencie z bodov zo skice pre vytvorenie geometrie valca | 16.7. 2013 | Tak říkal si, že procházíš body v cyklu.
Nejdřív si nahraj makro pro jeden bod, potom pro druhý atd. a porovnej si řetězec v BRepName, aby si zjistil v čem se liší. | ||
Makro - Vytvorenie referencie z bodov zo skice pre vytvorenie geometrie valca | 16.7. 2013 | Zdravím,
S BRepName je to vždycky trochu problém. Proč je tam BorderFVertex a ne jen Vertex to nevím. Jednou je tam BorderFVertex, tak to jinak nebude. Zkusil bych nejdřív vytvořit referenci pomocí funkce CreateReferenceFromObject. Někdy ale referenci nejde takto vytvořit, tak se musí použít BRepName. Když si nahraješ makro vícekrát s různými body (nejlépe si je nějak pojmenovat, aby se lišily) tak se dá v řetězci najít, co je všude stejné a kde se dosazuje jméno daného bodu. Potom se dá řetězec vytvořit programově a použít ho ve funkci CreateReferencoFromBRepName. Ale už se mi stalo, že ani po vytvoření řetězce se mi nepodařilo vytvořit referenci nebo se řetězec nedal ani vytvořit. V tvém případě bych řekl, že se bude měnit Sketch.1, SGEO.Item.Value a sketch1 na konci řetězce. Michal | ||
Chyba při GetPointsOnCurve | 27.3. 2013 | není mezi tím žádný rozdíl. Já to používám, přijde mi kód přehlednější. | ||
Chyba při GetPointsOnCurve | 25.3. 2013 | ještě jeden nápad, zkusil bych přehodit update partu
nejsem si jistý, ale není náhodou reference7 nothing, když nedojde k updatu? a vlastně ještě druhý nápad. Jakého typu je TheMeasurable? Zkuste ho deklarovat jako variant. | ||
Chyba při GetPointsOnCurve | 21.3. 2013 | Ještě bych zkusil změnit deklaraci
Dim reference1, reference7 As Reference na Dim reference1 As Reference Dim reference7 As Reference VB nepodporuje deklaraci jak v C. Umožňuje to napsat i zkompilovat, ale výsledek je myslím takový, že pouze první proměnná je daného typu a ostatní jsou jako variant. Třeba to pomůže. | ||
selectelement2 - 3 - 4 | 5.10. 2012 | Tak reference, které se makro odkazuje najdete v horním menu ve VBA prostředí menu Tools\Reference. Měla by fungovat zkratka Alt+T+R.
Nenapadá mě žádný důvod proč to nechce jet. Asi bych zkusil přeinstalovat VBA rozhraní v CATII. | ||
selectelement2 - 3 - 4 | 4.10. 2012 | No tak to teda nevím. Zkusil jsem kód jak jste poslal + ten variant a u mě to funguje.
Sub main() asi bych vytvořil nové makro a zkusil bych to znovu. Možná ještě zkontrolovat reference (tools\references) jestli máte zaškrtnutou referenci na InfInterfaces knihovnu. Ale tak to by mělo být. | ||
selectelement2 - 3 - 4 | 4.10. 2012 | zkusil bych ještě
Dim vSelection as Variant set vSelection = Selection 'nejsem si jistý jestli musí být na začátku set a potom Váš kod call vSelection.Clear MySTATUS = vSelection.SelectElement2(InputObjectType, "Vyber produkt", False) snad Vám to pomůže. Když tak zkuste připojit i chybovou hlášku... | ||
Podminka If | 30.8. 2012 | To Pavel Krsek:
omylem jsem Vás mystifikoval. chtěl jsem poslat tento odkaz http://www.vb-helper.com/howto_net_compare_float.html je to sice pro .Net, ale princip je stejný. Jde hlavně o tohle CStr(Math.Abs(A - B) < 0.00001), kde 0.00001 určuje s jakou přesností porovnáváte dva doubly. Přetypování na Single není úplně nejlepší, taky může mít desetinnou část. | ||
Podminka If | 30.8. 2012 | tak záleží s jakou přesností chcete porovnávat. Jestli Vám stačí porovnávat jen celou část čísla, tak by stačilo i přetypování CLng.
Jak se to dá řešit je např. http://www.techrepublic.com/article/comparing-double-vs-single-data-types-in-vb6/5978932 | ||
Podminka If | 30.8. 2012 | zdravím,
jakého datového typu je proměnná YDistance a YDistanceT? Jestli porovnáváte dvě proměnné typu double můžou se lišit třeba na 13 pozici za desetinnou čárkou, pak Vám podmínka neklapne... | ||
Zmena offset plane | 20.7. 2012 | Zdravím,
nejsem si jistý, jestli to pomůže, ale jestli máte part a referenci na plane tak se dá udělat něco takového dim oPlaneParameters as Parameters set oPlaneParameters = oPart.Parameters.Sublist(oPlane, true) výsledkem je podmnožina atributů, které se vztahují k plane a v ní by mel být parametr offset. Nedokážu říct jak moc to bude použitelné v tomto případě, ale už mi to párkrát pomohlo. Psal jsem to z hlavy, takže syntax se může lišit. Michal | ||
Axis v dierach | 26.4. 2012 | Zdravím,
jednou sem na solidu hledal díry s určitým průměrem. Fungovalo to tak, že sem přes Selection.Search vyhledal všechny edge (nebo možná face, už si to přesně nepamatuju) a potom sem přes Measurable zkoušel získat průměr. Tím sem zjistil, že se jedná o díru. Podle mě by Vám Measurable mohlo vrátit i souřadnice středu díry. Takhle by mohlo jít získat díry, ale dál na ten axis, to už si nejsem tak úplně jistý. Michal | ||
Copy to clipboard | 11.4. 2012 | jesli si dobre vzpominam tak VBA nabizi neco jako Clipboard, i sem to kdysi pouzil...
Dim oDataObject As DataObject | ||
Nastaveni zobrazovani souboru...File Selection | 12.3. 2012 | ještě musím dodat, že to vybrané z nějakého anglického vb fóra, každopádně doposud bezproblémově funkční.
Michal | ||
Nastaveni zobrazovani souboru...File Selection | 12.3. 2012 | Zdravím,
nedávno jsem řešil stejný problém ve VBA. Dá se to "obejít" pomocí API funkcí, viz. přiložený soubor. Nakopírujte do modulu, funkce AddressOf nejde použít v class. Michal |