private "-W3CDTD HTML 4.0 TransitionalEN"> Kodatuno User's Guide
Kodatuno Logo
Kodatuno User's Guide
Prev Index Next


IGESパーサー

【IGES_Parser.h】

IGESファイルを解析し、Kodatuno内部表現へ変換します。

■シンボル

#define SECTION_NUM          5        セクションの数(S,G,D,P,T)
#define COLUMN_MAX_          82       1行のカラム数('\n'と'\0'を含む)
#define COLUMN_MAX           80       1行のカラム数('\n'と'\0'は含まない)
#define COL_CHAR             73       セクション判別文字のカラム
#define COL_P_DIRECTORY      65       パラメータ部でのディレクトリ部への逆ポインタがあるカラム
#define GLOBALPARAMNUM       25       グローバル部のパラメータ数
#define FIELD_NUM            8        ディレクトリ部の1フィールドの文字数
#define DIRECTORYPARANUM     20       ディレクトリ部のパラメータ数
#define SECTION_START        0        スタートルセクション判別用シンボル
#define SECTION_GLOBAL       1        グローバルセクション判別用シンボル
#define SECTION_DIRECTORY    2        ディレクトリセクション判別用シンボル
#define SECTION_PARAMETER    3        パラメータセクション判別用シンボル
#define SECTION_TERMINATE    4        ターミネートセクション判別用シンボル
#define MAIN_ENTITY_TYPE_NUM 9        読み込み対象となるエンティティタイプの数
#define NRBS_PARAM_MAX       200      NRBS曲面・曲線で定義されるパラメータの最大値


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

"BODY.h"



■型定義

<IGESフォーマットにおけるグローバル部パラメータのシンボルを定義>
enum GlobalParamType{
    PARAM_DELIMITER=1,        パラメータデリミタ
    RECORD_DELIMITER,         レコードデリミタ
    SEND_PRODUCT_ID,          送り側製品ID
    FILE_NAME,                ファイル名
    SEND_SYSTEM_ID,           送り側システムID
    PRIRPO_VERSION,           プリプロセッサバージョン
    INT_LENGTH,               整数値の長さ
    FLOAT_PNT_LENGTH,         単精度浮動小数点指数の最大値
    FLOAT_PNT_FIGURE,         単精度浮動小数点有効桁数
    DOUBLE_PNT_LENGTH,        倍精度浮動小数点指数の最大値
    DOUBLE_PNT_FIGURE,        倍精度浮動小数点有効桁数
    RECIVE_PRODUCT_ID,        受け取り側製品ID
    MODEL_SCALE,              モデルスケール
    UNIT_FLAG,                単位フラグ
    UNIT,                     単位
    LINE_THICKNESS_NUMBER,    線幅の最大類別数
    LINE_THICKNESS,           線幅の最大値
    DATE_MAKE_FILE,           ファイル作成日時
    MIN_ACCRACY,              最小精度
    MODEL_SPACE_SIZE,         モデル空間の大きさ
    FILE_MAKER_NAME,          ファイル作成者
    BELONG,                   所属
    IGES_VERSION,             バージョン
    DRAFTING_STANDARD,        製図規格
    DATE_MAKE_MODEL           モデル作成日
};

<ディレクトリ部パラメータのシンボルを定義>
enum DirectoryParamType{
    ENTITY_TYPE_NUM,          要素番号
    PARAM_DATA,               パラメータ部へのポインタ
    STRUCTURE,                ストラクチャ
    LINE_FONT_PATTERN,        線種
    LEVEL,                    レベル
    VIEW_,                    ビュー
    TRAN_MATRIX,              マトリックスへのポインタ
    LABEL_DISP_ASSOC,         ラベル表示
    STATUS_NUM,               ステイタス
    SEQUENCE_NUM,             シーケンス番号
    ENTITY_TYPE_NUM_,         要素番号
    LINE_WEIGHT_NUM,          線幅
    COLOR_NUM,                色
    PARAM_LINE_COUNT,         パラメータ部のライン数
    FORM_NUM,                 形式番号
    RESERVED1,                予備
    RESERVED2,                予備
    ENTITY_LABEL,             要素のラベル
    ENTITY_SUBSCRIPT_NUM,     サブスクリプト
    SEQUENCE_NUM_             シーケンス番号
};

<グローバル部の必要パラメータ構造体>
typedef struct{
    double scale;             モデルのスケール
    int    unit_flag;         単位フラグ
    double space_size;        モデル空間の大きさ
}GlobalParam;

<ディレクトリ部の必要パラメータ構造体>
typedef struct{
    int entity_type;          要素番号
    int entity_count;         何番目のentity_typeかを表す
    int p_param;              パラメータ部へのポインタ
    int p_tm;                 マトリックスへのポインタ
    int blank_stat;           表示属性
    int subordinate_stat;     従属属性
    int useflag_stat;         entity使用意図
    int seq_num;              シーケンス番号
    int param_line_count;     パラメータ部のライン数
}DirectoryParam;


■クラス

IGES_PARSER

<継承>
なし



■関数(Class IGES_PARSER)


 

public int IGES_Parser_Main(BODY *body,char IGES_fname[]);

