Files
UnrealEngine/Engine/Source/Runtime/Datasmith/CADKernel/Base/Public/Topo/TopologicalEntity.h
2025-05-18 13:04:45 +08:00

100 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Core/CADKernelArchive.h"
#include "Core/CADEntity.h"
#include "Core/HaveStates.h"
#include "Core/Types.h"
namespace UE::CADKernel
{
class FModelMesh;
class FTopologicalFace;
class FTopologyReport;
class CADKERNEL_API FTopologicalEntity : public FEntity
{
friend class FCoreTechBridge;
protected:
FIdent CtKioId = 0;
public:
FIdent GetKioId() const
{
return CtKioId;
}
virtual void Serialize(FCADKernelArchive& Ar) override
{
FEntity::Serialize(Ar);
Ar << CtKioId;
}
#ifdef CADKERNEL_DEV
virtual FInfoEntity& GetInfo(FInfoEntity&) const override;
#endif
const bool IsApplyCriteria() const
{
return ((States & EHaveStates::IsApplyCriteria) == EHaveStates::IsApplyCriteria);
}
virtual void SetApplyCriteriaMarker() const
{
States |= EHaveStates::IsApplyCriteria;
}
virtual void ResetApplyCriteria()
{
States &= ~EHaveStates::IsApplyCriteria;
}
bool IsNotMeshable() const
{
constexpr EHaveStates MeshedOrDeletedOrDegenerated = EHaveStates::IsMeshed | EHaveStates::Degenerated | EHaveStates::IsDeleted;
return ((States & MeshedOrDeletedOrDegenerated) != EHaveStates::None);
}
bool IsMeshable() const
{
constexpr EHaveStates MeshedOrDeletedOrDegenerated = EHaveStates::IsMeshed | EHaveStates::Degenerated | EHaveStates::IsDeleted;
return ((States & MeshedOrDeletedOrDegenerated) == EHaveStates::None);
}
/**
* An edge is premesh if the cutting points of the mesh have been defined but the mesh is not build
* This is used during thin zone meshing i.e. due to the process, an edge can be premeshed but not finalized
*/
bool IsPreMeshed() const
{
constexpr EHaveStates MeshedOrPreMeshed = EHaveStates::IsMeshed | EHaveStates::IsPreMeshed;
return ((States & MeshedOrPreMeshed) != EHaveStates::None);
}
bool IsMeshed() const
{
return ((States & EHaveStates::IsMeshed) == EHaveStates::IsMeshed);
}
virtual void SetPreMeshedMarker()
{
States |= EHaveStates::IsPreMeshed;
}
virtual void SetMeshedMarker()
{
constexpr EHaveStates MeshedOrPreMeshed = EHaveStates::IsMeshed | EHaveStates::IsPreMeshed;
States |= MeshedOrPreMeshed;
}
virtual void ResetPreMeshed()
{
States &= ~EHaveStates::IsPreMeshed;
}
};
} // namespace UE::CADKernel