25건의 항목
개요 주어진 2개의 메쉬를 통해 연산을 하는 클래스이다.
전처리 메시 복사 및 변환 FDynamicMesh3 CutMeshB( *Meshes[ 1 ] ); if (Result != Meshes[ 0 ] ) { *Result = *Meshes[ 0 ]; } FDynamicMesh3* CutMesh[ 2 ]{ Result, &CutMeshB }; 연산을 수행할 두 메쉬를 FDynamicMesh3로 변환한다.
class FMeshNormals { protected: const FDynamicMesh3* Mesh; TArray< FVector3d > Normals; }; 메쉬의 법선 벡터를 계산하여 캐슁하는 구조체.
struct FMeshTriInfoCache { TDynamicVector< FVector3d > Centroids; TDynamicVector< FVector3d > Normals; TDynamicVector< double > Areas; } 메쉬의 삼각형별 기본 정보 캐쉬 삼각형의 면적인 Areas는 삼각형의 면적 계산을 통해 계산된다.
새로운 엣지 단순화 엣지 단순화 옵션 if ( bSimplifyAlongNewEdges ) { SimplifyAlongNewEdges( NumMeshesToProcess, CutMesh, CutBoundaryEdges, AllVIDMatches ); } 부울 연산으로 생성된 새로운 엣지를 따라 불필요한 정점들을 제거하여 메시를 단순화한다.
전처리 Operation을 적용, 즉 메쉬를 구성하는 삼각형들의 정보를 변경하기 위해 CutBoundaryEdiges, PossUnmatchedBdryVerts, KeepTri를 준비한다.
허용 오차 계산 double DegenerateEdgeTolSq = DegenerateEdgeTolFactor * DegenerateEdgeTolFactor * SnapTolerance * SnapTolerance; 최적화를 위해 squared 기준으로 연산한다.
FMeshSurfacePath에서 메쉬 표면 경로를 실제 메시에 반영하는 함수이다. AddViaPlanarWalk로 찾은 경로의 각 점을 실제 메시 정점으로 변환하여 메시 토폴로지를 수정한다.
FMeshSurfacePath에서 평면을 따라 메시 표면에 경로를 생성하는 함수이다. Planar Walk 알고리즘을 구현하여 시작점에서 끝점까지 메시 표면을 따라 최단 경로를 찾는다.
enum class ESurfacePointType { Vertex = 0, // 정확히 정점에 존재하는 타입 Edge = 1, // 엣지 상에 존재하는 타입 Triangle = 2 // 삼각형 표면상에 존재하는 타입 };.
struct FMeshSurfacePoint { int ElementID; // 정점 / 엣지 / 삼각형 ID FVector3d BaryCoord; // 무게중심 좌표 ESurfacePointType PointType; // 점의 타입 }; 메시 표면의 한 점을 표현하는 구조체이다.
3D 메시 표면 위에 경로를 삽입하고 관리하는 클래스이다.
교차 세그먼트의 양 끝점을 연결하는 경로를 생성한다.
FCutWorkingInfo.AddSegments()를 통해 분류된 교체 세그먼트들 중에서 엣지 위에 있는 교차 세그먼트를 처리한다. AB엣지상에 있는 교차 세그먼트 P를 기준으로 AP, PB 2개의 엣지로 분할한다.
FCutWorkingInfo.AddSegments()를 통해 분류된 교체 세그먼트들 중에서 삼각형 내부에 있는 교차 세그먼트를 처리한다. 처리는 삼각형 내부의 점 P를 기준으로 하나의 삼각형을 3개의 삼각형으로 분할한다.
교차 세그먼트의 각 끝점을 분석하여 EVertexType으로 분류한다.
개요 struct FCutWorkingInfo { FDynamicMesh3* Mesh; // 작업할 메시 double SnapToleranceSq; // 스냅 허용 오차 (제곱값) TMultiMap< int, int > FaceVertices; // 삼각형 내부에 삽입할 점들 TMultiMap< int, int > EdgeVertices; // 엣지 위에 삽입할 점들 TArray< FVector3d > BaseFaceNormals; // 원본 삼각형의 법선들 TArray< FPtOnMesh &g...
bool FMeshMeshCut::Cut( const MeshIntersection::FIntersectionsQueryResult& Intersections ) { check( !bCutCoplanar ); ResetOutputs(); bool bSuccess = true; int MeshesToProcess = bMutuallyCut ? 2 : 1; for ( int MeshIdx = 0; MeshIdx < MeshesToProcess; MeshIdx++ ) { MeshCut::FCutWorkingInfo Worki...
개요 두 메시가 교차하는 부분을 따라 메시를 자르는 클래스이다. 이 때 자른 부분에 새로운 정점과 엣지가 추가된다.
개요 엣지를 분할하여 새로운 정점을 추가하고 새로 추가된 정점에 대해 토폴로지를 재구성한다. Input 타입매개변수설명inteab분할할 엣지 IDdoubleSplitT분할 위치 (0.0=정점A, 0.5=중간, 1.0=정점B) 엣지 ID와 분할 위치를 입력받는다.
개요 무게중심 좌표를 이용하여 삼각형 내의 한 점에 대한 정점 정보를 계산한다. 무게중심 좌표에는 각 삼각형의 정점과 비중값이 있기 때문에 각 정점 정보를 비중값으로 보간하여 계산할 수 있다.
개요 삼각형 내부에 새로운 정점을 삽입하여 1개의 삼각형을 3개로 분할한다.
// 메시 데이터 구조 struct FDynamicMesh3 { // 기하학적 요소 TDynamicVector< FVector3d > Vertices; // 정점 위치 TDynamicVector< FIndex3i > Triangles; // 삼각형 (V0, V1, V2) TDynamicVector< FEdge > Edges; // 엣지 정보 // 토폴로지 정보 FRefCountVector TriangleRefCounts; // 삼각형 참조 카운트 FRefCountVector VertexRefCount...
개요 enum class EBooleanOp { Union, Difference, Intersect, TrimInside, TrimOutside, NewGroupInside, NewGroupOutside }; FMeshBoolean에서 사용하는 불린 연산 타입을 정의한다.