Entity
Entita představuje Pohyblivý objekt v prostoru a je základním stavebním blokem vzdáleně vykresleného obsahu.
Vlastnosti entit
Entity mají transformaci definovanou polohou, otočením a škálováním. Vlastními entitami nemají žádné pozorovatelské funkce. Místo toho je chování přidáno prostřednictvím komponent, které jsou připojeny k entitám. Například připojením CutPlaneComponent se vytvoří vyjmutá rovina na pozici entity.
Nejdůležitější aspekt samotné entity je hierarchie a výsledná hierarchická transformace. Například pokud je více entit propojeno jako podřízené pro sdílenou nadřazenou entitu, všechny tyto entity lze přesunout, otočit a škálovat v úlohách změnou transformace nadřazené entity. enabledStav entity lze také použít k vypnutí viditelnosti a reakcí na přetypování paprsků pro úplný dílčí graf v hierarchii.
Entita je jedinečně vlastněna její nadřazenou položkou, což znamená, že pokud je Nadřazená aktivita zničena s Entity.Destroy() , tak jsou její podřízené a všechny připojené součásti. Proto je odebrání modelu z scény provedeno voláním Destroy na kořenový uzel modelu, vrácený RenderingSession.Connection.LoadModelAsync() nebo jeho variantou SAS RenderingSession.Connection.LoadModelFromSasAsync() .
Entity se vytvoří, když server načte obsah nebo když chce uživatel přidat objekt do scény. Pokud chce například uživatel přidat vyjmutou plochu k vizualizaci vnitřku sítě, může uživatel vytvořit entitu, kde by měla existovat plocha, a pak do ní přidat komponentu vyjmuté plochy.
Vytvoření entity
Chcete-li přidat novou entitu do scény, například předat jako kořenový objekt pro načítání modelů nebo připojit k ní komponenty, použijte následující kód:
Entity CreateNewEntity(RenderingSession session)
{
Entity entity = session.Connection.CreateEntity();
entity.Position = new LocalPosition(1, 2, 3);
return entity;
}
ApiHandle<Entity> CreateNewEntity(ApiHandle<RenderingSession> session)
{
ApiHandle<Entity> entity(nullptr);
if (auto entityRes = session->Connection()->CreateEntity())
{
entity = entityRes.value();
entity->SetPosition(Double3{ 1, 2, 3 });
return entity;
}
return entity;
}
Funkce dotazů
Existují dva typy funkcí dotazu pro entity: synchronní a asynchronní volání. Synchronní dotazy lze použít pouze pro data, která jsou k dispozici v klientovi a která nezahrnují množství výpočtů. Příklady jsou dotazování na součásti, relativní transformace objektů nebo vztahy nadřazenosti a podřízenosti. Asynchronní dotazy jsou používány pro data, která se nachází pouze na serveru, nebo zahrnují další výpočet, který by byl příliš nákladný ke spuštění na klientovi. Příklady jsou prostorové datové meze dotazy nebo dotazy na metadata.
Dotazování na součásti
Chcete-li najít komponentu určitého typu, použijte FindComponentOfType :
CutPlaneComponent cutplane = (CutPlaneComponent)entity.FindComponentOfType(ObjectType.CutPlaneComponent);
// or alternatively:
CutPlaneComponent cutplane = entity.FindComponentOfType<CutPlaneComponent>();
ApiHandle<CutPlaneComponent> cutplane = entity->FindComponentOfType(ObjectType::CutPlaneComponent)->as<CutPlaneComponent>();
// or alternatively:
ApiHandle<CutPlaneComponent> cutplane = entity->FindComponentOfType<CutPlaneComponent>();
Dotazování transformací
Transformační dotazy jsou synchronní volání objektu. Je důležité si uvědomit, že transformace, které se dotazují prostřednictvím rozhraní API, jsou transformace místních prostorů vzhledem k nadřazenému objektu. Výjimky jsou kořenové objekty, pro které je místní prostor a světový prostor stejný.
Poznámka
Neexistuje žádné vyhrazené rozhraní API pro dotazování na transformaci celého objektu na světové místo.
// local space transform of the entity
Double3 translation = entity.Position;
Quaternion rotation = entity.Rotation;
// local space transform of the entity
Double3 translation = entity->GetPosition();
Quaternion rotation = entity->GetRotation();
Dotazování na prostorové meze
Vázané dotazy jsou asynchronní volání, která fungují v celé hierarchii objektů a používají jednu entitu jako kořen. Viz vyhrazená kapitola o objektových vazbách.
Dotazování na metadata
Metadata jsou další data uložená v objektech, která server ignorují. Metadata objektu jsou v podstatě sada dvojic (název, hodnota), kde hodnota může být číselná, logická nebo řetězcová. Metadata lze exportovat pomocí modelu.
Dotazy na metadata jsou asynchronní volání konkrétní entity. Dotaz vrátí pouze metadata jedné entity, nikoli sloučené informace dílčího grafu.
Task<ObjectMetadata> metaDataQuery = entity.QueryMetadataAsync();
ObjectMetadata metaData = await metaDataQuery;
ObjectMetadataEntry entry = metaData.GetMetadataByName("MyInt64Value");
System.Int64 intValue = entry.AsInt64;
// ...
entity->QueryMetadataAsync([](Status status, ApiHandle<ObjectMetadata> metaData)
{
if (status == Status::OK)
{
ApiHandle<ObjectMetadataEntry> entry = *metaData->GetMetadataByName("MyInt64Value");
int64_t intValue = *entry->GetAsInt64();
// ...
}
});
Dotaz bude úspěšný i v případě, že objekt neobsahuje žádná metadata.
Dokumentace k rozhraní API
- Třída entity C#
- C# RenderingConnection. CreateEntity ()
- Třída entity C++
- C++ RenderingConnection:: CreateEntity ()