Kodatuno Logo
Kodatuno User's Guide
Prev Index Next


CADデータの内部表現

【BODY.h】

Kodatuno内部での立体表現を定義。 JAMA-IS V1.04を準拠しています。各定義の詳細はJAMA-IS仕様書を参照してください。 また、Bodyの階層構造に関しては、1.4 Kodatuno内部でのCADデータの構成 を参照してください。
■シンボル

#define ALL_ENTITY_TYPE_NUM 20    全エンティティタイプの数
#define CTLPNUMMAX          256           NURBSで用いられるコントロールポイントの数の上限
#define KNOTNUMMAX          256           NURBSで用いられるノットシーケンスの数の上限
#define GEOMTRYELEM         0             IGESディレクトリ部"Entity Use Flag"より、幾何要素を示す
#define PARAMETRICELEM      5          IGESディレクトリ部"Entity Use Flag"より、2Dパラメトリック要素を示す

<エンティティタイプのシンボルを定義>
#define    CIRCLE_ARC                  100     円/円弧
#define    COMPOSITE_CURVE             102     複合曲線
#define    CONIC_ARC                   104     円錐曲線
#define    COPIOUS_DATA                106     有意点列
#define    PLANE                       108     平面
#define    LINE                        110     線分
#define    PARAMETRIC_SPLINE_CURVE     112     パラメトリックスプライン曲線
#define    PARAMETRIC_SPLINE_SURFACE   114     パラメトリックスプライン曲面
#define    POINT                       116     点
#define    TRANSFORMATION_MATRIX       124     変換行列
#define    NURBS_CURVE                 126     有理Bスプライン曲線
#define    NURBS_SURFACE               128     有理Bスプライン曲面
#define    CURVE_ON_PARAMETRIC_SURFACE 142     面上線
#define    TRIMMED_SURFACE             144     トリム面
#define    SUBFIGURE_DEFINITION        308     子図の定義
#define    ASSOCIATIVITY_INSTANCE      402     グループ
#define    DRAWING                     404     図面
#define    PROPERTY                    406     図面サイズ
#define    SINGULAR_SUBFIGURE_INSTANCE 408     子図の参照
#define    VIEW                        410     投象面


■インクルードライブラリ

"StdAfx.h"



■型定義

typedef WSClistData BODYList       WideStudioが用意するデータリストの型をBODYListとして再登録
typedef WSClistData OBJECTList     WideStudioが用意するデータリストの型をOBJECTListとして再登録

<エンティティタイプのシンボルをenumで定義>
enum EntityType{
    _CIRCLE_ARC,                     円・円弧
    _COMPOSITE_CURVE,                複合曲線
    _CONIC_ARC,                      円錐曲線
    _COPIOUS_DATA,                   有意点列
    _PLANE,                          平面
    _LINE,                           線分
    _PARAMETRIC_SPLINE_CURVE,        パラメトリックスプライン曲線
    _PARAMETRIC_SPLINE_SURFACE,      パラメトリックスプライン曲面
    _POINT,                          点
    _TRANSFORMATION_MATRIX,          変換行列
    _NURBSC,                         有理Bスプライン曲線
    _NURBSS,                         有理Bスプライン曲面
    _CURVE_ON_PARAMETRIC_SURFACE,    面上線
    _TRIMMED_SURFACE,                トリム面
    _SUBFIGURE_DEFINITION,           子図の定義
    _ASSOCIATIVITY_INSTANCE,         グループ
    _DRAWING,                        図面
    _PROPERTY,                       図面サイズ
    _SINGULAR_SUBFIGURE_INSTANCE,    子図の参照
    _VIEW                            投象面
};

<エンティティタイプごとに構造体を定義>
<円・円弧>
typedef struct{
    double zt;        Z軸方向の深さ
    Coord  cp[3];     円・円弧の中心点、始点、終点
    double R;         半径
    double t[2];      t[0]:始点の角度 t[1]:終点の角度
    int EntUseFlag;   ディレクトリ部 Entity Use Flag の値(0:幾何要素 5:2Dパラメトリック要素)
    int pD;           ディレクトリ部への逆ポインタ
    DispStat Dstat;   表示属性(色r,g,b)
}CIRA;

