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
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Vznik a historie
Statistiky
Přehledy
Hledat na fóru
Nápověda

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émaZaloženoOdpověď
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

Set hybridShapeIntersection1 = hybridShapeFactory1.AddNewIntersection(hybridShapePlaneOffset1, objHShape)

call HybridBody1.AppendHybridShape(hybridShapeIntersection1)
'bold'>call objPart.Update
'ulozeni souradnic krajnich bodu intersectionu Do Krivka

Set reference7 = objPart.CreateReferenceFromObject(hybridShapeIntersection1)
Set TheMeasurable = TheSPAWorkbench.GetMeasurable(reference7)
call TheMeasurable.GetPointsOnCurve(Krivka)

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()

Dim Productdocument1 As ProductDocument
Set Productdocument1 = CATIA.ActiveDocument
Dim Product1 As Product
Set Product1 = Productdocument1.Product
Dim Selection As Selection
Set Selection = CATIA.ActiveDocument.Selection
Dim InputObjectType(0) As Variant
InputObjectType(0) = "Product"
Dim MySTATUS As String

Call Selection.Clear
Dim vSel As Variant
Set vSel = Selection

MySTATUS = vSel.SelectElement2(InputObjectType, "Vyber produkt", False)
End Sub


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

Dim sMessage As String

sMessage = "text"
Call oDataObject.SetText(sMessage)
Call oDataObject.PutInClipboard

 
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