Zobrazit plnou verzi příspěvku: Vyčtení souřadnic bodů z modelu

michal.stary
22.01.2018, 11:25
Dobrý den,potřeboval bych poradit ohledně možnosti jak co nejsofistikovaněji získat souřadnice bodů na zakřivené ploše. Chápu, že běžný je spíše opačný postup - z mračna bodů vytvořit plochu, ale to není můj případ.Na zakřivené ploše potřebuji získat matici bodů (v definované rozteči) a načíct jejich souřadnice (ideálně s možností exportu do xls apod.).Napadá mě jen amatérský postup, který není možné aplikovat často a ve větším rozsahu. Konkrétně takto:1. vytvořím si vertikální osu;2. vygeneruji pole těchto os v potřebné rozteči;3. vytvořím body v průsečíku os a dané plochy;4. odměřuji souřadnice bodu vůči základně, tj. výšku Z, protože X, Y je dáno maticí os.Doplňující informace:1. většinou se jedná o soubory v univerzálním formátu STEP;2. základní souřadný systém modelu neodpovídá požadovanému souřadnému systému pro odečet hodnot, ideální by byl automatizovaný přepočet, ale to už je zas jiný problém, kterým asi nemá smysl teď komplikovat tento dotaz.

Vladimír Michl
22.01.2018, 11:46

Můžete si vytvořit pracovní body a ty pak promítnout na vybranou plochu (3D náčrt > Kreslení > Promítnout na plochu). Souřadnice pak lze vyexportovat.

Navara
22.01.2018, 14:06

Záleží na tom, kolik toho je a jak často je potřeba to provádět. Vámi uvedený postup funguje pro pár bodů a pokud to není příliš často.Pokud by to mělo být častější, tak bych na to šel přes programování. Buď Inventor umí přímo vygenerovat sadu bodů, které leží na ploše, ale není možné to příliš ovládat. Nebo zadat rozsah souřadnic X a Y (možno vztáhnout k vlastnímu souřadnému systému) a potom iterovat a hledat průsečík s plochou ve směru osy Z. EDIT:Tady je kód pro tu jednodušší variantu. [code]Sub GetFacePoints()    Dim oFace As Face    Set oFace = ThisApplication.ActiveDocument.SelectSet(1)    Dim tolerance As Double    Dim vertexCount As Long    Dim facetCount As Long    Dim vertexCoordinates() As Double    Dim normalVectors() As Double    Dim vertexIndices() As Long        tolerance = 0.01        Call oFace.CalculateFacets(tolerance, vertexCount, facetCount, vertexCoordinates, normalVectors, vertexIndices)        Call CreateStrokesWorkPoints(vertexCoordinates)    End SubSub CreateStrokesWorkPoints(vertexCoordinates() As Double)    Dim part As PartDocument    Set part = ThisApplication.ActiveDocument        Dim wPoints As workPoints    Set wPoints = part.ComponentDefinition.workPoints        For i = 0 To UBound(vertexCoordinates) Step 3        Call wPoints.AddFixed(ThisApplication.TransientGeometry.CreatePoint(vertexCoordinates(i), vertexCoordinates(i + 1), vertexCoordinates(i + 2)))    Next    End Sub[/code] Výsledek pak vypadá nějak takhle:
Navara2018-01-22 14:34:24

michal.stary
22.01.2018, 15:23
Velice děkuji za obě reakce. Rozumné cesty tedy evidentně jsou, uvidím která bude pro mě vhodnější.Dovolil bych si ale položit s tím související doplňující dotaz. Snad nebude vadit, že to nechám v jednom tématu.V případě, že výše uvedený objekt nemá rovnou základnu a ani souřadný systém modelu nekoresponuje s geometrií, tak nevím od čeho se "odrazit", viz obr (modrá základna).Pokud bych chtěl vytvořit rovinu, na kterou by šlo daný objekt položit (a od ní pak definovat výšku bodů), tak mě nenapadá jak postupovat nebo pod jakým tématem danou problematiku hledat. Tedy jak najít na prostorové kontuře 3 dotykové body s rovinou.

Navara
22.01.2018, 15:29

To záleží hodně na účelu, pro který to potřebujete. Dá se využít přímá manipulace s tělesem (posun, otočení) a tím ho dostat do "správné" polohy vůči základnímu souřadnému systému. 

Navara
22.01.2018, 20:41

Další možností je definovat si vlastní souřadný systém, který je možné volně přetáhnout a natočit tak, aby vyhovoval vašim potřebám. Inventor potom obsahuje řadu nástrojů pro práci s transformačními maticemi a pomocí nich je možné přepočítat polohu bodů z globálního souřadného systému do vašeho uživatelského.Takže si zvolte postup, který vám bude vyhovovat.

michal.stary
23.01.2018, 08:32
Omlouvám se, asi jsem to nedostatečně popsal. Tyto kroky bych chápal, šlo mi spíše o to, čeho se chytit. Pokud by spodní zvlněnou hranu tvořily 3 vrcholy, tak si mezi nima udělám rovinu a zbytek je tak nějak jasný nebo tedy stejným způsobem přesunu objekt do základního souřadného systému atp.Ale jak vytvořit tu rovinu nebo jak posunout objekt aby ležel základnou na rovině, když je obvod podstavy tvořen sadou různě zakřivených křivek. Tedy něco jako vytvořit tečnou rovinu k 3D křivce (resp. sadě křivek) dotýkajícíse jich pouze ve 3 bodech a přitom tu rovinu 3D křivka nikde neprotíná. Samozřejmě ještě záleží na poloze těžiště a směru působení gravitace v jakých 3 bodech by to bylo, ale to už bych neautomatizoval a rozhodoval bych to logicky.V nakresleném případě by se rovina dotýkala křivek dejme tomu podle směru gravitace buď v černených nebo modrých bodech. Pokud by to bylo ve vrcholech, tak žádný problém, ale většinou to bude někde na křivce (tedy nutno udělat tečnu).

Navara
23.01.2018, 08:54

A jsme zpátky u toho, k čemu je to dobré. CO všechno si můžete zvolit a CO je pevně dané. USS i pootočení si můžete zvolit od oka podle citu. Rovinu můžete definovat například pomocí tří bodů, dvou přímek, atd. Tohle už je na vás. S podobnou úlohou jsem se setkal jenom při zjišťování bodů pro kontaktní měření sondou a tam je potřeba dodržet souřadný systém. Nebo si to vyřeší operátor na stroji.