<円錐曲線>
typedef struct{
    double prop[6];   係数
    double zt;        ZT平面の定義
    Coord  cp[2];     始点、終点
    int pD;           ディレクトリ部への逆ポインタ
    DispStat Dstat;   表示属性(色r,g,b)
}CONA;

<線分>
typedef struct{
    Coord cp[2];      始点、終点
    int EntUseFlag;   ディレクトリ部 Entity Use Flag の値(0:幾何要素 5:2Dパラメトリック要素)
    int pD;           ディレクトリ部への逆ポインタ
    DispStat Dstat;   表示属性(色r,g,b)
}LINE_;

<変換マトリックス>
typedef struct{
    double R[3][3];   回転行列
    double T[3];      並進ベクトル
    int pD;           ディレクトリ部への逆ポインタ
}TMAT;

<有理Bスプライン(NURBS)曲線>
typedef struct{
    int K;            コントロールポイントの数
    int M;            階数(=次数+1)
    int N;            ノットベクトルの数
    int prop[4];      各プロパティ
    double *T;        ノットシーケンスの値 A+1個
    double *W;        Weightの値 K+1個
    Coord *cp;        コントロールポイント K+1個
    double V[2];      パラメータの範囲
    Coord norm;       法線ベクトル
    int EntUseFlag;   ディレクトリ部 Entity Use Flag の値(0:幾何要素 5:2Dパラメトリック要素)
    int pD;           ディレクトリ部への逆ポインタ
    DispStat Dstat;   表示属性(色r,g,b)
}NURBSC;

<有理Bスプライン(NURBS)曲面>
typedef struct{
    int K[2];         コントロールポイントの数(u方向,v方向)
    int M[2];         階数(=次数+1)
    int N[2];         ノットベクトルの数
    int prop[5];      パラメータ
    double *S;        u方向ノットベクトルの値 A+1個
    double *T;        v方向ノットベクトルの値 B+1個
    double **W;       Weightの値
    Coord  **cp;      コントロールポイント C個
    double U[2];      u方向パラメータ
    double V[2];      v方向パラメータ
    int pD;           ディレクトリ部への逆ポインタ
    int TrmdSurfFlag; このNURBS曲面がトリム面として呼ばれているのか、独立して存在するのかを示すフラグ(トリム面:KOD_TRUE  独立面:KOD_FALSE)
    DispStat Dstat;   表示属性(色r,g,b,)
}NURBSS;

<複合曲線を構成できる曲線群を共用体で宣言>
typedef union{
    CIRA CirA;        円・円弧
    CONA ConA;        円錐曲線
    LINE_ Line;       直線
    NURBSC NurbsC;    NURBS曲線
}COMPELEM;

<複合曲線>
typedef struct{
    int N;            構成要素数
    int *DEType;      各構成要素のエンティティタイプ
    COMPELEM **pDE;   各構成要素の構造体へのポインタ
    int DegeFlag;     複合曲線が縮退した2Dパラメトリック曲線を表すフラグ
    NURBSC DegeNurbs; 複合曲線が縮退した2Dパラメトリック曲線だった場合に縮退を解消するためのNURBS曲線
    int pD;           ディレクトリ部への逆ポインタ
}COMPC;

<面上線を構成できる曲線群を共用体で宣言>
typedef union{
    CIRA  CirA;       円・円弧
    COMPC CompC;      複合曲線
    CONA  ConA;       円錐曲線
    NURBSC NurbsC;    NURBS曲線
}CURVE;

