Beziex自由曲面バーチャル研究室
(C)1999-2012 EISHIN All Rights Reserved.

Beziex Ts (Home)
 & ダウンロード


Beziex LG (Home)
 & ダウンロード




マニュアル目次

1章 前知識
2章 新ベジェ境界曲面
3章 プログラムについて
4章 サンプル・アプリケーション
5章 自由曲面関数ライブラリ
6章 bxCore.h
7章 bxDB.h
8章 bxProc.h
9章 数値関数
10章 サンプル・ベースファイル



Copyright 1999-2011 EISHIN

7章 bxDB.h

1. データ構造

1-1. 定数

1) 最少要素数
データベース内において、各要素の最少数を定義する。

enum {
minNumVertex = 3,データベース内の全頂点数の最少値
minNumEdge = 3,データベース内の全境界曲線数の最少値
minNumRadial = 21頂点から伸びるハンドル数の最少値
};


2) 曲面サーチのresult値 HandleForTrans
任意の境界曲線から右回りに隣接境界曲線をサーチし、それを繰り返す。この時、境界曲線が繋がって閉曲線となり、結果として3角、4角曲面になるかどうかをチェックする(GetSurfaceVertex()内のchkSurfExistに結果を返す)。そのチェック結果は、以下のいづれかである。

enum {
surfExist,3角、4角曲面が存在した
surfSchRadialEdge,サーチを始めた境界曲線は、単一の独立した曲線である
surfNonExist曲面が存在しない(surfExist & surfSchRadialEdge以外)
};


1-2. 構造体

1) VertexRec
頂点情報の構造体。

struct VertexRec {
double vertexPos[ 3 ];頂点
ushort numRadial;この頂点から伸びるハンドル数
bool loopFlag;ループ頂点/非ループ頂点
double axisVec[ 2 ][ 3 ];頂点平面
};


2) EdgeRec
境界曲線情報の構造体。

struct EdgeRec {
EdgeVertex vertex[ 2 ];境界曲線両端の頂点情報。
vertex[ i ]とした場合、i は頂点番号(単一境界曲線上)
};

struct EdgeVertex {
ulong vertexNo;頂点番号(vertexAry[]の要素No)
ushort radialNo;この境界曲線の該当頂点に対する境界曲線番号(共有頂点上)
double handleVec[ 2 ];ハンドル
double ctlPlaneDeg;ハンドル点法線
double ctlVec[ 2 ][ 2 ];コントロールバー
};


3) EdgeForPickSurface
曲面サーチ時に、重複サーチを防ぐために使う配列(境界曲線数)のための構造体。

struct EdgeForPickSurface {
bool alreadyPick[ 2 ];既にサーチ済みの場合、真。
alreadyPick[ i ]とした場合、i は頂点番号(単一境界曲線上)
};


4) EdgeVertexRadial
曲面内の各境界曲線番号と、この曲線の始点頂点側の頂点番号(0 or 1)を示す構造体(右回り)。曲面サーチ時に用いられる。

struct EdgeVertexRadial {
ulong edgeNo;境界曲線番号(edgeAry[]の要素No)
short beginEndNo;頂点番号(単一境界曲線上)
};




2. 関数
←入力データ
→出力データ
⇔入出力データ


2-1. Public関数

bool→エラーの場合、真
AllocData(
const ulong numVertex,←頂点数(numVertexAry)
const ulong numEdge );←境界曲線数(numEdgeAry)

vertexAry[]とedgeAry[]にメモリを割り当てる。



bool→エラーの場合、真
AllocEdgeForPickSurface( void );

edgePick[]にメモリを割り当てる。



void
FreeData( void );

vertexAry[]とedgeAry[]のメモリを解放する。



void
FreeEdgeForPickSurface( void );

edgePick[]のメモリを解放する。



ulong→頂点数(numVertexAry)
NumVertexAry( void );

頂点数(numVertexAry)を得る。



ulong→境界曲線数(numEdgeAry)
NumEdgeAry( void );

境界曲線数(numEdgeAry)を得る。



void
InitilizeEdgeRec(
EdgeRec* edge );→境界曲線情報の初期値(ハンドル以外)

境界曲線情報の初期値(ハンドル以外)を得る。



bool→エラーの場合、真
CancelLock( void );

強制的にLock状態を解除する(エラー時に使用)。



void
LoadVertexRec(
const ulong vertexNo,←頂点番号(vertexAry[]の要素No)
VertexRec* vertex );→この頂点の頂点情報

