mqsdx  310.0.1
MQPluginSDK Extention Library / mqsdkをC++またはCLI(.Net)拡張するサポートライブラリ
 全て クラス 関数 変数 型定義 プロパティ グループ ページ
構造体 MQ0x::Polygon::UVFaceBuffer::UVPoint::Buffer

UVPointバッファ構造体。同じuvが重複しないようにuv座標をバッファリングします。 [詳細]

#include <MQ0x.hpp>

構成

struct  Index
 UVPoint::Bufferを参照するためのインデックス型 [詳細]
 

Public 型

typedef uint16_t resolution_type
 resolutionの型
 

Public メソッド

void Clear (const bool isCompact=false)
 バッファをクリアする [詳細]
 
void Compact ()
 不要なヒープ領域を切り詰めます。
 
const UVPointGetAccessAt (const Index &index) const
 Index で指定されたバッファ要素(UVPoint)のアドレスを取得します [詳細]
 
const Index GetIndexOf (const MQCoordinate &uv, const float epsilon)
 任意のuv値を記録するバッファ要素(UVPoint)を既存データから検索、または新規追加してインデックスを取得します。 [詳細]
 
UVPointoperator[] (const Index &index)
 要素へのアクセス。この処理は範囲チェックを行いません。
 

Static Public 変数

static const resolution_type resolution = 10
 resolution定数
 

説明

UVPointバッファ構造体。同じuvが重複しないようにuv座標をバッファリングします。

UVPoint::Bufferは単純な動的線形配列ではなく、uの値を0〜1の範囲に想定し、resolution定数を使ってハッシュキーにする分割配列です(※)。 uv値から一意にハッシュを出して配列を細分化することで既存uv値の総当り検査や、拡張時の再配置コストを高速化した構造になっています。 一方、要素にアクセスするには専用のオフセットデータ型Index構造体が必要です。

(※) u_key = u * resolution ただし、0 <= u_key <= (resolution-1)範囲外の場合は両端でClamp()処理。

関数

void MQ0x::Polygon::UVFaceBuffer::UVPoint::Buffer::Clear ( const bool  isCompact = false)
inline

バッファをクリアする

引数
[in]isCompactヒープ領域を切り詰めるかどうか
const UVPoint* MQ0x::Polygon::UVFaceBuffer::UVPoint::Buffer::GetAccessAt ( const Index index) const
inline

Index で指定されたバッファ要素(UVPoint)のアドレスを取得します

戻り値
indexが範囲外のときはNULL。それ以外は指定されたuvバッファ要素へのアドレス
const Index MQ0x::Polygon::UVFaceBuffer::UVPoint::Buffer::GetIndexOf ( const MQCoordinate &  uv,
const float  epsilon 
)
inline

任意のuv値を記録するバッファ要素(UVPoint)を既存データから検索、または新規追加してインデックスを取得します。

引数
[in]epsilon同じuvとして許容する軸あたりの誤差範囲。uもvも、どちらの軸でも差がepsilonより小さい場合、同じuv座標とみなす。
戻り値
すでに同じuv値が記録されている場合、その既存のインデックス。それ以外の場合は新規に追加されたインデックス。