<面上線>
typedef struct{
    int crtn;         面上線がどのように作られたかを示す
    int SType;        Surface Sのエンティティタイプ
    int BType;        Curve Bのエンティティタイプ
    int CType;        Curve Cのエンティティタイプ
    NURBSS *pS;       Curveが乗るSurface構造体へのポインタ
    CURVE *pB;        Surface Sのパラメータ空間におけるCurve B構造体へのポインタ
    CURVE *pC;        Curve C構造体へのポインタ
    int pref;         送り側システムで採られていた表現を示すフラグ
    int pD;           ディレクトリ部への逆ポインタ
}CONPS;

<トリム面>
typedef struct{
    NURBSS *pts;      トリムされるSurface EntityのDE部へのポインタ
    int n1;           0:外周がDの境界と一致、1:それ以外
    int n2;           Trimmed Surfaceの内周にあたる単純閉曲線の数
    CONPS *pTO;       Trimmed Surfaceの外周にあたる単純閉曲線構造体へのポインタ
    CONPS **pTI;      Trimmed Surfaceの内周にあたる単純閉曲線構造体へのポインタ
    int pD;           ディレクトリ部への逆ポインタ
}TRMS;

typedef TRMS TRIMD_NURBSS;     トリム面に対してNurbs曲面を想起させる名称を与えておく

<パス生成対象エンティティを示す構造体>
typedef struct{
    int Body;         BODYオブジェクトの番号
    int Type;         エンティティタイプのシンボル(NURBS曲線:126 , NURBS曲面:128 , トリム面:144)
    int Num;          Typeにおける要素番号(NURBS曲線が4本あったら、その4本に割り当てられた0〜3の番号)
    int CCount;       何番目にピックされた曲線かを表す
    int SCount;       何番目にピックされた曲面かを表す
}OBJECT;

<全てのエンティティを統括するBODY構造体>
typedef struct{
    CIRA  *CirA;           円・円弧
    COMPC *CompC;          複合曲線
    CONA  *ConA;           円錐曲線
    LINE_ *Line;           線分
    TMAT  *TMat;           変換行列
    NURBSC *NurbsC;        NRBS曲線
    NURBSS *NurbsS;        NRBS曲面
    CONPS *ConpS;          面上線
    TRMS  *TrmS;           トリム面
    double MaxCoord;       立体の寸法の最大値(この値で初期表示倍率を決定)
    int  TypeNum[ALL_ENTITY_TYPE_NUM];     BODYを構成する各エンティティの数を格納した配列
    char Name[FNAMEMAX];                   BODY名
}BODY;


■クラス

BODY_Handler
<継承>
なし



■関数(Class BODY_Handler)


 
 

public InitCurveColor(); InitSurfaceColor();

<説明> コンストラクタ ユーザが独自に作成した関数とUserボタンとの関連付け及び、Userステータスの初期化を行う。 <引数> なし <戻り値> なし

public void Change StatColor(float *Col, float r, float g, flaot b, float a);

<説明> エンティティの表示色を変更する <引数> Col:変更したいエンティティのColorステータス r:変更したいエンティティのColorステータスのR値 g:変更したいエンティティのColorステータスのG値 b:変更したいエンティティのColorステータスのB値 a:変更したいエンティティのColorステータスのa値 <戻り値> なし

public BODY *SearchBodyList(BODYList *BodyList, int Key);

<説明> セレクションされているBODYの実体を得る <引数> *BodyList:サーチしたいBODYのリストを指定 Key:サーチしたいBODY番号を指定 <戻り値> BODYへのポインタ

public void Init_body(BODY *Body);

<説明> BOYD構造体を初期化する。 Body->MaxCoord = 1.0; Body->TypeNum[i] = 0; <引数> *Body:初期化したいBODY構造体へのポインタ <戻り値> なし

public void BODY_Handler::RegistNurbsCtoBody(BODYList *BodyList,BODY *Body,NURBSC Nurb,char BodyName[]) void BODY_Handler::RegistNurbsCtoBodyN(BODYList *BodyList,BODY *Body,NURBSC Nurb[],char BodyName[],int N)