データベースから任意の頂点番号(vertexAry[]の要素No)の頂点情報を得る。



bool→エラーの場合、真
LockVertexRec(
const ulong vertexNo,←頂点番号(vertexAry[]の要素No)
VertexRec* vertex );→この頂点の頂点情報

データベースから任意の頂点番号(vertexAry[]の要素No)の頂点情報を得る。後で必ずUnlockVertexRec()を呼び出すこと。



bool→エラーの場合、真
UnlockVertexRec(
const VertexRec* vertex );←新しい頂点情報

LockVertexRec()時の頂点番号に対し、データベースに新しい頂点情報を入力する。



void
LoadEdgeRec(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
EdgeRec* edge );→この境界曲線の境界曲線情報

データベースから任意の境界曲線番号(edgeAry[]の要素No)の境界曲線情報を得る。



bool→エラーの場合、真
LockEdgeRec(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
EdgeRec* edge );→この境界曲線の境界曲線情報

データベースから任意の境界曲線番号(edgeAry[]の要素No)の境界曲線情報を得る。後で必ずUnlockEdgeRec()を呼び出すこと。



bool→エラーの場合、真
UnlockEdgeRec(
const EdgeRec* edge );←新しい境界曲線情報

LockEdgeRec()時の境界曲線番号に対し、データベースに新しい境界曲線情報を入力する。



bool→既にサーチ済みの場合、真。
GetEdgeForPickSurface(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo );←頂点番号(単一境界曲線上)

曲面サーチ時に、既にサーチ済みかどうかチェックする。



void
SetEdgeForPickSurface(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo );←頂点番号(単一境界曲線上)

曲面サーチ後に、サーチ済みフラグ(alreadyPick[])を真にする。



bool→エラーの場合、真
GetSurfaceVertex(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
short* chkSurfExist,→曲面サーチのresult値
short* numAngle,→曲面の角数(3角 or 4角)
EdgeVertexRadial surfaceVertex[ 4 ] );
→曲面内の各境界曲線番号と始点頂点側の頂点番号

任意の境界曲線から右回りに隣接境界曲線をサーチし、それを繰り返す。この時、境界曲線が繋がって閉曲線となり、結果として3角、4角曲面になるかどうかをチェックする。曲面が存在する場合、角数と「曲面内の各境界曲線番号と始点頂点側の頂点番号」を出力する。



bool→エラーの場合、真
VertexRadialToEdge(
const ulong vertexNo,←頂点番号(vertexAry[]の要素No)
const ushort radialNo,←境界曲線番号(共有頂点上)
ulong* edgeNo,→境界曲線番号(edgeAry[]の要素No)
short* beginEndNo );→頂点番号(単一境界曲線上)

頂点番号(vertexAry[]の要素No)と境界曲線番号(共有頂点上)から、境界曲線番号(edgeAry[]の要素No)と頂点番号(単一境界曲線上)を得る。




2-2. Protected関数

void
NumRadial(
const ulong vertexNo,←頂点番号(vertexAry[]の要素No)
ushort* numRadial );→この頂点から伸びるハンドル数

任意の頂点から伸びるハンドル数を得る。



bool→エラーの場合、真
LockAxisForDefault(
const ulong vertexNo,←頂点番号(vertexAry[]の要素No)
const CbxCore::AxisForDefaultSub buf[/*numRadial*/],
←ハンドル数(共有頂点上)の要素数を持つバッファ
CbxCore::AxisForDefault* axis );→Coreフォルダ内関数で使用するデータ

データベースから任意の頂点番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockAxisForDefault()を呼び出すこと。



bool→エラーの場合、真
UnlockAxisForDefault(
const CbxCore::AxisForDefaultOut* axis );
←Coreフォルダ内関数から出力されたデータ

LockAxisForDefault()時の頂点番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



void
LoadHandleForTrans(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::HandleForTrans* handle );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。



bool→エラーの場合、真
LockHandleForTrans(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::HandleForTrans* handle );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockHandleForTrans()を呼び出すこと。



bool→エラーの場合、真
UnlockHandleForTrans(
const CbxCore::HandleForTransOut* handle );
←Coreフォルダ内関数から出力されたデータ

LockHandleForTrans()時の境界曲線番号、頂点番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



bool→エラーの場合、真
LoadHandleForTransPlus(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::HandleForTransPlus* handle );
→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。



