Open Mesh
Using standard properties
표준 속성을 추가하고 제거하는 방법, 표준 속성의 값을 가져오고 설정하는 방법
표준 속성을 엔티티에 추가하려면 적절한 요청(request) 메서드를 사용하면 된다.
request_face_normals()와 같은 메서드를 사용할 수 있다. 유일한 예외는 정점 위치(*)다. 이는 영구적으로 사용 가능하므로 추가 및 제거할 수 없다.
메시 객체에 정점 법선을 추가
파일을 로드
파일이 정점 법선을 제공하는지 확인하고, 제공하지 않으면 계산
각 정점을 정규화된 법선 방향으로 한 단위 길이만큼 이동
결과적인 위치를 std::cout에 출력
이러한 속성들은 update_normals()를 사용하여 정점 법선을 계산할 때 필요하다.
mesh.request_vertex_normals();
mesh.request_face_normals();
메시에 이미 정점 법선 속성이 있는지 확인하고 삭제할 수 있다.
if (!mesh.has_vertex_normals())
{
std::cerr << "ERROR: Standard vertex property 'Normals' not available!\n";
return 1;
}
// 삭제
mesh.release_vertex_normals();
요청 가능한 속성
request_edge_status()
request_edge_colors()
request_face_colors()
request_face_normals()
request_face_status()
request_face_texture_index()
request_halfedge_status()
request_halfedge_normals()
request_halfedge_texcoords1D()
request_halfedge_texcoords2D()
request_halfedge_texcoords3D()
request_vertex_colors()
request_vertex_normals()
request_vertex_status()
request_vertex_texcoords1D()
request_vertex_texcoords2D()
request_vertex_texcoords3D()
속성 삭제
release_edge_status()
release_edge_colors()
release_face_colors()
release_face_normals()
release_face_status()
release_face_texture_index()
release_halfedge_status()
release_halfedge_normals()
release_halfedge_texcoords1D()
release_halfedge_texcoords2D()
release_halfedge_texcoords3D()
release_vertex_colors()
release_vertex_normals()
release_vertex_status()
release_vertex_texcoords1D()
release_vertex_texcoords2D()
release_vertex_texcoords3D()
존재 여부 확인
has_edge_status()
has_edge_colors()
has_face_colors()
has_face_normals()
has_face_status()
has_face_texture_index()
has_halfedge_status()
has_halfedge_normals()
has_halfedge_texcoords1D()
has_halfedge_texcoords2D()
has_halfedge_texcoords3D()
has_vertex_colors()
has_vertex_normals()
has_vertex_status()
has_vertex_texcoords1D()
has_vertex_texcoords2D()
has_vertex_texcoords3D()
// 속성이 이전에 요청되었고 사용 가능한 경우 true를 반환
다음은 모든 정점을 법선 방향을 따라 단위 길이만큼 이동하는 코드
for (MyMesh::VertexIter v_it = mesh.vertices_begin(); v_it != mesh.vertices_end(); ++v_it)
{
mesh.set_point( *v_it, mesh.point(*v_it)+mesh.normal(*v_it) );
}
get-methods는 엔터티 핸들을 가져와 원하는 속성 값을 반환하며, set-methods에는 새 값을 속성에 전달하기 위한 추가 매개 변수가 필요하다. 표에 따르면 모든 get/set 메서드 쌍이 모든 엔터티에 적용되는 것은 아니다. 예를 들어 얼굴에는 일반적으로 텍스처 좌표가 없으므로 를 호출하면 mesh.texcoord2D( _face_handle )코드를 컴파일할 때 오류가 발생한다.