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
Vytvořit téma
Koncepty
Seznam oblíbených
Soukromé zprávy
Pravidla
Live CHAT
VIP žádost
Základy Catia
Ke stažení
Doporučujeme
Pracovní příležitosti
Reklama a kampaně
O fóru
Nápověda

Několika násobný split plochy -> vrstevnice

Kompletní přehled příspěvků v tématu Několika násobný split plochy -> vrstevnice řazený podle data jejich publikace na fóru.

UživatelPříspěvek
Břeťa Doležal

Poslat zprávu | Profil
Datum: 7.8. 2012 | Zobrazeno: 10544x
Konfigurace CATIA:

Text dotazu:
Neřešil jste někdy někdo makro na rozřezání obecné plochy rovinami, tak aby se získali vrstevnice? Nejde mi o ty vrstevnice, ale o vzniklé plošky, které následně ještě budu chtít obarvit a vyzískat tak grafickou vizualici. Chci barevnou škálu po vrstevnicích,viz. připojený obrázek. V makrech na plochy (hybridshape) jsem se zatím příliš nepohyboval. Za případnou část kódu pro tuto či obdobnou aplikaci pro případnou úpravu budu velice rád.

Dále bych potřeboval část kódu, kde je měření min. vzdálenosti mezi plochou a rovinou, popř. jiné měření mezi objekty z hybridshape, které by se dalo poupravit pro mě. Díky!

Přiložené obrázky:

Břeťa Doležal