<説明> IGESパーサーのメイン。 <引数> *body:立体を構成するエンティティの集合オブジェクトへのポインタ IGES_fname[]:IGESファイル名 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

public int NormalizeKnotRange(BODY *body, double val);

<説明> ノットベクトルを0〜valで正規化する。 <引数> *body:立体を構成するエンティティの集合オブジェクトへのポインタ val:ノットベクトルの範囲の上限 <戻り値> KOD_TRUE

public int ExpandKnotRange(BODY *body);

<説明> 隣うノットベクトルの間隔がMIN_KNOT_RANGE以上となるようにノットベクトルの範囲を修正する。 <引数> *body:立体を構成するエンティティの集合オブジェクトへのポインタ <戻り値> KOD_TRUE

public int ModifyParamConect(BODY *body);

<説明> パラメトリック平面内のトリム曲線同士のつながりをチェック、修正する。 <引数> *body:立体を構成するエンティティの集合オブジェクトへのポインタ <戻り値> KOD_TRUE

public int CheckDegenracy(BODY *body);

<説明> NURBS曲面の縮退をチェックし、見つかれば修正する。 <引数> *body:立体を構成するエンティティの集合オブジェクトへのポインタ <戻り値> KOD_TRUE

public IGES_PARSER();

<説明> コンストラクタ。 <引数> なし <戻り値> なし

private void GetSectionLine(FILE *fp,int line[]);

<説明> 各セクションのライン数を調べる。 <引数> *fp:読み込んだIGESファイルへのポインタ line[]:各セクションのライン数 <戻り値> なし

private int GetStartSection(FILE *fp,int sline);

<説明> スタート部の情報を読み込む。 <引数> *fp:読み込んだIGESファイルへのポインタ sline:スタート部のライン数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetGlobalSection(FILE *fp,GlobalParam *gpara,int gline);

<説明> グローバル部の情報を読み込む。 <引数> *fp:読み込んだIGESファイルへのポインタ *gpara:グローバル部のパラメータ構造体へのポインタ gline:グローバル部のライン数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetDirectorySection(FILE *fp,DirectoryParam *dpara,int TypeNum[],int dline);

<説明> ディレクトリ部の情報を読み込む。 <引数> *fp:読み込んだIGESファイルへのポインタ *dpara:ディレクトリ部のパラメータ構造体へのポインタ TypeNum[]:BODYを構成する各エンティティの数 dline:ディレクトリ部のライン数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private void GetStatusNumber(char field[],DirectoryParam *dpara);

<説明> DE#9(ステータス)部を読み込む。 <引数> field[]:フィールド *dpara:ディレクトリ部のパラメータ構造体へのポインタ <戻り値> なし

private int GetParameterSection(FILE *fp,DirectoryParam *dpara,BODY body,int dline);

<説明> パラメータ部の情報を読み込む。 <引数> *fp:読み込んだIGESファイルへのポインタ *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 dline:ディレクトリ部のライン数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetTerminateSection(FILE *fp);

<説明> ターミネート部の情報を読み込む。 <引数> *fp:読み込んだIGESファイルへのポインタ <戻り値> 成功:KOD_TRUE

private void GetType(int type,int entitynum[]);

<説明> 各エンティティタイプの数を取得する。 <引数> type:エンティティのタイプ enntitynum[]:エンティティの数 <戻り値> なし

private int GetCirAPara(char str[],int pD,DirectoryParam *dpara,BODY body);

<説明> Type100 円・円弧を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE

private int GetCompCPara(char str[],int pD,DirectoryParam *dpara,int dline,BODY body);

<説明> Type102 複合曲線を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetConAPara(char str[],int pD,DirectoryParam *dpara,BODY body);

<説明> Type104 円錐曲線を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetLinePara(char str[],int pD,DirectoryParam *dpara,BODY body);

<説明> Type110 線分を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetTMatPara(char str[],int pD,DirectoryParam *dpara,BODY body)

<説明> Type124 変換行列を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetNurbsCPara(char str[],int pD,DirectoryParam *dpara,BODY body)

<説明> Type126 NURBS曲線を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetNurbsSPara(char str[],int pD,DirectoryParam *dpara,BODY body);

<説明> Type128 NURBS曲面を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GeConpSPara(char str[],int pD,DirectoryParam *dpara,int dline,BODY body);

<説明> Type142 面上線を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetTrmSPara(char str[],int pD,DirectoryParam *dpara,BODY body);

<説明> Type144 トリム面を読み込む。 <引数> str[]:文字列バッファ pD:ディレクトリ部への逆ポインタの値 *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int CatchStringI(char **p);

<説明> カンマまでの数値を読み込んで返す(int)。 <引数> **p:文字列へのポインタ <戻り値> a:カンマまでの数値

private int CatchStringD(char **p);

<説明> カンマまでの数値を読み込んで返す(int)。 <引数> **p:文字列へのポインタ <戻り値> a:カンマまでの数値

private int ChangeEntityforNurbs(DirectoryParam *dpara,BODY body,int dline);