<説明> 1つ/N個のNURBS曲線を新たなBODYとして登録する <引数> *BodyList:サーチしたいBODYのリストを指定 *Body : 新たなBody構造体のポインタ Nurb : 登録するNURBS曲線 BodyName[] : Bodyリストウィンドウに登録するBody名 N : 登録するNURBS曲線の個数 <戻り値> なし

public void BODY_Handler::RegistNurbsStoBody(BODYList *BodyList,BODY *Body,NURBSS Nurb,char BodyName[]) void BODY_Handler::RegistNurbsStoBodyN(BODYList *BodyList,BODY *Body,NURBSS Nurb[],char BodyName[],int N)

<説明> 1つ/N個のNURBS曲面を新たなBODYとして登録する <引数> *BodyList:サーチしたいBODYのリストを指定 *Body : 新たなBody構造体のポインタ Nurb : 登録するNURBS曲面 BodyName[] : Bodyリストウィンドウに登録するBody名 N : 登録するNURBS曲面の個数 <戻り値> なし

public void New_body(BODY *Body, int TypeNum[]); void Free_body(BODY *Body, int TypeNum[]);

<説明> BODY構造体内要素の各エンティティのメモリー確保/解放 <引数> Body:Body構造体のポインタ TypeNum[i]:メモリー確保したい各エンティティの数を格納した配列 iはenum型で定義されたエンティティのシンボル値と同じ。 ex)TypeNum[10] = TypeNum[_NURBSC]であり、NURBS曲線エンティティの数が格納されていること。 <戻り値> なし

public int NewCompC(COMP *Comp, int Num);

<説明> 複合曲線構造体内要素のメモリー確保 <引数> *Comp:COMP構造体へのポインタ Num:構成されている曲線の数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

public void Free_CompC(COMP *Comp); void Free_CompC_1DArray(COMP *Comp, int Num);

<説明> 複合曲線構造体内要素のメモリー解放 複合曲線が1次元配列をなしている場合はFree_Comp_1DArray()を用いる <引数> *Comp:COMP構造体へのポインタ Num:COMP構造体配列の配列長 <戻り値> なし

public int New_NurbsC(NURBSC *NurbsC, int K, int N);

<説明> NURBS曲線構造体内部要素のメモリー確保 <引数> *NurbsC:NURBS曲線構造体へのポインタ K:コントロールポイントの数 N:ノットベクトルの数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

public void Free_NurbsC(NURBSC *NurbsC); void Free_NurbsC_1DArray(NUNBSC *NurbC, int Num)

<説明> NURBS曲線構造体内要素のメモリー解放 <引数> *NurbsC:NURBSC構造体へのポインタ Num:NURBSC構造体配列の配列長 <戻り値> なし

public int New_NurbsS(NURBSS *NurbsS, int K[2], int N[2]);

<説明> NURBS曲面構造体内部要素のメモリー確保 <引数> *NurbsS:NURBSS構造体へのポインタ K[2]:u,v各方向のコントロールポイントの数 N[2]:u,v各方向のノットベクトルの数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

public void Free_NurbsS(NURBSS *NurbsS); void Free_NurbsS_1DArray(NURBSS *NurbsS, int Num);

<説明> NURBS曲面構造体内要素のメモリー解放 <引数> *NurbsS:NURBSS構造体へのポインタ Num:NURBSS構造体配列の配列長 <戻り値> なし

public int New_TrmS(TRMS *Trms, int Num);

<説明> トリム面構造体内要素のメモリー確保 <引数> *Trms:TRMS構造体へのポインタ Num:面の内側をトリムする閉曲線の数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

public void Free_TrmS(TRMS *Trms); void Free_TrmS_1DArray(TRMS *Trms, int Num);

<説明> TRMS曲面構造体内要素のメモリー解放 <引数> *Trms:TRMS構造体へのポインタ Num:TRMS構造体配列の配列長 <戻り値> なし

Document Release 1.0 for Kodatuno R1.0, Mar. 2011


Prev Index Next

Copyright(C) Kodatuno Development Team, 2011 Last modified: Mar. 3, 2011