Poslat zprávu | Profil
[#3156] | Publikováno: 07.08. 2012 - 13:44
Nefunguje mi objSPAWorkbench.Measurable. Že prý objekt nepodporuje tuto vlastnost či metodu. Máte někdo zkušenosti?


'---- Begin resolution script For object : Sweep.1

Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument

Dim part1 As Part
Set part1 = partDocument1.Part

Dim hybridBodies1 As HybridBodies
Set hybridBodies1 = part1.HybridBodies

Dim hybridShapeFactory1 As HybridShapeFactory
Set hybridShapeFactory1 = part1.HybridShapeFactory

Dim hybridBody1 As HybridBody
Set hybridBody1 = hybridBodies1.Item("Geometrical Set.1")

Dim hybridShapes1 As HybridShapes
Set hybridShapes1 = hybridBody1.HybridShapes

Dim hybridShapeSweepExplicit1 As HybridShapeSweepExplicit
Set hybridShapeSweepExplicit1 = hybridShapes1.Item("Sweep.1")

Dim hybridShapePlaneOffset5 As HybridShapePlaneOffset
Set hybridShapePlaneOffset5 = hybridShapes1.Item("Plane.1")


Dim reference6 As Reference
Set reference6 = part1.CreateReferenceFromObject(hybridShapeSweepExplicit1)

Dim reference7 As Reference
Set reference7 = part1.CreateReferenceFromObject(hybridShapePlaneOffset5)

Dim objSPAWorkbench As Workbench
Set objSPAWorkbench = part1.Parent.GetWorkbench("SPAWorkbench")

Dim objMeasurable As Measurable
Set objMeasurable = objSPAWorkbench.Measurable(reference6)

Dim MinimumDistance As Double
MinimumDistance = TheMeasurable.GetMinimumDistance(reference7)

'Dim CompositeRef As Reference
'Set CompositeRef = reference6.ComposeWith(reference7)
'Dim TheMeasurable As Measurable
'Set TheMeasurable = objSPAWorkbench.Measurable(reference7)
'objSPAWorkbench.M
Dim hybridShapeSplit1 As HybridShapeSplit
Set hybridShapeSplit1 = hybridShapeFactory1.AddNewHybridSplit(reference6, reference7, 1)
hybridShapeFactory1.GSMVisibility reference6, 0
hybridBody1.AppendHybridShape hybridShapeSplit1
part1.InWorkObject = hybridShapeSplit1
part1.Update

'---- End resolution script
End Sub
Ing Jan Cinert

Poslat zprávu | Profil
[#3157] | Publikováno: 07.08. 2012 - 13:51
Tohle přesně jsem sice nedělal, ale řezáním geometrie už jsem zabýval. Teoreticky jsou vaše požadavky celkem dobře splnitelné, nejde o nic závratného, prakticky to ale bude složitější. Celou proceduru bych dal do velkého cyklu, kde se vždy vytvoří rovina a rozřízne zdrojovou plochu (Na začátku asi bude třeba určit polohu první roviny, pokud plocha bude v obecném prostoru.) Výsledkem řezu budou dvě nové plochy. Bude se muset určit, které z nich je "níž" (první nebo každá další vrstevnice) a ta se obarví podle nastavené škály.
Zjištění, které část Splitu je ta konečná, se provede vytvořením extrému a měřením.

Pokračuje se dál se zbytkem plochy. Pak je třeba kontrolovat, jestli už nejsme na konci, tj, jestli je ještě co řezat a pokud ne, cyklus ukončit.
Nevím jak se makru bude chovat, pokud budou vznikat vícenásobné výsledky - multi domain result.

Vytvoření Plane a Split si zkuste nahrát u kód vzniklý rekordérem jen upravit, je to chvilka a jde to snadno.

Měří se takto:

Dim Distance As Double


Dim oSPAWB As Workbench

Dim oMeasurable As Measurable

Set oSPAWB = oActiveDocument.GetWorkbench("SPAWorkbench")

Set oMeasurable = oSPAWB.GetMeasurable(oRef1)

Distance = oMeasurable.GetMinimumDistance(oRef2)

oRef1 a oRef2 jsou reference měřených objektů, např. plocha a rovina
Břeťa Doležal

Poslat zprávu | Profil
[#3160] | Publikováno: 07.08. 2012 - 14:41
Uživatel odpovídá na příspěvek #3157:


Díky. V nápovědě pro .GetMinimumDistance mají .Measurable na místo .GetMeasurable.

Hurá, mám první krok pro určení horní a spodní roviny.

To jak budu rozhodovat o tom který split nechat a který ne bude asi také "sranda". Vypadá to že budu muset dočasně udělat oba s volbou 1 a -1 a potom se z měření rozhodnout. Pokud bude výsledkem více ploch, tak je budu chtít zachovat všechny. To by snad nemusel být problém, pokud bude možné makrem dát volbu "keep all".
Ing Jan Cinert

Poslat zprávu | Profil
[#3161] | Publikováno: 07.08. 2012 - 14:45
Na keep all zapomeňte, tohle myslím nejde. Já to vždy dělal mrtvé, abych si ušetřl starosti. Na multi domain resultu pak spousta funkcí nejde udělat...
Břeťa Doležal

Poslat zprávu | Profil
[#3194] | Publikováno: 20.08. 2012 - 09:38
Díky za rady. Už se mi podařilo dodělat základ makra.
Multi domain byl bez komplikací, nechával po řezech vše, tudíž jsem to nemusel ani řešit. Na oplátku ještě kousek kódu na určení, zda jsou roviny rovnoběžné, pro případné zájemce:


Public Shared Function AreParalel(ByVal iPart As Part, ByVal iFirstPlane As Plane, ByVal iSecondPlane As Plane) As Boolean
Dim locSPAWB As SPATypeLib.SPAWorkbench
Dim locFirstReference, locSecondReference As Reference
Dim locMeasurable As SPATypeLib.Measurable
Dim dblAngle As Double

locFirstReference = iPart.CreateReferenceFromObject(iFirstPlane)
locSecondReference = iPart.CreateReferenceFromObject(iSecondPlane)
locSPAWB = iPart.Parent.GetWorkbench("SPAWorkbench") 'aktivování Space Analysis workbench
locMeasurable = locSPAWB.GetMeasurable(locFirstReference) 'definování 1.reference k měření (základna pro měření)
dblAngle = locMeasurable.GetAngleBetween(locSecondReference) 'měření úhlu mezi definovanou 2.reference a již definovanou 1.referencí

If dblAngle = 0 Then
Return (True)
Else
Return (False)
End If
End Function

Přiložené obrázky:

Ing Jan Cinert

Poslat zprávu | Profil
[#3197] | Publikováno: 20.08. 2012 - 10:10
Ten výsledek vůbec nevypadá špatně. Já už dlouho přemýšlím o makru na zjišťovaní tloušťky materiálu (výsledkem by byla nějaká podobná barevná mapa). Catie to sice umí celkem pěkně, ale musí na to být licence, kterou většinou firmy nemají.

Principem by bylo buď pasování vepsaných koulí mezi dvě plochy nebo vytvoření pravidelné sítě bodů na ploše a pak vytvoření normál a jejich průsečíků s druhou plochou. Rychlost a přesnost by pak závisela na roztečí koulí / bodů.
Břeťa Doležal

Poslat zprávu | Profil
[#3203] | Publikováno: 21.08. 2012 - 10:10
Nevíte někdo náhodou jak v API zapnout/vypnout volbu "Keep element in half space" u operace Split? Pokud řežu plochu s velikým výškovým rozdílem, tak není problém, zůstává jen jedna část, ale pokud jsou rozdíly pouze v setinách mm. Tak mi Catie nechává obě části plochy při řezu a pokud zapnu volbu Keep element in half space, tak to nechá jen jednu část, což potřebuji. Možná by to řešilo i nějaké přenastavení přesnosti pro výpočet, ale to už vůbec nevím jak ovlivnit....Díky za případnou radu.

Přiložené obrázky:

Ing Jan Cinert

Poslat zprávu | Profil
[#3204] | Publikováno: 21.08. 2012 - 12:07
Tak teď jsem chvíli koukal, že ten dialog je nějaký rozšířený. Tato funkcionalita je dostupná až od R20.

Zkuste na to rekordér, jestli to API podporuje, tak by to měl zaznamenat.

Přesnost pro výpočet je asi pevně daný přímo v kódu catie, s tím podle mě nic nepůjde.
Břeťa Doležal

Poslat zprávu | Profil
[#3216] | Publikováno: 23.08. 2012 - 09:48
Tak to API nepodporuje :o(. V manuálech nic a záznamník také nic. A jsem v ...
No nic, musím upravit výchozí plochu a změnit měřítko v jednom směru, takto to funguje. změní se výškové rozdíly z desítek mm na jednotky mm a bude.


Uživatel nepřihlášen

Pro zobrazení obsahu stránky / provedení akce (vytvoření nového téma, napsání odpovědi do diskuse apod.) musíte být přihlášeni.