bool→エラーの場合、真
LockHandleForTransPlus(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::HandleForTransPlus* handle );
→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockHandleForTransPlus()を呼び出すこと。



bool→エラーの場合、真
UnlockHandleForTransPlus(
const CbxCore::HandleForTransPlusOut* handle );
←Coreフォルダ内関数から出力されたデータ

LockHandleForTransPlus()時の境界曲線番号、頂点番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



void
LoadVertexForRot(
const ulong vertexNo,←頂点番号(vertexAry[]の要素No)
CbxCore::VertexForRot* rot );→Coreフォルダ内関数で使用するデータ

データベースから任意の頂点番号のCoreフォルダ関数内使用データを得る。



bool→エラーの場合、真
LockVertexForRot(
const ulong vertexNo,←頂点番号(vertexAry[]の要素No)
CbxCore::VertexForRot* rot );→Coreフォルダ内関数で使用するデータ

データベースから任意の頂点番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockVertexForRot()を呼び出すこと。



bool→エラーの場合、真
UnlockVertexForRot(
const CbxCore::VertexForRotOut* rot );
←Coreフォルダ内関数から出力されたデータ

LockVertexForRot()時の頂点番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



void
LoadCtlPlaneDegForRot(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::CtlPlaneDegForRot* ctl );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。



bool→エラーの場合、真
LockCtlPlaneDegForRot(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::CtlPlaneDegForRot* ctl );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockCtlPlaneDegForRot()を呼び出すこと。



bool→エラーの場合、真
UnlockCtlPlaneDegForRot(
const CbxCore::CtlPlaneDegForRotOut* ctl );
←Coreフォルダ内関数から出力されたデータ

LockCtlPlaneDegForRot()時の境界曲線番号、頂点番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



void
LoadCtlVecForTrans(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
const short minusPlusNo,←コントロールバー番号(共有頂点内の基準ハンドル上)
CbxCore::CtlVecForTrans* ctl );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号、コントロールバー番号のCoreフォルダ関数内使用データを得る。



bool→エラーの場合、真
LockCtlVecForTrans(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
const short minusPlusNo,←コントロールバー番号(共有頂点内の基準ハンドル上)
CbxCore::CtlVecForTrans* ctl );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号、コントロールバー番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockCtlVecForTrans()を呼び出すこと。



bool→エラーの場合、真
UnlockCtlVecForTrans(
const CbxCore::CtlVecForTransOut* ctl );
←Coreフォルダ内関数から出力されたデータ

LockCtlVecForTrans()時の境界曲線番号、頂点番号、コントロールバー番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



bool→エラーの場合、真
LoadCtlVecForTransPlus(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
const short minusPlusNo,←コントロールバー番号(共有頂点内の基準ハンドル上)
CbxCore::CtlVecForTransPlus* ctl );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号、コントロールバー番号のCoreフォルダ関数内使用データを得る。



bool→エラーの場合、真
LockCtlVecForTransPlus(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
const short minusPlusNo,←コントロールバー番号(共有頂点内の基準ハンドル上)
CbxCore::CtlVecForTransPlus* ctl );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号、コントロールバー番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockCtlVecForTransPlus()を呼び出すこと。



bool→エラーの場合、真
UnlockCtlVecForTransPlus(
const CbxCore::CtlVecForTransPlusOut* ctl );
←Coreフォルダ内関数から出力されたデータ

LockCtlVecForTransPlus()時の境界曲線番号、頂点番号、コントロールバー番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



bool→エラーの場合、真
LockCtlVecForDefault(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::CtlVecForDefault* surface );
→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。後で必ずUnlockCtlVecForDefault()を呼び出すこと。



bool→エラーの場合、真
UnlockCtlVecForDefault(
CbxCore::CtlVecForDefaultOut* surface );
←Coreフォルダ内関数から出力されたデータ

LockCtlVecForDefault()時の境界曲線番号、頂点番号に対し、Coreフォルダ内関数出力データをデータベースに入力する。



bool→エラーの場合、真
LoadSurfaceForPick(
const ulong edgeNo,←境界曲線番号(edgeAry[]の要素No)
const short beginEndNo,←頂点番号(単一境界曲線上)
CbxCore::SurfaceForPick* surface );→Coreフォルダ内関数で使用するデータ

データベースから任意の境界曲線番号、頂点番号のCoreフォルダ関数内使用データを得る。




(C)1999-2012 EISHIN All Rights Reserved.