=========== カスタマイズ用関数の説明 ===========
(1)メニューボタンの追加
(2)メッセージウィンドウへのメッセージ表示
(3)漢字などの多バイトコードの文字への対応
(4)ファイルの読み込み
(5)モデル操作のための準備1
(6)モデル操作のための準備2
(7)モデルアイテムの操作
(8)モデルパラメータの取得
(9)モデルの選択
(10)プログラム中からのモデルの選択
 ここをクリックしてください。

(1)メニューボタンの追加
 既存のメニューに新しくボタンを追加するには以下の関数を使い、メニュー
ファイルを作成します。
 例えば部品モードでTESTBというメニューを追加したい時は下記になります。

int menu_id;
ProMenuFileRegister("part","part.mnu",&menu_id);
ProMenuAuxfileRegister("part","part.aux",&menu_id);
ProMenubuttonActionSet("part","TESTB",(ProMenuButtonAction)func1,NULL,0);

int func1(void *a, int b) ←TESTBボタンが押されたときの処理

メニューファイルの名前は part.aux とします。
#PART  ←Partメニュー(部品モード)指定
#
#
TESTB
help ... in English ←英語モードでのヘルプ記述
help ... in Japanese ←日本語モードでのヘルプ記述


(2)メッセージウィンドウへのメッセージ表示
 メッセージウィンドウに何か記述したい場合には以下の関数を使い、
メッセージファイルを作成します。

wchar_t MSGFILE[256];
ProStringToWstring(MSGFILE, "test_msg.txt");
ProMessageDisplay(MSGFILE, "test");

メッセージファイルは test_msg.txt とします。(ファイル名は任意)
test
this is a test message in English. ←英語モードでのヘルプ記述
this is a test message in Japanese. ←日本語モードでのヘルプ記述
#


(3)漢字などの多バイトコードの文字への対応
 通常のシングルバイトコードでの取り扱いが難しい文字列への対応を
行うため、各関数は文字列を拡張文字列(ワイド文字列)に変換したも
のに操作するようになっています。 (2)で使用している wchar_t型が
拡張文字列です。
通常の char型と wchar_t型を相互に変換するための関数が用意されています。

ProStringToWstring(out_wchar_t, in_char);
ProWstringToString(out_char, in_wchar_t);

メッセージウィンドウに表示させる時とか、ファイル操作する場合には
必ず使用される頻度の高い関数です。


(4)ファイルの読み込み
 ファイルを読み込む場合は、まずメモリ上に読み込みます。読み込んだ
モデルを画面に表示するためには別途モデルを表示する関数を指定します。
下記は部品(prt)ファイルを読み込みます。

ProMdl part;
wchar_t fname;

ProStringToWstring(fname, "test");
ProMdlRetrieve(fname, PRO_PART, &part);


(5)モデル操作のための準備1
 プログラム中で現在アクティブなモデルにアクセスするために指定
するものがあります。次に示す関数でモデルのOHandleを得ることが
できます。なんのことかよくわかりませんが、とにかくこの関数を使う
ことで、モデルを操作することができるようになります。

ProMdl part;
ProError status;

status = ProMdlCurrentGet(&part);

ここで得られるpartを原点にして各関数に展開していきます。


(6)モデル操作のための準備2
 操作するモデルをファイル名(モデル名)から指定することもできます。
下の例は部品(test.prt)を使う場合の指定方法です。

ProError status;
ProMdl model;
ProMdlType type;
ProName w_name;

type = PRO_PART;
ProStringToWstring(w_name, "test");
status = ProMdlInit(w_name, type, &model);


(7)モデルアイテムの操作
 ProMdlはOHandleなのでモデルデータを操作するためには、DHandleに
変換する必要があります。

ProError status;
ProMdl model;
ProModelitem modelitem;

status = ProMdlToModelitem(model, &modelitem);


(8)モデルパラメータの取得
 それでは実際のサンプルプログラムに移ります。
次の例はモデルパラメータを読み込み、メッセージウィンドウに表示します。
あらかじめ部品ファイル(test.prt)を作成し、モデルパラメータ名(sample)
を定義しておきます。

/*--------------------------------------------------------*\
Pro/TOOLKIT includes
\*--------------------------------------------------------*/
#include "ProToolkit.h"
#include "ProMdl.h"
#include "ProModelitem.h"
#include "ProParameter.h"
#include "ProParamval.h"

#define PRMLEN  100

/*========================================================*\
  Function : ProTestGetParams
\*========================================================*/
int ProTestGetParams()
{
 ProError status;
 ProMdl model;
 ProModelitem modelitem;
 ProMdlType type;
 ProName w_name, p_name;
 ProParameter param;
 ProParamvalue value;
 char dummy1[PRMLEN];
 static wchar_t msgfil[80], s_name[PRMLEN];

 type = PRO_PART;
 ProStringToWstring(w_name, "test");
 ProStringToWstring(p_name, "sample");

 status = ProMdlInit(w_name, (ProMdlType)type, &model);
 status = ProMdlToModelitem(model, &modelitem);

 status = ProParameterInit(&modelitem, p_name, &param);
 status = ProParameterValueGet(&param, &value);

 switch( value.type )
 {
  case PRO_PARAM_DOUBLE:
   sprintf(dummy1, "%f", value.value.d_val);
   break;
  case PRO_PARAM_STRING:
   ProWstringToString(dummy1, value.value.s_val);
   break;
  case PRO_PARAM_INTEGER:
   sprintf(dummy1, "%d", value.value.i_val);
   break;
  case PRO_PARAM_BOOLEAN:
   sprintf(dummy1, "%d", value.value.l_val);
   break;
  default:
   sprintf(dummy1, "NULL", NULL);
 }

 ProStringToWstring(msgfil, "test_msg.txt");
 ProStringToWstring(s_name, dummy1);
 status = ProMessageDisplay(msgfil, "TEST %0w", s_name);

    return( 0 );
}

メッセージファイルは test_msg.txt とします。(ファイル名は任意)
TEST %0w
%0w
#
#


(9)モデルの選択
 Pro/Eでは画面上でマウスクリックしてモデルを選択する操作をすることが
よくありますが、TOOLKITでは以下の関数を使います。
ProSelection *p_list;
int num;
char option[50];

strcpy(option, "csys"); ←座標系の選択
ProSelect(option, -1, NULL, NULL, NULL, NULL, &p_list, &num);

optionは、ProSelectオプションの中から指定します。
二つ目の引数(例では-1)は選択させる個数です。-1で無制限。
選択したモデルはp_listに格納されます。(OUT)
最後の引数numは選択されたモデルの数です。(OUT)


(10)プログラム中からのモデルの選択
 部品やアセンブリを構成する特定のフィーチャーにアクセスするために
強力な関数が用意されています。
以下の例ではmodelからUActに記述された内容で特定のフィーチャーを
選択します。

ProMdl model;
ProFeature feature;

ProSolidFeatVisit((ProSolid)model, (ProFeatureVisitAction)UAct,
    (ProFeatureFilterAction)NULL, (ProAppData)&feature);

// Action Function
static ProError UAct(ProFeature *p_feat, ProError status, ProAppData data)
{
    // フィーチャーへのアクセス内容を記述
}


 
TOPへ戻る