ME10
マクロのページです
(Q&A)
20031.05.23 更新
ぼちぼち、増やしていきます。
リスト
#
macro.lzh #(マクロファィルです。)
マクロの基本
2003.04.04 マクロの作り方
2003.04.04 マクロに、メモを記入する
2003.04.04 マクロを呼び出す時に、データを引き連れていく
2003.04.04
マクロだけで 使う変数
2003.04.04
結果をディスプレイ・ラインに表示して、一時停止させる
2003.04.04
結果をディスプレイ・ラインに表示する
2003.04.04
入力を要求
メニュー
2003.04.30
スクリーン・メニューの作り方
2003.04.30
スクリーン・メニューを削除する
要素の情報
2003.05.18
一の要素情報
2003.05.18 複要素の情報
2003.05.18 複要素から、指定の要素タイプの情報を得るには
2003.05.23 照会できる要素タイプ(Ver 8.70g)
2003.05.18 BSPLINE の詳細情報
2003.05.18 要素タイプの END とは
2003.05.18 多要素とは
マクロの作り方
マクロで出来ること。
1.書かれていることを自動で実行させます。
2.名前(変数)にデータを入れます。
マクロを一つ、順を追って作りましょう。(DEFINE ファンクション)
1.マクロの始まりと、終わりを書く。
最低必要なことは、「ここから、マクロですよ。」と「ここまでが、マクロですよ。」と、ME10に判るように書きます。
「ここから、マクロですよ。」は DEFINE
「ここまでが、マクロですよ。」は、 END_DEFINE
例:
DEFINE
END_DEFINE
(注)これだけでは、まだ必要な物が足りませんので次へ進みます。
2.マクロに名前を付けます。(name 名前)
書き込む位置は、[DEFINE] の直ぐ後です。 [DEFINE] に続けて、1行に書いても、次の行に書いてもOKです。
[DEFINE]
と名前の間は、半角のスペース、TAB、改行で分けます。これらがいくら続いても、ME10は、一つのセパレータ(区切り)として、扱ってくれます。
名前の取り決め:
英文字で始めます。
次からは、文字, 数字, アンダーバー が、使えます。
長さは、半角換算で、41文字までです。
出来るだけ、大文字と、小文字を組み合わせる方が良いです。
ME10内で使われている、キーワードは避けます。
例:(名前を、仮に [Ma_line] と、します。)
DEFINE Ma_line
END_DEFINE
(注)これだけでは、まだ必要な物が足りませんので次へ進みます。
3.さあ、マクロにやらせたいことを書き込み ましょう。
点(15,5)から、点(80,100)の間に線を描く事にします。
言葉で書くと、線を引きなさい。→2点間ですよ→始点の位置→終点の位置 と、言うようになります。
セパレータは、改行でも良いのですから、これらを1行ずつ描いても良いです。
(注)1つのコマンドは、1行だけに一つ書く方が、後のメンテナンスが楽になります。
例の解説:
LINE 線を引くコマンド
TWO_PTS 2点を指示します。
(PNT_XY 15 5) 始点の位置
(PNT_XY 80 100) 終点の位置
例:
DEFINE Ma_line
LINE TWO_PTS (PNT_XY 15 5) (PNT_XY 80
100)
END_DEFINE
(注)これで、完成しました。
4.名前にデータを割り付けることが出来ます。
解説:
「名前(Ma_line_01)が出てくれば、 100 として、処理して下さい。」と宣言したことになります。
例:
DEFINE Ma_line_01
100
END_DEFINE
マクロに、メモを記入する。
(comment コメント )
コメントは、{ 又は (* で、始まり、} 又は *)で、終わります。
(注)この コメント中 に、 } 又は *)が有ってはいけません。(当たり前ですよね。ここで打ち切りになるので。)
作り方の例で作ったマクロに、コメントを付けてみます。
{2点の線を描く}
DEFINE Ma_line
LINE TWO_PTS (PNT_XY 15 5) (PNT_XY 80
100) {15,5 の点から 80,100
の点まで、線を描く}
END_DEFINE
解説:
この {15,5 の点から 80,100 の点まで、線を描く}
部分が、コメントとなります。
ME10が、マクロを最初に読み込む場合に、無視(削除)されます。
マク ロを呼び出す時に、データを引き連れてい く。(PARAMETER)
マクロを実行させる場合、必要なデータを一緒につれてきて欲しい場合に、 PARAMETER
を使います。
書き込む位置は、マクロ名の次に、PARAMETER と パラメータ名 を書きます。
例:
{2点の線を描く}
DEFINE Ma_line
PARAMETER S
PARAMETER E
LINE TWO_PTS S
E
{15,5 の点から 80,100 の点まで、線を描く}
END_DEFINE
解説:
Ma_line (PNT_XY 15 5) (PNT_XY 80 100)
と入力しますと、(PNT_XY 15 5)が、S に、(PNT_XY 80
100)が、Eに置き換えられます。(入 力した、引数 (PNT_XY 15 5)
(PNT_XY 80 100) は、仮の値です。)
この S と、E が、パラメータ名 です。
マクロだけで使う変数(LOCAL)
変数は、マクロの中だけで使える変数と、全ての場合に使える変数の、2種類があり ます。
マクロの中だけで使える変数:ローカル変数(ローカル・マク ロ名)
全ての場合に使える変数 :グローバル変数
解説:
マクロだけで使う変数(LOCAL)は、マクロ内
で宣言します。位置は、パラメータの次です。
宣言しないと、グローバル変数になります。(ME10は、終了するまで記憶します。)
宣言すると、ローカル変数となり、マクロ終了で消滅します。
(同じ名前が別のマクロで使えます。)
例1:
{2点の線を描く}
DEFINE Ma_line
PARAMETER S
LOCAL E
LET E (PNT_XY 80 100)
LINE TWO_PTS S
E
{15,5 の点から 80,100 の点まで、線を描く}
END_DEFINE
解説:
パラメータ S の点から、ロー カル変数 E の点ま で、線を引く。
例2:
{2点の線を描く}
DEFINE Ma_line
LOCAL S
LOCAL E
LET S (PNT_XY 15 5)
LET E (PNT_XY 80 100)
LINE TWO_PTS S
E
{15,5 の点から 80,100 の点まで、線を描く}
END_DEFINE
解説:
ローカル変数S の 点から、ローカル変数E の 点ま で、線を引く。
LET S (PNT_XY 15 5) は、S に、(PNT_XY 15 5)
を代入する、LET ファンクションです。
結果をディスプレイ・ラインに表示して、一時停止させる。
(DISPLAY ファンクション)
引数(トークン)の内容を表示して、ユー ザーの指示を待ちます。
引数に使えるのは、数, 点, 文字列, マクロ名, 名前, 式等が使えます。
例1:
{2点の線を描く}
DEFINE Ma_line
PARAMETER S
LOCAL E
LET E (PNT_XY 80 100)
LINE TWO_PTS S
E
{15,5 の点から 80,100 の点まで、線を描く}
DISPLAY '** 線を書きました。**'
END_DEFINE
解説:
この場合は、文字列なので、「** 線 を書きました。**」 と、表示します。
数式などは、答えを表示させることが出来ます。
マクロを途中で止めたい場合に、使用します。
例2:
DISPLAY Aa
解説:
マクロ Aa
に入っている内容を表示します。データならそのまま、式なら、演算の結果です。
Aa に点123.4
567.8が入っていたなら、123.4,567.8と表示されます。
結果をディスプレイ・ラインに表示する。
(DISPLAY_NO_WAIT ファンクション)
引数(トークン)の内容を表示し、次の内容に進み、止まりません。
LOOP等で処理中のカウンターに使うと、マクロが死んで(無限ループに入った等)いないことが判って、いらいらしないで済みます。
入力を要求する。
(READ ファンクション)
マクロの途中で、入力を求めて、変数(マクロ)に入れます。
書式:
READ トークン・タイプ プロンプト フィードバック 指定省略時 マクロ名
READ:ファンクションの宣言(必要)
トークン・タイプ:入力データの型
プロンプト:入力要求の表示(無いと困る)
フィードバック:入力時の画面表示
指定省略時:データを入力行に置いてから、入力要求
マクロ名:入力のデータを格納する変数名(必要)
例1:
{2点の線を描く}
DEFINE Ma_line
LOCAL S
LOCAL E
READ PNT '** 最初の点を指示して下さい。**' S
READ PNT '** 次の点を指示して下さい。**'
RUBBER_LINE S E
LINE TWO_PTS S
E
{指示点から 指示点まで、線を描く}
END_DEFINE
解説:
最初の点の指示を要求してSに入れる。→次の点の指示を要求 して、E に入れる。(要求
中は、RUBBER_LINE オプションが有るので、S の 位置から、カー
ソルに線を引く)→指示点間に線を描く。
PNT:トークン・タイプ
'** 次の点を指示して下さい。**':プ ロンプト
RUBBER_LINE S :フィー ドバック
E :マクロ名
例2:
{2点の線を描く}
DEFINE Ma_line
LOCAL S
LOCAL E
LOCAL T
LET S (PNT_XY 15 5)
LET E (PNT_XY 80 100)
LET T '** 線が描けました。**'
READ STRING '**
線を描いたときのメッセージを入力して下さい。**' DEFAULT T T
LINE TWO_PTS S
E
{15,5 の点から 80,100 の点まで、線を描く}
DISPLAY T
{終了メッセージの表示}
END_DEFINE
解説:
変数 S と E に、データを入れます。→変 数 T に、入力を求める、元データを入れます。→線を描いた場合に出
す、表示メッセージの入力を求めます。(DEFAULTオ プションがあるので、T
の内容が入力行に置かれます。)→線を描きます。→終 了メッセージを表示します。
PNT:トークン・タイプ
'** 線を描いたときのメッセージを入力して下さい。**':プ ロンプト
DEFAULT T :指 定省略時
T :マクロ名
ス クリーン・メニューの作り方
画面に作った、メニューで、コマンド等を実行出来る用に出来ます。
まず枠(スロット)を作り、その中に表示して見せる事と、コマンド、マクロ等の実行したいことを割り付けます。
大まかな流れ:
1.スクリーン・メニューのスロットレイアウトを作ります。
2.実行したいことを、スロットに、書き込みます。
3.これらをマクロとして、実行します。
4.スクリーン・メニューが表示されます。
5.実行することが設定されているスロットを、クリックすれば、実行できます。
1.例題としてこの様なマクロを考えます。
名前:Ma_menu_standard_c
内容:コバイロットのON/OFF(選択)
1行目スロット:このメニューのタイトル
2行目スロット:区切りの線として、利用
3行目スロット:ON、OFF、メニュー終了のコマンドを割り当て
:スロットのレイアウト:縦2行で、横3列
スロットの大きさ:
1行目は、キャラクタ高さの2個分
2行目は、5ピクセル高さの区切り線分
3行目は、キュラクター高さの、3個分で、横幅は、半角で8文字分/スロット 当たり
2.マクロの前後を、コメント付きで作りま す。
例:
{ コバイロットの選択}
DEFINE Ma_menu_standard_c
END_DEFINE
(注)まだ未完成です。
3.メニュー名前を指示します。 (CURRENT_MENU ファンクション)
例:名前を'M_c_on_off'と、します。
{ コバイロットの選択}
DEFINE Ma_menu_standard_c
CURRENT_MENU
'M_c_on_off'
{名前の設定と、カレントにセット}
END_DEFINE
(注)まだ未完成です。
4.メニュー・スロットの定義部を作成しま す。 (MENU_LAYOUT ファンクション)
メニューの位置と、行毎の高さ、スロット幅の指示を行います。
位置は、ピクセル単位での画面の位置又は、上下、左右に合わせる事ができます。
UPPER:上に合わせる
LOWER:下に合わせる
RIGH:右に合わせる
LEFT:左に合わせる
高さは、ドットと、キャラクターが指定できます。
ドット:数値
キャラクター:Text_slot_height は、キャラクターの高さになります。
例:
2ピクセルの高さ:2
2文字(キャラクター)分の高さ:(2*Text_slot_height)
スロットのレイアウトは、各行毎に割付ます。
指示は、文字列の形で指定します。
縦の区切り線は、半角の | で表して、その間には、スペース、数値文字などで埋めます。
例:
{ コバイロットの選択}
DEFINE Ma_menu_standard_c
CURRENT_MENU
'M_c_on_off'
{名前の設定と、カレントにセット}
MENU_LAYOUT
UPPER LEFT
{左上に合わせる}
(2*Text_slot_height)
'
'
{1行目 2キャラクター高さ}
5
'
' {2行目 5ピクセル高さ}
(3*Text_slot_height)
'12345678|12345678|12345678'
{3行目 3キャラクター高さ、スロットは、3で、全て8文字幅}
END
{レ
イアウト設定完の印}
END_DEFINE
(注)まだ未完成です。
解説:
UPPER :上方に合わせる
LEFT :左に寄せる
(2*Text_slot_height) :2キャラクターの高さ
5 :5ピクセルの高さ
5.メニュー・スロットの定義をしましょう。(MENU ファンクション)
例:
{ コバイロットの選択}
DEFINE Ma_menu_standard_c
CURRENT_MENU
'M_c_on_off'
{名前の設定と、カレントにセット}
MENU_LAYOUT
UPPER LEFT
{左上に合わせる}
(2*Text_slot_height)
'
'
{1行目 2キャラクター高さ}
5
'
' {2行目 5ピクセル高さ}
(3*Text_slot_height)
'12345678|12345678|12345678'
{3行目 3キャラクター高さ、スロットは、3で、全て8文字幅}
END
{レ
イアウト設定完の印}
MENU CENTER 'コパイロット切り替え' '' 1 1
MENU Colo3 Bcol3 '' '' 2 1
MENU Colo1 Bcol5 CENTER 'ON'
'UA_COPILOT ON' 3 1
MENU Colo1 Bcol5 CENTER 'OFF'
'UA_COPILOT OFF' 3 2
MENU Colo1 Bcol5 CENTER '抜ける'
'DELETE_MENU "M_c_on_off"' 3 3
END_DEFINE
(注)これで、完成です。
解説:
MENU コマンドに引き続いて、下記の項目を記述します。
もし記入しないなら、MENU_LAYOUTのデフォルトにセットされていま す。
表示色: メニュースロット内のテキストまたは図形の色
背景色: メニュー・スロットの背景色
(注)色はCOLOR
ファンクションの指定方法以外に、スロット色番号(Colo1、Bcol5等)でも指定が出来ます。
表示色は、Colo 背景色はBcolで、0から7までに色が割り当て
られています。
CENTER: 表示テキストをスロット幅の中央に配置
表示テキスト: メニュー・スロットに表示するテキスト(下記参照)
アクション・テキスト: メニュー・スロットをクリックした時,
入力として使用されるテキスト
DITHER:
設定されていなければ,
背景色はディザされません。
行: メニュー・スロットの行番号
列: メニュー・スロットの列番号
(注)箱の範囲で指定する場合は BOX の引数に続いて、箱範囲の位置を書き込みます。
始めの行: メニュー・スロットの開始行番号
始めの列: メニュー・スロットの開始列番号
終りの行: メニュー・スロットの終了行番号
終りの列: メニュー・スロットの終了列番号
スクリーン・メ ニューを削除する
CURRENT_MENU
ファンクションで、メニューをカレントにして、DELETE_MENU
ファンクションを実行します。
例:
CURRENT_MENU 'メニュー名'
DELETE_MENU
一の要素情報(INQ_ELEM ファンクション)
指示した、位置の要素情報をINQ 域に入れます。
次に、INQ コマンドを使って、情報照会をします。
解説:
INQ
コマンドは、ME10からの情報の照会として、各ファンクションで使われています。
INQ_ELEM ファンクションは、 ヘルプの INQ_ELEM
ファンクションの INQインデックスを参照して下さい。
1.要素の情報を、INQ 域に入れます。
要素上の点をパラメータとして、INQ_ELEM を実行します。
INQ_ELEM |要素上の点|
この操作で、INQ 域に、情報が入ります。
例1:Pint01 に要素上の点のデータが入っている場合。
INQ_ELEM Pint01
例2:要素上の点データを直接書き込む場合。
INQ_ELEM (PNT_XY 12.5
-98.2)
{数値は、仮のデータです。(X方向12.5とY方向-98.2の位置)}
例3:位置をマクロで指定しない。
INQ_ELEM
この場合は、位置をマウスなどで指示します。
参考:
たくさん寄っている要素の場所に、このファンクションを実行すると、最後に実行した要素の情報が INQ 域に入ります。
2.INQ
コマンドを実行して、細部の情報を照会します。
例:
Display (INQ
403)
{要素のタイプを表示する}
複要素の情報 (INQ_NEXT_ELEM と
INQ_SELECTED_ELEMファンクション)
選択した、複数の要素情報を順次、入手します。
1要素毎に、2段階の操作で、情報照会が出来ます。
最初は、INQ_NEXT_ELEM
ファンクションで、要素の情報を、INQ 域に入れます。
次からは、NQ_SELECTED_ELEM ファンクションを使います。
これらの情報は、INQ コマンドを使って、情報照会が、出来ます。
解説:
INQ
コマンドは、ME10からの情報の照会として、各ファンクションで使われています。
INQ_ELEM ファンクションは、ヘルプ の INQ_ELEM
ファンクションの INQインデックスを参照して下さい。
例1:
INQ_SELECTED_ELEM (PNT_XY
12.5
-98.2)
{数値は、仮のデータです。(X方向12.5とY方向-98.2の位置)}
Display (INQ
14)
{選択した、要素の数}
Display (INQ
403)
{要素のタイプを表示する}
INQ_NEXT_ELEM
{次の要素の情報を、INQ 域に入れる}
Display (INQ
14)
{選択した、要素の数}
{(注)2回目なので、最初の数から、1減っている}
Display (INQ
403)
{要素のタイプを表示する}
INQ_NEXT_ELEM
{次の要素の情報を、INQ 域に入れる}
Display (INQ
14)
{選択した、要素の数}
{(注)3回目なので、最初の数から、2減っている}
解説:
一箇所に、たくさんの要素が集まっている場合に、位置を指定した場合の例です。
BOXの範囲等でも、指定できます。
例2:
INQ_SELECTED_ELEM GLOBAL
CIRCLES ALL
解説:
全パーツの、円の要素を全てを選択。
GLOBAL :全てのパーツ
CIRCLES :円
ALL
:表示有効なパーツの中の全て
例3:
INQ_SELECTED_ELEM SELECT
GLOBAL CIRCLES ALL AND GLOBAL ARCS
ALL CONFIRM
解説:
全パーツの、円と弧の要素を全てを選択。
GLOBAL :全てのパーツ
CIRCLES :円
ARCS :弧
ALL
:表示有効なパーツの中の全て
CONFIRM :確認(選択終了)
解説:
多要素の情報を得るための選択は、全パーツ、箱の範囲、要素のタイプなどの指定 の方法があります。
詳しくは、ME10ヘルプの select を参照。
複要 素から、指定の要素タイプの情報を得るには
例:円(CIRCLE)の中心点の位置を変 数 P1 に取り出したい。
DEFINE Ma_test
LOCAL
Point1
{指定の位置1}
LOCAL
Point2
{指定の位置2}
LOCAL
P1
{中心点の位置}
LOCAL
Quantity
{得られた要素の数}
LOCAL
Flag
{要素の区別}
READ PNT '** 取り出す要素の、BOX位置を指定して下さい。**' Point1
READ PNT '** 取り出す要素の、BOX位置を指定して下さい。**' RUBBER_BOX Point1
Point2
LOOP
LET Quantity
0
{要素の数情報をリセット}
INQ_SELECTED_ELEM
BOX Point1
Point2
{最初の要素情報をBOXの範囲で取り出す}
LET Quantity (INQ
14)
{要素の数情報をセット}
LOOP
EXIT_IF ((INQ
403) =
CIRCLE)
{円なら}
EXIT_IF ((INQ 14)
=
1)
{最後の要素なら}
INQ_NEXT_ELEM
{次の要素情報}
END_LOOP
EXIT_IF ((INQ 403) =
CIRCLE)
{円なら抜ける}
READ PNT '**
要素の、新 たなBOX位置を 指定して下さい。**' Point1
READ PNT '** 要
素の、取り出すBOX位 置を指定して下さい。**' RUBBER_BOX
Point1 Point2
END_LOOP
LET P1 (INQ
101)
{中心点の位置を取得}
DISPLAY
P1
{中心点の位置を表示}
END_DEFINE
照会で きる要素タイプ(Ver 8.70g)
点 POINT
線 LINE
円 CIRCLE
円弧 ARC
フィレット FILLET
下書き線 C_LINE
C_CIRCLE
文字 TEXT
Bスプライン BSPLINE
寸法線 DIM_LINE
DIM_RADIUS
DIM_DIAMETER
DIM_ARC
DIM_ANGLE
DIM_CHAIN
DIM_DATUM_SHORT
DIM_DATUM_LONG
DIM_COORD
DIM_CHAMFER
中心線 CENTERLINE
引き出し線 LEADER_LINE
対称線 SYMLINE
参照線 REFLINE
要素無し END
要素無しパーツ INIT_PART
(注)END と INIT_PART の、要素情報は有りません。
BSPLINE の詳細情報
BSPLINE の詳細情報は、INQ 域以外にも、論理テーブル
'BSpline_basic_table' に作られます。
内容:
タイトル・セクション:(番号)
B-スプラインの次数 (1)
B-スプラインの長さ (2)
制御多角形内の点の数 (3)
補間点の数 (4)
節点ベクトルの長さ (5)
閉鎖フラグ (6)
データ・セクション:
最初のカラム : 制御多角形のX座標
2番目のカラム: 制御多角形のY座標
3番目のカラム: 補間点のX座標
4番目のカラム: 補間点のY座標
5番目のカラム: 節点ベクトル の数
データの読み出しには、READ_LTAB
算術ファンクションを使用します。
例1:
Display (READ_LTAB
'BSpline_basic_table'
TITLE 2)
解説:
B-スプラインの長さを表示する。
例2:
Display (READ_LTAB
'BSpline_basic_table'
2 3)
解説:
2番目の、補間点のX座標を表示する。
要素タイプの END とは
要素情報を、ファンクションを使う場合に、指定した場所に要素がなければ、
INQ 域の要素タイプには、END が入れられます。
多要素とは
連続線などは、複数の要素から成り立っているので、多要素と 呼ばれます。
見わけるには、INQ_ELEM 等で、要素情報を INQ
域に入れてから、INQ 13 を使います。
0 なら、単要素
1 なら、多要素
当然、要素の数は、1を越えます。(INQ 14)
気をつけて作りました、使用してのトラブルに責任は持てませんが、
自由にお使い下さい。(伏 見 表)