<説明> NURBS曲線以外のエンティティをNURBS曲線に変換し、変換行列があれば座標変換を施す。 <引数> *dpara:ディレクトリ部のパラメータ構造体へのポインタ body:BODY構造体 dline:ディレクトリ部のライン数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int SearchMaxCoord(BODY *body,int TypeNum[]);

<説明> 全てのエンティティにおける座標値の最大値を調べる。 <引数> *body:BODY構造体へのポインタ TypeNum[]:エンティティタイプの数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private void *GetDEPointer(int TypeNum,BODY body);

<説明> DE部へのポインタが示す実際の構造体へのポインタを返す。 <引数> TypeNum:エンティティのタイプの数 body:BODY構造体 <戻り値> なし

private int SearchEntType(DirectoryParam *dpara,int pdnum,int dline);

<説明> DE部へのポインタの値からエンティティのタイプを調べて返す。 <引数> *dpara:ディレクトリ部のパラメータ構造体へのポインタ pdnum:DE部のシーケンスナンバー dline:ディレクトリ部のライン数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private void InitDisplayStat(DispStat *Dstat);

<説明> 各エンティティの表示属性を設定する。 <引数> *Dstat:エンティティの表示属性 <戻り値> なし

private int GetNurbsCFromLine(int NurbsCount,int LineCount,BODY body);

<説明> Type 110(線分)からType 126(NURBS曲線)のパラメータを得る。 <引数> NurbsCount:NURBS曲線の数 LineCount:線分の数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int GetNurbsCFromCirA(int NurbsCount,int CirCount,BODY body);

<説明> Type 100(円・円弧)からType 126(NURBS曲線)のパラメータを得る。 <引数> NurbsCount:NURBS曲線の数 CirCount:円・円弧の数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int CirAToNurbsC_seg1(int NurbsCount,int CirCount,BODY body,Coord vec[], double angle_rad);

<説明> 1セグメントの円弧(中心角が0°<θ<=90°の時) <引数> NurbsCount:NURBS曲線の数 CirCount:円・円弧の数 body:BODY構造体 vec[]:円/円弧の中心点O-始点Psベクトル成分、中心点-終点Peベクトル成分 angle_rad:中心角の大きさ <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int CirAToNurbsC_seg2(int NurbsCount,int CirCount,BODY body,Coord vec[], double angle_rad);

<説明> 2セグメントの円弧(中心角が90°<θ<=270°の時) <引数> NurbsCount:NURBS曲線の数 CirCount:円・円弧の数 body:BODY構造体 vec[]:円/円弧の中心点O-始点Psベクトル成分、中心点-終点Peベクトル成分 angle_rad:中心角の大きさ <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int CirAToNurbsC_seg3(int NurbsCount,int CirCount,BODY body,Coord vec[], double angle_rad);

<説明> 3セグメントの円弧(中心角が270°<θ<=360°の時) <引数> NurbsCount:NURBS曲線の数 CirCount:円・円弧の数 body:BODY構造体 vec[]:円/円弧の中心点O-始点Psベクトル成分、中心点-終点Peベクトル成分 angle_rad:中心角の大きさ <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int CirAToNurbsC_seg4(int NurbsCount,int CirCount,BODY body,Coord vec[], double angle_rad);

<説明> 4セグメントの円弧(円の時) <引数> NurbsCount:NURBS曲線の数 CirCount:円・円弧の数 body:BODY構造体 vec[]:円/円弧の中心点O-始点Psベクトル成分、中心点-終点Peベクトル成分 angle_rad:中心角の大きさ <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int TransformNurbsC(int NurbsCount,int TMp,BODY body);

<説明> Type124 変換行列を用いてNURBS曲線を座標変換する。 <引数> NurbsCount:NURBS曲線の数 TMp:変換行列の数 body:BODY構造体 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private int CheckKnotVecRange(double Range[2],double Knot[],int N,int M,int K);

<説明> ノットベクトルの範囲が0〜1でなかった場合は、強制的に0〜1にする。 <引数> Range[2]:ノットベクトルの範囲 Knot[]:ノットベクトル N:ノットベクトルの数 M:階数 K:コントロールポイントの数 <戻り値> 成功:KOD_TRUE 失敗:KOD_ERR

private double CheckKnotVecRange(double Knot[],int M,int K);

<説明> 隣り合うノットベクトルの差の最小値を返す。 <引数> Knot[]:ノットベクトル M:階数 K:コントロールポイントの数 <戻り値> 最小値


■変数(Class Describe_BODY)

private
BODY *body;                          IGESデータはこのBODY構造体に全て格納される
BODY_Handler hbody;                  BODY構造体の各オブジェクトのメモリー操作用
int *TypeNum;                        どのBODYオブジェクトが幾つあるかを示す
char buf[COLUMN_MAX_];               汎用文字列バッファ
int  entity[ALL_ENTITY_TYPE_NUM];    エンティティの番号を格納した配列
int  TypeCount[ALL_ENTITY_TYPE_NUM]; 各エンティティタイプの正常メモリー確保数を格納

Document Release 2.3 for Kodatuno R2.3, Jul. 2013


Prev Index Next

Copyright(C) Kodatuno Development Team, 2011 Last modified: Jul. 11, 2013