2003.02.06 更新
新規 1.スタンプの使い方 2003.02.06
新規 2.スタンプ/格納ファィルの仕様 2003.02.06
新規 3.スタンプ・描画・位置の処理 2003.02.06
新規 4.スタンプ・描画・数値の処理 2003.02.06
新規 5.スタンプ・描画・文字の処理 2003.02.06
新規 6.スタンプ・描画・1行データから頭データ除去 2003.02.06
新規 7.スタンプ・描画・本体 2003.02.06
新規 8.スタンプ・描画・位置、方向入力 2003.02.06
新規 9.スタンプ・描画 2003.02.06
新規 10.スタンプ・リスト枠の消去 2003.02.06
新規 11.スタンプ・合致する、スタンプ名の行位置 2003.02.06
新規 12.スタンプ・枠の内容定義 2003.02.06
新規 13.スタンプ・枠の定義 2003.02.06
新規 14.スタンプ・リスト枠の表示 2003.02.06
新規 15.スタンプ・リストデータの作成 2003.02.06
新規 16.スタンプ・保存・テキストデータを文字列データに変換 2003.02.06
新規 17.スタンプ・変換・線種データ→文字列 2003.02.06
新規 18.スタンプ・保存・文字列の置き換え 2003.02.06
新規 19.スタンプ・パス名からファイル名を切り出す 2003.02.06
新規 20.スタンプ・保存・要素データの作成 2003.02.06
新規 21.スタンプ・制作、格納 2003.02.06
2.[スタンプ・制作、格納] から [スタンプ・描画・位置の処理]までを、マ
クロの使い方を参考にして、ME10にINPUTして下さい。
ページ先頭の、マクロファイルが利用できます。(解凍する必要がありますが!)
3.それ以外にも、下記のマクロをインプットして下さい。
Ma_line_Pattern 作 図に有ります。
Ma_figure_direction
部品描画に有ります。
Ma_data_line_jump 部品描画に有ります。
4.スタンプで描くためには、スタンプを作ります。
サポートされている、描画コマンドは、スタンプファィルの仕様を見て下さい。これ以外の描画コマンドは、無視されます。
つまり、下書き線は無視されますので、活用して下さい。
5.アクティブパーツだけか、スタンプ変換されますので、スタンプにしたいパーツに移動して下さい。、
6.{Ma_stamp_make}を実行して下さい。カレントディレクトリーのファイルに格納されます。
スタンプの名前は、半角で40文字までです。大文字、小文字が区別されます。
新規、追加、上書きをすることが出来ます。
7.スタンプファィル内のスタンプデータを使い、描画が出来ます。
8.[Ma_stamp_draw]を実行して下さい。
拡大率が入力出来ますので、スタンプの大きさを描画時点で変更できます。
描画方法の、絶対は、縮尺に関係なく描画しますので、縮尺1/2なら、2倍大きさで描画されます。相対は、縮尺を考えて描画されます。
9.スタンプの格納ファィルは、アスキーデータなので、編集は可能です。
(区別番号)
0=スタンプ名行 1=データ行 -1=スタンプの終了印行
2.スタンプ名称の仕様:
同じスタンプ名が格納されている場合は、ファィルの先頭に近いスタンプが有効です。
名前の長さは、半角で、40以内(越える分は、切り捨てられます。)
3.スタンプ内の文字長さの制限:
1行は、半角で510文字以内です。
4.スタンプの使用コマンド(下書き線、ハッチ、参照線等は、無視されます。)
(コマンド)
POINT (共通) 点
LINE (共通) TWO_PTS 始点 終点
CIRCLE (共通) CENTER 中心点 円周上の点
ARC (共通) CEN_BEG_END 中心点 始点 終点
FILLET (共通) LITERAL 中心点 始点 終点
TEXT (共通) (テキスト専用) 文字・・・ 位置
BSPLINE (共通) 区別(OPEN又はCLOSED) ORDER 数値 補間点・・・
END
(下記のコマンドは、LINE又ARC に直しています。)
CENTERLINE → LINE (共通) TWO_PTS 始点 終点 TWO_PTS 始点 終点
SYMLINE(LINE) → LINE (共通) TWO_PTS 始点 終点
SYMLINE(CIRCLE)→ ARC (共通) CEN_BEG_END 中心点 始点 終点
(共通)
コマンドの次のデータ
RGB_COLOR 数値 数値 数値 線種(SOLID
DASHED
LONG_DASHED DOT_CENTER DASH_CENTER PHANTOM CENTER_DASH_DASH
DOTTED)
(テキスト専用)
TEXT_ADJUST 数値 TEXT_LINESPACE 数値 TEXT_RATIO 数値 TEXT_SIZE
数値 TEXT_SLANT 数値 TEXT_ANGLE 数値 TEXT_FRAME スイッチ(OFF BOX
BALLOON)
TEXT_FILL スイッチ(ON OFF)
5.点の格納様式
(PNT_XY 数値 数値)
{ スタンプ・描画・位置の処理
2003.01.31
}
DEFINE Ma_stamp_draw_process_point
PARAMETER
Count
{処理数}
PARAMETER
Center
{描画中心}
PARAMETER
Size
{大きさ}
PARAMETER
Spin
{回転角度(その時の角度の単位)}
PARAMETER
Absolute
{絶対値描画値}
PARAMETER
Basket
{1行データ}
PARAMETER
Handler
{使用ファイル番号}
LOCAL
Cotlocation
{切断位置}
LOCAL
Piece
{処理データ}
LOCAL
Piece_x
{処理データ X}
LOCAL
Piece_y
{処理データ Y}
LOCAL
Sirui
{抜け出し記号}
LOCAL
Flag
{異常の印}
LOOP
LET Basket (TRIM
Basket)
{スペースカット}
IF ((POS Basket '(PNT_XY ') =
1)
{点なら}
LET Sirui
2
{2つの数値データ}
Ma_stamp_draw_datacut_head
Basket
{先頭データの除去}
LET Basket
Gl_fruit
{残りの1行データ}
LOOP
LET Basket
(TRIM
Basket)
{スペースカット}
LET Cotlocation
(POS
Basket '
')
{切断位置}
IF
((Cotlocation = 0)
AND (Count > 1) AND (Sirui > 1))
display
'*** データ異常です。終了します。***'
CLOSE_FILE
Handler
{ファイルのクローズ}
CANCEL
ELSE_IF
((Cotlocation
= 0) AND (Count = 1) AND (Sirui = 1))
LET
Piece
Basket
{切りだしデータ}
LET
Basket
''
ELSE
LET
Piece
(SUBSTR Basket 1 (Cotlocation - 1)) {切りだしデータ}
LET
Basket
(SUBSTR Basket (Cotlocation + 1) ((LEN Basket) -
Cotlocation))
END_IF
LET Flag
1
{異常値をセット}
IF ((((POS
Piece ')')
= 0) AND (Sirui = 2)) OR (((POS Piece ')') = (LEN Piece))
AND (Sirui =
1))) {)のチェック}
IF
((TYPE
(VAL Piece)) = NUMBER)
LET
Flag 0
END_IF
END_IF
IF (Flag = 0)
IF
(Sirui
= 2)
LET
Piece_x (VAL Piece)
ELSE
LET
Piece_y (VAL Piece)
END_IF
ELSE
display
'*** データ異常です。終了します。***'
CLOSE_FILE
Handler
{ファイルのクローズ}
CANCEL
END_IF
EXIT_IF (Sirui = 1)
LET Sirui
(Sirui - 1)
END_LOOP
((ROT (((PNT_XY Piece_x
Piece_y)
* Size) / Absolute) Spin) + Center)
{書き込み}
ELSE
display '***
データ異常です。終了します。***'
CLOSE_FILE
Handler
{ファイルのクローズ}
CANCEL
END_IF
EXIT_IF (Count = 1)
LET Count (Count - 1)
END_LOOP
LET Gl_fruit Basket {戻り値・1行データの残り}
END_DEFINE
{ スタンプ・描画・数値の処理
2003.01.31
}
DEFINE Ma_stamp_draw_process_number
PARAMETER
Count
{処理数}
PARAMETER
Size
{大きさ}
PARAMETER
Spin
{回転角度(その時の角度の単位)}
PARAMETER
Angle_unit
{ラディアンへの変換値}
PARAMETER
Absolute
{絶対値描画値}
PARAMETER
Basket
{1行データ}
PARAMETER
Handler
{使用ファイル番号}
LOCAL
Cotlocation
{切断位置}
LOCAL
Piece
{処理データ}
LOOP
LET Basket (TRIM
Basket)
{スペースカット}
LET Cotlocation (POS Basket '
')
{切断位置}
IF (Cotlocation =
0)
{1行データの最後なら}
display '***
データ異常です。終了します。***'
CLOSE_FILE
Handler
{ファイルのクローズ}
CANCEL
ELSE
LET Piece (SUBSTR Basket 1
(Cotlocation
- 1)) {切りだしデータ}
LET Basket (SUBSTR Basket
(Cotlocation
+ 1) ((LEN Basket) - Cotlocation))
END_IF
IF ((TYPE (VAL Piece)) = NUMBER)
(((((VAL Piece) /
Angle_unit) *
Size) / Absolute) + Spin) {書き込み}
ELSE
display '***
データ異常です。終了します。***'
CLOSE_FILE
Handler
{ファイルのクローズ}
CANCEL
END_IF
EXIT_IF (Count = 1)
LET Count (Count - 1)
END_LOOP
LET Gl_fruit Basket {戻り値・1行データの残り}
END_DEFINE
{ スタンプ・描画・文字の処理
2003.01.31
}
DEFINE Ma_stamp_draw_process_text
PARAMETER
Basket
{1行データ}
PARAMETER
Handler
{使用ファイル番号}
LOCAL
Cotlocation
{切断位置}
LOCAL
Piece
{処理データ}
LET Piece ''
LET Basket (SUBSTR Basket 2 ((LEN Basket) - 1))
{先頭1文字を削除}
LOOP
LET Cotlocation (POS Basket
"'")
{後ろの'を探す}
IF (Cotlocation =
0)
{後に文字列がない}
display '***
データ異常です。終了します。***'
CLOSE_FILE
Handler
{ファイルのクローズ}
CANCEL
END_IF
EXIT_IF (Cotlocation <> (POS Basket
"''"))
{'を文字列に含ま無い場合}
LET Piece (Piece + (SUBSTR Basket 1
(Cotlocation
+ 1)))
LET Basket (SUBSTR Basket (Cotlocation
+ 2)
((LEN Basket) - (Cotlocation + 1)))
END_LOOP
LET Piece (Piece + (SUBSTR Basket 1 (Cotlocation -
1)))
LET Basket (SUBSTR Basket (Cotlocation + 1) ((LEN
Basket)
- Cotlocation))
Piece {文字データ書き込み}
LET Gl_fruit Basket {戻り値・1行データの残り}
END_DEFINE
{ スタンプ・描画・1行データから頭データ除去
2 003.01.31
}
DEFINE Ma_stamp_draw_datacut_head
PARAMETER
Basket
{1行データ}
LOCAL
Cotlocation
{切断位置}
LET Basket (TRIM
Basket)
{スペースカット}
LET Cotlocation (POS Basket '
')
{切断位置}
LET Gl_fruit (SUBSTR Basket (Cotlocation + 1) ((LEN
Basket)
- Cotlocation))
{戻り値・1行データの残り}
END_DEFINE
{ スタンプ・描画・本体
2003.01.31
}
DEFINE Ma_stamp_draw_main
PARAMETER
Handler
{使用ファイル番号}
PARAMETER
Line_number
{スタンプ名の行位置}
PARAMETER
Center
{描画中心}
PARAMETER
Size
{大きさ}
PARAMETER
Spin
{回転角度}
PARAMETER
Absolute
{絶対値描画}
LOCAL
Env_color_figure
{図形線色}
LOCAL
Env_color_text
{文字線色}
LOCAL
Env_line_figure
{図形線種}
LOCAL
Env_text_adjust
{文字原点}
LOCAL
Env_text_linespace
{文字間隔}
LOCAL
Env_text_ratio
{文字幅比}
LOCAL
Env_text_size
{文字高}
LOCAL
Env_text_srant
{文字傾き}
LOCAL
Env_text_angle
{文字列角}
LOCAL
Env_text_frame
{文字囲枠}
LOCAL
Env_text_file
{文字輪郭}
LOCAL
Angle_unit
{ラディアンへの変換値}
LOCAL
Basket
{1行データ}
LOCAL
Name
{スタンプ名}
LOCAL
Sirui
{抜け出し記号}
LOCAL
Cotlocation
{切断位置}
LOCAL
Piece
{処理データ}
{ 環境の取得・格納}
INQ_ENV 3
LET Env_color_figure (INQ
201)
{図形線色}
LET Env_color_text (INQ
203)
{文字線色}
LET Env_line_figure (INQ
301)
{図形線種}
Ma_stamp_convert_linetype_word
Env_line_figure
LET Env_line_figure Gl_fruit
INQ_ENV 12
LET Env_text_adjust (INQ
3)
{文字原点}
LET Env_text_linespace (INQ
4)
{文字間隔}
LET Env_text_ratio (INQ
5)
{文字幅比}
LET Env_text_size (INQ
6)
{文字高}
LET Env_text_srant (INQ
7)
{文字傾斜}
LET Env_text_angle (INQ
8)
{文字列角}
LET Env_text_frame (INQ
601)
{文字囲枠}
LET Env_text_file (INQ
602)
{文字輪郭}
INQ_ENV 6
LET Angle_unit (INQ
3)
{ラディアンへの変換値}
Ma_data_line_jump
Handler (Line_number - 1) {データの頭出し}
READ_FILE Handler
Basket
{データの1行取得}
LET Name (SUBSTR Basket 3 ((LEN Basket) -
2))
{スタンプ名の切り出し}
ADD_CURRENT_INFO ('stamp:' +
Name)
{属性をセットする}
LOOP
READ_FILE Handler
Basket
{データの1行取得}
EXIT_IF (((POS Basket '0,') = 1) OR ((POS Basket
'-1') =
1)) {終了なら}
LET Basket (TRIM
Basket)
{スペースカット}
IF ((POS Basket '1,POINT') =
1)
{POINT
なら}
POINT
ELSE_IF ((POS Basket '1,LINE') =
1)
{LINE なら}
LINE
ELSE_IF ((POS Basket '1,CIRCLE') =
1)
{CIRCLE なら}
CIRCLE
ELSE_IF ((POS Basket '1,ARC') =
1)
{ARC' なら}
ARC
ELSE_IF ((POS Basket '1,FILLET') =
1)
{FILLET なら}
FILLET
ELSE_IF ((POS Basket '1,TEXT') =
1)
{TEXT なら}
TEXT
ELSE_IF ((POS Basket '1,BSPLINE') =
1)
{BSPLINE なら}
BSPLINE
ELSE_IF ((POS Basket '1,CENTERLINE') =
1)
{CENTERLINE なら}
CENTERLINE
ELSE_IF ((POS Basket '1,') =
1)
{その他のデータ行なら}
END_IF
Ma_stamp_draw_datacut_head
Basket
{頭のデータカット}
LET Basket Gl_fruit
LET Sirui 1
LOOP
LET Basket (TRIM
Basket)
{スペースカット}
IF ((POS Basket "'") =
1)
{テキスト文なら}
Ma_stamp_draw_process_text
Basket Handler {文字の処理}
LET Basket
Gl_fruit
ELSE
LET Cotlocation
(POS
Basket '
')
{切断位置}
IF (Cotlocation
<>
0)
{最後のデータなら}
LET
Piece
(SUBSTR Basket 1 (Cotlocation - 1)) {切りだしデータ}
LET
Basket
(SUBSTR Basket Cotlocation ((LEN Basket) - (Cotlocation -
1)))
ELSE
LET
Piece
Basket
LET
Basket
''
END_IF
{ 線色}
IF (Piece =
'RGB_COLOR')
RGB_COLOR
Ma_stamp_draw_process_number
3 1 0 1 1 Basket Handler {数値の処理}
LET
Basket
Gl_fruit
{ 線種}
ELSE_IF (Piece
= 'SOLID')
SOLID
ELSE_IF (Piece
= 'DASHED')
DASHED
ELSE_IF (Piece
= 'LONG_DASHED')
LONG_DASHED
ELSE_IF
(Piece
= 'DOT_CENTER')
DOT_CENTER
ELSE_IF (Piece
= 'DASH_CENTER')
DASH_CENTER
ELSE_IF (Piece
= 'PHANTOM')
PHANTOM
ELSE_IF (Piece
= 'PHANTOM')
PHANTOM
ELSE_IF (Piece
= 'CENTER_DASH_DASH')
CENTER_DASH_DASH
ELSE_IF (Piece
= 'DOTTED')
DOTTED
ELSE_IF (Piece
= 'TWO_PTS')
TWO_PTS
Ma_stamp_draw_process_point
2 Center Size Spin Absolute Basket Handler {点の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'CENTER')
CENTER
Ma_stamp_draw_process_point
2 Center Size Spin Absolute Basket Handler {点の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'CEN_BEG_END')
CEN_BEG_END
Ma_stamp_draw_process_point
3 Center Size Spin Absolute Basket Handler {点の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'LITERAL')
LITERAL
Ma_stamp_draw_process_point
3 Center Size Spin Absolute Basket Handler {点の処理}
LET
Basket
Gl_fruit
{ テキスト専用なら}
ELSE_IF (Piece
= 'TEXT_ADJUST')
TEXT_ADJUST
Ma_stamp_draw_process_number
1 1 0 1 1 Basket Handler {数値の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'TEXT_LINESPACE')
TEXT_LINESPACE
Ma_stamp_draw_process_number
1 Size 0 1 1 Basket Handler {数値の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'TEXT_RATIO')
TEXT_RATIO
Ma_stamp_draw_process_number
1 1 0 1 1 Basket Handler {数値の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'TEXT_SIZE')
TEXT_SIZE
Ma_stamp_draw_process_number
1 Size 0 1 Absolute Basket Handler {数値の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'TEXT_SLANT')
TEXT_SLANT
Ma_stamp_draw_process_number
1 1 0 Angle_unit 1 Basket Handler {数値の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'TEXT_ANGLE')
TEXT_ANGLE
Ma_stamp_draw_process_number
1 1 Spin Angle_unit 1 Basket Handler {数値の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'TEXT_FRAME')
TEXT_FRAME
ELSE_IF (Piece
= 'TEXT_FILL')
TEXT_FILL
ELSE_IF (Piece
= 'OFF')
OFF
ELSE_IF (Piece
= 'BOX')
BOX
ELSE_IF (Piece
= 'BALLOON')
BALLOON
ELSE_IF (Piece
= 'ON')
ON
{ BSPLINE関係}
ELSE_IF (Piece
= 'BSPLINE')
BSPLINE
ELSE_IF (Piece
= 'OPEN')
OPEN
ELSE_IF (Piece
= 'CLOSED')
CLOSED
ELSE_IF (Piece
= 'ORDER')
ORDER
Ma_stamp_draw_process_number
1 1 0 1 1 Handler {数値の処理}
ELSE_IF (Piece
= '(PNT_XY')
LET
Basket
('(PNT_XY' + Basket)
Ma_stamp_draw_process_point
1 Center Size Spin Absolute Basket Handler {点の処理}
LET
Basket
Gl_fruit
ELSE_IF (Piece
= 'END')
END
END_IF
END_IF
IF (Basket =
'')
{1行完了なら}
LET Sirui 0
END_IF
EXIT_IF (Sirui = 0)
END_LOOP
END_LOOP
CHANGE_CURRENT_INFO ('stamp:' + Name) '' {属性のクリア}
{ 環境の復元}
LINE
RGB_COLOR
Env_color_figure
{図形線色}
Ma_line_Pattern
Env_line_figure
{図形線種}
TEXT
RGB_COLOR
Env_color_text
{文字線色}
TEXT_ADJUST
Env_text_adjust
{文字原点}
TEXT_LINESPACE
Env_text_linespace
{文字間隔}
TEXT_RATIO
Env_text_ratio
{文字幅比}
TEXT_SIZE
Env_text_size
{文字高}
TEXT_SLANT
Env_text_srant
{文字傾斜}
TEXT_ANGLE
Env_text_angle
{文字列角}
TEXT_FRAME
Env_text_frame
{文字囲枠}
TEXT_FILL
Env_text_file
{文字輪郭}
END_DEFINE
LOCAL
Angle_unit
{ラディアンへの変換値}
LOCAL
Point01
{方向用指示位置}
LOCAL
Direction
{方向}
LOCAL
Angle
{描画角度 (平面の場合はダミーとなる)}
LOCAL
Sirusi
{再入力判断}
INQ_ENV 6
LET Angle_unit (INQ
3)
{ラディアンへの変換値}
LOOP
LET Sirusi 0
READ PNT '** スタンプの方向を入力します。上向きは上、左向きは左
下向きは下 右向きは右の位置をクリック。(斜め上は、数値入力/斜め下は位置指示)
**' RUBBER_LINE Point00 Point01
LET Direction (ANG (Point01 -
Point00))
LET Direction (Direction *
Angle_unit)
{ラディアンへ変換}
Ma_figure_direction
Direction
{方向判断}
{ 角度値入力(ラディアン)}
IF (Gl_fruit =
1)
{右向きなら}
LET Angle (-PI / 2 /
Angle_unit)
ELSE_IF (Gl_fruit =
3)
{上向きなら}
LET Angle 0
ELSE_IF (Gl_fruit =
5)
{左向きなら}
LET Angle (PI / 2 /
Angle_unit)
ELSE_IF (Gl_fruit =
7)
{下向きなら}
LET Angle (PI / Angle_unit)
ELSE_IF ((Gl_fruit = 2) OR (Gl_fruit =
4))
{角度入力なら}
READ NUMBER STRING "**
描画角度を入力して下さい。(入力方法変更なら
'+++' を入力。) **" DEFAULT 0 Angle
IF ((TYPE Angle) = STRING)
LET Sirusi
1
{入力方法変更なら}
END_IF
ELSE
READ PNT STRING "**
描画の基準指示線を入力します。(入力方法変更なら
'+++' を入力。) **" RUBBER_LINE Point00 Point01
IF ((TYPE Point01) = PNT)
LET Angle (ANG
(Point01
- Point00))
ELSE
LET Sirusi
1
{入力方法変更なら}
END_IF
END_IF
EXIT_IF (Sirusi = 0)
END_LOOP
LET Gl_fruit Angle
END_DEFINE
{ スタンプ・描画
2003.01.31
}
DEFINE Ma_stamp_draw
LOCAL
Env_dir
{現在のカレントパス}
LOCAL
File_name
{スタンプ収納ファイル名}
LOCAL
Volume_file
{カレントバスのファイルの数}
LOCAL
Count
{カウント}
LOCAL
Stamp_name
{スタンプ名}
LOCAL
Stampdata_line
{スタンプデーの位置}
LOCAL
Line_number
{スタンプ名の行位置}
LOCAL
Size
{大きさ}
LOCAL
Spin
{回転角度}
LOCAL
Absolute
{絶対値描画}
LOCAL
Center
{描画中心}
INQ_ENV 0
LET Env_dir (INQ
302)
{現在のカレントパスの記憶}
{スタンプファイルの指定}
Fbt_dtabs_all_on
0
{ファイル一覧の表示}
READ STRING "** スタンプデータの'ファイル名'を入力して下さい。**"
File_name
LOOP
Ma_stamp_get_filename
File_name
{パス名からファイル名を切り出す}
LET File_name Gl_fruit
LET Volume_file (LTAB_ROWS
'FBT_FTAB')
{カレントバスのファイルの数}
LET Count
1
{カウンターのセット}
LOOP
EXIT_IF ((LWC (READ_LTAB 'FBT_FTAB'
Count 1))
= (LWC File_name))
EXIT_IF (Count =
Volume_file)
{ファィルがなければ}
LET Count (Count + 1)
END_LOOP
EXIT_IF (Count <>
Volume_file)
{ファィルが有れば}
READ STRING "**
指定のファイルが見つかりません。'ファイル名'を再入力して下さい。(終了は、'***'を入力。)
**" DEFAULT '***' File_name
IF (File_name = '***')
FBROWSER
UNMAP_ALL
{ファイル一覧の消去}
CANCEL
END_IF
END_LOOP
FBROWSER
UNMAP_ALL
{ファイル一覧の消去}
Ma_stamp_list_data_up
File_name
1
{リストデータの作成}
Ma_stamp_list_frame_on
{リストデータの表示}
LET Stamp_name ''
{ スタンプの指定}
READ STRING '** スタンプの名前を入力して下さい。(大文字、小文字は区別されます。)
**' Stamp_name
LET Stampdata_line -1 {名称の合致位置を合致しないにセット}
OPEN_INFILE 1
File_name
{既存スタンプファィルのオープン}
LOOP
Ma_stamp_get_agree_title
1 Stamp_name
{同じ名称があるか?}
EXIT_IF (Gl_fruit >
0)
{合致の名称があるなら}
READ STRING "**
スタンプ名が見つかりません。別の名前を入力して下さい。(大文字、小文字は区別されます。終了は、'***'を入力。)
**" DEFAULT Stamp_name Stamp_name
IF (Stamp_name = '***')
CLOSE_FILE
1
{スタンプファィルのクローズ}
CANCEL
END_IF
END_LOOP
LET Line_number
Gl_fruit
{名称の合致位置 0=合致しない}
CLOSE_FILE
1
{スタンプファィルのクローズ}
Ma_stamp_list_frame_off
{リストデータの削除}
{ 倍率の指定}
LOOP
READ NUMBER '**
スタンプの描画倍率を入力して下さい。終了は[ESC]キーを入力。)
**' Size
EXIT_IF (Size <> 0)
END_LOOP
{ 描画方法・相対/絶対}
READ NUMBER '** スタンプの描画方法を入力して下さい。(0=絶対サイズ 1=相対サイズ終了は[ESC]キーを入力。) **' Absolute
IF (Absolute = 0)
INQ_ENV 6
LET Absolute (INQ 4)
ELSE
LET Absolute 1
END_IF
{ 描画}
LOOP
READ PNT '**
スタンプの描画位置を指示して下さい。(終了は[ESC]キーを入力。)
**' Center {描画位置の取得}
Ma_stamp_draw_pointin
Center
{描画角度の入力}
LET Spin Gl_fruit
OPEN_INFILE 1
File_name
{スタンプファィルのオープン}
CURRENT_DIRECTORY
Env_dir
{カレントパスの復元}
Ma_stamp_draw_main
1 Line_number Center Size Spin Absolute {スタンプの描画}
CLOSE_FILE
1
{スタンプファィルのクローズ}
END_LOOP
END_DEFINE
{ スタンプ・リスト枠の消去
2003.02.05
}
DEFINE Ma_stamp_list_frame_off
LOCAL
Table_display
{表示用データのテーブル名}
LOCAL Table_name
LET Table_display
'##Stamp_display##'
{表示用データのテーブル名}
LET Table_name 'layout_stamp_01'
SHOW_TABLE OFF
Table_name
{枠の消去}
DELETE_TABLE
Table_name
{枠のテーブル削除}
DELETE_LTAB
Table_display
{表示用データのテーブル削除}
END_DEFINE
{ スタンプ・合致する、スタンプ名の行位置
2003.01.31
}
DEFINE Ma_stamp_get_agree_title
{ 戻りデータ 有った=No 無かった=0
}
PARAMETER
Id
{ファィルのID}
PARAMETER
Stamp_name
{スタンプの名前}
LOCAL
Line_number
{データの行数}
LOCAL
Check_data
{比較用データ}
LOCAL
Data00
{1行のデータ}
LOCAL
Data01
{行の区別番号}
LOCAL
Data02
{スタンプ名称}
LOCAL
Sirusi
{抜けだしの印}
Ma_data_line_jump
Id
4
{データの頭出し}
LET Line_number
4
{データの行}
LET Check_data ('0,' +
Stamp_name)
{スタンプ名行のデータ}
LET Sirusi 0
LOOP
READ_FILE 1
Data00
{データの1行取得}
LET Line_number (Line_number + 1)
IF (Data00 =
'END-OF-
FILE')
{合う名称が無い}
LET Sirusi 1
ELSE_IF (Data00 = '')
ELSE_IF ((POS Data00 '-1') =
1)
{最後なら}
LET Sirusi 1
ELSE_IF ((POS Data00 Check_data) =
1)
{合えば}
LET Sirusi 2
END_IF
EXIT_IF (Sirusi > 0)
END_LOOP
IF (Sirusi = 1)
LET Gl_fruit 0
ELSE
{合えば}
LET Gl_fruit Line_number
END_IF
END_DEFINE
{ スタンプ・枠の内容定義
2003.02.05
}
DEFINE Stamp_frame_display_01
PARAMETER
File_name
{ファィル名}
LOCAL
Frame_name
{パーツ検索枠のテーブル名}
LOCAL
Table_display
{表示用データのテーブル名}
LOCAL
Table_select
{検索データのテーブル名}
LET Frame_name
'layout_stamp_01'
{表示テーブル名}
LET Table_display
'##Stamp_display##'
{表示用データのテーブル名}
{タイトル行部分}
Table_control_icons
Frame_name
{タイトル行の記号枠内を記入}
WRITE_LTAB Table_display TITLE 1 Menu_delete_icon
{タイトル行の1番枠内に削除記号[0]
を記入}
TABLE_TITLE Frame_name
Pbt_head_fg Pbt_head_bg CENTER
'スタンプリスト'
'' 1 3
Pbt_head_fg Pbt_title_bg1 CENTER '' ''
2 1
{二重線内の色付け}
Pbt_title_fg Pbt_title_bg1 LEFT 'ファイル名'
'' 3 1
CENTER File_name '' 3 2 {ファィル名}
Pbt_title_fg Pbt_title_bg1 CENTER '' ''
4 1
{二重線内の色付け}
Pbt_title_fg Pbt_title_bg1 CENTER '番号'
''
5 1
Pbt_title_fg Pbt_title_bg1 CENTER
'スタンプ名'
'' 5 2
END
{データ行部分}
TABLE_COLUMN Frame_name
COLUMN 1 1 Pbt_data_fg Pbt_data_bg
CENTER '"@v3"'
{番号}
COLUMN 2 3 Pbt_data_fg Pbt_data_bg LEFT
'"@v3"'
{スタンプ名}
END
END_DEFINE
{ スタンプ・枠の定義
2003.02.05
}
DEFINE Stamp_frame_layout_01
LOCAL
Table_display
{表示用データのテーブル名}
LET Table_display
'##Stamp_display##'
{表示用データのテーブル名}
TRAP_ERROR
TABLE_LAYOUT 'layout_stamp_01'
Table_display
{表示テーブル名/データテーブル名}
IF (NOT CHECK_ERROR)
Bcol1
Bcol0
{表示色・背景色}
ROWS
15
{行数}
FRAME_WIDTH 5
HORIZONTAL SOLID
WHITE
{水平枠}
VERTICAL SOLID
WHITE
{鉛直枠}
SCROLL_BAR Bcol1
Bcol1
{スクロールバー}
TITLE_LAYOUT
(Headline_height+1) ' |
|タイト
ル
|
'
4 '
'
(Headline_height+1)
'ファイル名|1234567890123456789012345678901234567'
4 '
'
(Headline_height+1)
'番号
|スタンプ
名
'
END
COLUMN_LAYOUT
(Headline_height+1)
'9999
|12345678901234567890123456789012345678901' END
END_IF
END_DEFINE
{ スタンプ・リスト枠の表示
2003.02.05
}
DEFINE Ma_stamp_list_frame_on
LOCAL
Table_display
{表示用データのテーブル名}
LOCAL
Table_name
{表示枠の名前}
LET Table_display
'##Stamp_display##'
{表示用データのテーブル名}
LET Table_name
'layout_stamp_01'
{表示枠の名前}
Stamp_frame_layout_01
{枠の内容定義}
Stamp_frame_display_01
'SAMPLE'
{表示データの作成}
SHOW_TABLE ON
Table_name
{枠の表示}
MOVE_TABLE Table_name LOWER LEFT
END
{枠の表示位置/下の右}
END_DEFINE
{ スタンプ・リストデータの作成
2003.02.05
}
DEFINE Ma_stamp_list_data_up
PARAMETER
File_name
{スタンプファイル名}
PARAMETER
Handler
{使用ファイル番号}
LOCAL
Table_display
{表示用データのテーブル名}
LOCAL
Table_list
{スタンプリストのテーブル名}
LOCAL
Sirusi
{抜け出しの印}
LOCAL
Row_max
{登録スタンプ数}
LOCAL
Data00
{処理データ}
LOCAL
Row_no
{テーブルの行位置}
LOCAL
Data01
{処理データ}
LET Table_list
'##Stamp_list##'
{スタンプリストのテーブル名}
LET Table_display
'##Stamp_display##'
{表示用データのテーブル名}
{ 登録スタンプ数の算出}
OPEN_INFILE Handler
File_name
{既存スタンプファィルのオープン}
LET Row_max
0
{カウントの初期化}
Ma_data_line_jump
Handler
4
{データの頭出し}
LET Sirusi
0
{抜け出しの印}
LOOP
READ_FILE 1
Data00
{データの1行取得}
IF (Data00 =
'END-OF-
FILE')
{合う名称が無い}
LET Sirusi 1
ELSE_IF ((POS Data00 '-1') =
1)
{最後なら}
LET Sirusi 1
ELSE_IF ((POS Data00 '0,') =
1)
{合えば}
LET Row_max (Row_max + 1)
END_IF
EXIT_IF (Sirusi > 0)
END_LOOP
IF (Row_max <>
0)
{データが有れば}
CREATE_LTAB (Row_max + 1) 2
Table_list
{スタンプリストのテーブル確保}
OPEN_INFILE Handler
File_name
{既存スタンプファィルのオープン}
Ma_data_line_jump
Handler
4
{データの頭出し}
LET Sirusi
0
{抜け出しの印}
LET Row_no
1
{スタンプの数}
{ スタンプ名の処理}
LOOP
READ_FILE 1
Data00
{データの1行取得}
IF (Data00 =
'END-OF-
FILE')
{合う名称が無い}
LET Sirusi 1
ELSE_IF ((POS Data00 '-1')
=
1)
{最後なら}
LET Sirusi 1
ELSE_IF ((POS Data00 '0,')
=
1)
{合えば}
WRITE_LTAB
Table_list
Row_no 1 Row_no {番号}
LET Data01
(SUBSTR Data00
3 ((LEN Data00) - 2)) {スタンプ名の取得}
WRITE_LTAB
Table_list
Row_no 2 Data01 {書き込み}
LET Row_no
(Row_no +
1)
END_IF
EXIT_IF (Sirusi= 1)
DISPLAY_NO_WAIT
Row_no
{動作表示}
END_LOOP
CLOSE_FILE Handler
CREATE_LTAB 3 Row_max
Table_display
{表示用データのテーブル確保}
SORT_LTAB Table_list 2
CONFIRM
{リストのソート(名前基準)}
{ 表示用テーブルのデータ作成}
LET Row_no
1
{スタンプの数}
LOOP
WRITE_LTAB Table_display
Row_no
1 Row_no {行番号}
WRITE_LTAB Table_display
Row_no
2 (READ_LTAB Table_list Row_no 1) {スタンプの番号}
WRITE_LTAB Table_display
Row_no
3 (READ_LTAB Table_list Row_no 2) {スタンプ名}
EXIT_IF (Row_no = Row_max)
LET Row_no (Row_no + 1)
END_LOOP
ELSE
CREATE_LTAB 3 Row_max
Table_display
{表示用データのテーブル確保}
WRITE_LTAB Table_display 1 1
1
{行番号}
WRITE_LTAB Table_display 1 2
0
{スタンプの番号}
WRITE_LTAB Table_display 1 3 '**
スタンプの登録は有りません。**'
{スタンプ名}
END_IF
DELETE_LTAB Table_list {スタンプリストテーブルの削除}
END_DEFINE
{ スタンプ・保存・テキスト
データを文字列データに変換
2003.01.31
}
DEFINE Ma_stamp_text_to_string
PARAMETER
Quotation
{"
又は ' (含まれている引用符)}
PARAMETER
Data00
{テキストデータ}
LOCAL
Position
{引用符の位置}
IF (Quotation =
'"')
{"
なら}
LET Gl_fruit ''
ELSE
LET Gl_fruit ""
END_IF
LOOP
LET Position (POS Data00 Quotation)
EXIT_IF (Position =
0)
{含まれていなければ}
LET Gl_fruit (Gl_fruit + (SUBSTR Data00
1 Position))
LET Data00 (SUBSTR Data00 (Position +
1) ((LEN
Data00) - Position))
END_LOOP
LET Gl_fruit (Gl_fruit + Data00) {残りを移す}
END_DEFINE
{ スタンプ・変換・線種データ→文字列
2003.01.31
}
DEFINE Ma_stamp_convert_linetype_word
{ 線種データ
SOLID
:
'11111111111111111111111111111111' 実線
DASHED
: '11111111000000001111111100000000' 短破線
LONG_DASHED :
'11111111111000001111111111100000'
長破線
DOT_CENTER :
'11111111111110101111111111111010'
短一点鎖線
DASH_CENTER :
'11111111111101101111111111110110'
長一点鎖線
PHANTOM
: '11111111111010101111111111101010' 短二点鎖線
CENTER_DASH_DASH :
'11111111110101101111111111010110'
長二点鎖線
DOTTED
: '10101010101010101010101010101010' 点線
}
PARAMETER Linetype {線種}
IF (Linetype = '11111111111111111111111111111111')
LET Gl_fruit 'SOLID'
ELSE_IF (Linetype =
'11111111000000001111111100000000')
LET Gl_fruit 'DASHED'
ELSE_IF (Linetype =
'11111111111000001111111111100000')
LET Gl_fruit 'LONG_DASHED'
ELSE_IF (Linetype =
'11111111111110101111111111111010')
LET Gl_fruit 'DOT_CENTER'
ELSE_IF (Linetype =
'11111111111101101111111111110110')
LET Gl_fruit 'DASH_CENTER'
ELSE_IF (Linetype =
'11111111111010101111111111101010')
LET Gl_fruit 'PHANTOM'
ELSE_IF (Linetype =
'11111111110101101111111111010110')
LET Gl_fruit 'CENTER_DASH_DASH'
ELSE_IF (Linetype =
'10101010101010101010101010101010')
LET Gl_fruit 'DOTTED'
ELSE
LET Gl_fruit ''
END_IF
END_DEFINE
{ スタンプ・保存・文字列の置き換え
2003.01.31
}
DEFINE Ma_stamp_string_data_change
PARAMETER
String_data
{処理文字列}
PARAMETER
Letter00
{変更文字列}
PARAMETER
Letter01
{新文字列}
LOCAL
Position
{元の文字位置}
LOCAL
Length00
{処理文字長}
LOCAL
Length01
{変更文字長}
LET Length00 (LEN
String_data)
{処理文字長}
LET Length01 (LEN
Letter00)
{変更文字長}
LET Gl_fruit '' {初期化}
LOOP
LET Position (POS String_data Letter00)
EXIT_IF (Position =
0)
{含まれていなければ}
{ 処理済みデータ分と新文字列を移す}
IF (Position =
1)
{最初に位置しているなら}
LET Gl_fruit (Gl_fruit +
Letter01)
ELSE
LET Gl_fruit (Gl_fruit +
((SUBSTR
String_data 1 (Position - 1)) + Letter01))
END_IF
{ 残りのデータ}
LET String_data (SUBSTR String_data
(Position
+ Length01) ((LEN String_data) - Position - (Length01 - 1)))
END_LOOP
LET Gl_fruit (Gl_fruit + String_data) {残りを移す}
END_DEFINE
{ スタンプ・パス名からファイル名を切り出す
2003.01.31
}
DEFINE Ma_stamp_get_filename
PARAMETER Passname
LOCAL
Position
{位置}
LOOP
LET Position (POS Passname '/')
EXIT_IF (Position = 0)
LET Passname (SUBSTR Passname (Position
+ 1)
((LEN Passname) - Position))
END_LOOP
LET Gl_fruit Passname
END_DEFINE
{ スタンプ・保存・要素データの作成
2003.01.31
}
DEFINE Ma_stamp_write_data_element
{ INQ_ELEMで、要素が決まってから、このルーチンを呼び出すこと。
サポートしないコマンド
C_LINE、C_CIRCLE(下書き線)
DIM関係(寸法)
CENTERLINE(中心線)/線でサポート
LEADER_LINE(引き出し線)
REFLINE(参照線)
INIT_PART(子パーツ)
角度の単位は、ラディアンです。
TEXTとBSPLINEの戻り通函は、データベースです。(Gl_fruit_ltab)
戻り値(Gl_fruit)には、戻り通函の名前'Gl_fruit_ltab'が入っています。
それ以外の戻り値は、(Gl_fruit)です。
}
PARAMETER
Declination
{スタンプ原点への偏差}
PARAMETER
Angle_unit
{ラディアンへの変換値}
LOCAL
Declination_x
{偏差のX値}
LOCAL
Declination_y
{偏差のY値}
LOCAL
String_max
{文字列の限界設定}
LOCAL
Bowl01
{線色}
LOCAL
Bowl02
{線種}
LOCAL
Bowl04
{加工中データ}
LOCAL
Bowl03
{加工中データ}
LOCAL
Number_row
{データべーの行値}
LOCAL
After
{追加データを加える}
LOCAL
Number
{数}
LOCAL
Position
{位置}
LET Declination_x (X_OF
Declination)
{偏差のX値}
LET Declination_y (Y_OF
Declination)
{偏差のY値}
LET String_max
200
{文字列の限界設定}
LET Bowl01 (INQ
201)
{線色}
LET Bowl01 (STR Bowl01)
LET Bowl01 ('RGB_COLOR ' + Bowl01)
Ma_stamp_string_data_change
Bowl01 ',' ' ' {カンマをスペースに取り替え}
LET Bowl01 Gl_fruit
LET Bowl02 (INQ
301)
{線種}
Ma_stamp_convert_linetype_word
Bowl02
LET Bowl02 Gl_fruit
IF ((INQ 403) =
POINT)
{点}
LET Bowl04 ('POINT' + ' ' + Bowl01 + '
' + Bowl02)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
101) - Declination))
+ ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl04 (Bowl04 + ' END')
ELSE_IF ((INQ 403) =
LINE)
{線}
LET Bowl04 ('LINE' + ' ' + Bowl01 + ' '
+ Bowl02)
LET Bowl04 (Bowl04 + ' TWO_PTS')
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
101) - Declination))
+ ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
102) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl04 (Bowl04 + ' END')
ELSE_IF ((INQ 403) =
CIRCLE)
{円}
LET Bowl04 ('CIRCLE' + ' ' + Bowl01 + '
' +
Bowl02)
LET Bowl04 (Bowl04 + ' CENTER')
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
101) - Declination))
+ ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
102) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl04 (Bowl04 + ' END')
ELSE_IF ((INQ 403) =
ARC)
{円弧}
LET Bowl04 ('ARC' + ' ' + Bowl01 + ' '
+ Bowl02)
LET Bowl04 (Bowl04 + ' CEN_BEG_END')
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
101) - Declination))
+ ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
102) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
103) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl04 (Bowl04 + ' END')
ELSE_IF ((INQ 403) =
FILLET)
{フィレット}
LET Bowl04 ('FILLET' + ' ' + Bowl01 + '
' +
Bowl02)
LET Bowl04 (Bowl04 + ' LITERAL')
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
101) - Declination))
+ ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
102) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
103) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl04 (Bowl04 + ' END')
ELSE_IF ((INQ 403) =
TEXT)
{テキスト}
{ 戻り通函のカラム1に格納
最後は、カラム1のデータが無い
}
CREATE_LTAB 10 1
'Gl_fruit_ltab'
{戻りテーブルの作成}
LET Number_row 1
LET Bowl04 ('TEXT' + ' ' + Bowl01 + ' '
+ Bowl02)
LET Bowl04 (Bowl04
+ ' TEXT_ADJUST ' + (STR (INQ 3))
+ ' TEXT_LINESPACE ' + (STR (INQ 4))
+ ' TEXT_RATIO ' + (STR (INQ 5))
+ ' TEXT_SIZE ' + (STR (INQ 6))
+ ' TEXT_SLANT ' + (STR ((INQ 7) * Angle_unit))
+ ' TEXT_ANGLE ' + (STR ((INQ 8) * Angle_unit))
+ ' TEXT_FRAME ' + (STR (INQ 601))
+ ' TEXT_FILL ' + (STR (INQ 602))
)
WRITE_LTAB 'Gl_fruit_ltab' Number_row
1 Bowl04
{書き込み}
LET Number_row (Number_row +
1)
{次}
LET Bowl03 (INQ 902)
IF ((LEN Bowl03) <
511)
{長さが適切なら}
Ma_stamp_text_to_string
"'"
Bowl03
{引用符の文字列化}
LET Bowl04 (" '" +
Gl_fruit)
LOOP
EXIT_IF ((LEN Bowl04) <
250)
WRITE_LTAB
'Gl_fruit_ltab'
Number_row 1 (SUBSTR Bowl04 1 250)
LET Number_row
(Number_row
+
1)
{次}
LET Bowl04
(SUBSTR Bowl04
251 ((LEN Bowl04) - 250))
END_LOOP
ELSE
DISPLAY '**
一行の文字列の長さが、500(半角)を越えています。マクロを停止します。**'
CANCEL
{マクロを停止}
END_IF
LOOP
LET Bowl03 (INQ
903)
{次の行データ}
EXIT_IF (Bowl03 = 'END-OF-LIST')
IF ((LEN Bowl03) <
511)
{長さが適切なら}
Ma_stamp_text_to_string
"'" Bowl03
{引用符の文字列化}
LET Bowl04
(Bowl04 +
"' '" + Gl_fruit)
LOOP
EXIT_IF ((LEN
Bowl04)
< 250)
WRITE_LTAB
'Gl_fruit_ltab' Number_row 1 (SUBSTR Bowl04 1 250)
LET
Number_row
(Number_row +
1) {次}
LET
Bowl04
(SUBSTR Bowl04 251 ((LEN Bowl04) - 250))
END_LOOP
ELSE
DISPLAY '**
一行の文字列の長さが、500(半角)を越えています。マクロを停止します。**'
CANCEL
{マクロを停止}
END_IF
END_LOOP
LOOP
EXIT_IF ((LEN Bowl04) < 250)
WRITE_LTAB 'Gl_fruit_ltab'
Number_row
1 (SUBSTR Bowl04 1 250)
LET Number_row (Number_row
+
1)
{次}
LET Bowl04 (SUBSTR Bowl04
251 ((LEN
Bowl04) - 250))
END_LOOP
IF ((LEN Bowl04) >
0)
{データが有れば}
LET Bowl04 (Bowl04 + "'")
WRITE_LTAB 'Gl_fruit_ltab'
Number_row
1 Bowl04
LET Number_row (Number_row
+
1)
{次}
END_IF
LET Bowl04 (' (PNT_XY ' + (STR ((INQ
101) - Declination))
+ ')')
Ma_stamp_string_data_change
Bowl04 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Gl_fruit + ' END')
WRITE_LTAB 'Gl_fruit_ltab' Number_row 1
Bowl04
LET Bowl04 'Gl_fruit_ltab'
ELSE_IF ((INQ 403) =
BSPLINE)
{Bスプライン}
{ 戻り通函のカラム1に格納
最後は、カラム1のデータが無い
}
CREATE_LTAB 10 1
'Gl_fruit_ltab'
{戻りテーブルの作成}
LET Bowl03 ('BSPLINE' + ' ' + Bowl01 +
' ' +
Bowl02)
IF ((READ_LTAB 'BSpline_basic_table'
TITLE 6)
= 0) {オープンなら}
LET Bowl03 (Bowl03 + '
OPEN')
LET After 0
ELSE
LET Bowl03 (Bowl03 + '
CLOSED')
LET After
1
{原点データを加える}
END_IF
LET Bowl03 (Bowl03 + ' ORDER ' + (STR
(READ_LTAB
'BSpline_basic_table' TITLE 1))) {曲線の次数}
LET Number (READ_LTAB
'BSpline_basic_table'
TITLE 4) {補間点の数}
LET Position 1
LET Number_row
1
{戻りデータベースの行値}
LOOP
LOOP
IF (Position
<= Number)
LET
Bowl04
(' (PNT_XY'
+ ' ' + (STR ((READ_LTAB 'BSpline_basic_table'
Position 3)
- Declination_x)) {補間点のX座標}
+ ' ' + (STR ((READ_LTAB 'BSpline_basic_table'
Position 4)
- Declination_y)) {補間点のY座標}
+ ')'
)
ELSE
{原点への戻りデータの処理}
LET
Bowl04
(' (PNT_XY'
+ ' ' + (STR ((READ_LTAB 'BSpline_basic_table' 1 3)
- Declination_x))
{補間点のX座標}
+ ' ' + (STR ((READ_LTAB 'BSpline_basic_table' 1 4)
- Declination_y))
{補間点のY座標}
+ ')'
)
LET
After
0
END_IF
LET Bowl03
(Bowl03 +
Bowl04)
LET Position
(Position
+ 1)
EXIT_IF (((Position >
Number) AND
(After = 0)) OR ((LEN Bowl03) > String_max))
END_LOOP
EXIT_IF ((Position > Number) AND
(After = 0))
WRITE_LTAB 'Gl_fruit_ltab'
Number_row
1 Bowl03 {書き込み}
LET Bowl03 ''
LET Number_row (Number_row
+
1)
{次}
END_LOOP
LET Bowl03 (Bowl03 + ' END')
WRITE_LTAB 'Gl_fruit_ltab' Number_row 1
Bowl03
{書き込み}
LET Bowl04 'Gl_fruit_ltab'
ELSE_IF ((INQ 403) =
CENTERLINE)
{中心線}
LET Bowl04 ('LINE' + ' ' + Bowl01 + ' '
+ Bowl02)
LET Bowl04 (Bowl04 + ' TWO_PTS')
{ センター線1}
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
102) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
103) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
{ センター線2}
LET Bowl03 (' TWO_PTS (PNT_XY ' + (STR
((INQ
104) - Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl03 (' (PNT_XY ' + (STR ((INQ
105) -
Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 + Gl_fruit)
LET Bowl04 (Bowl04 + ' END')
ELSE_IF ((INQ 403) =
SYMLINE)
{対称線}
IF ((INQ 6) =
0)
{線分の対称線なら}
LET Bowl04 ('LINE' + ' ' +
Bowl01
+ ' ' + Bowl02)
LET Bowl04 (Bowl04 + '
TWO_PTS')
LET Bowl03 (' (PNT_XY ' +
(STR ((INQ
101) - Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 +
Gl_fruit)
LET Bowl03 (' (PNT_XY ' +
(STR ((INQ
102) - Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 +
Gl_fruit)
LET Bowl03 (Bowl04 + '
END')
ELSE
{円の対称線なら}
LET Bowl04 ('CIRCLE' + ' '
+ Bowl01
+ ' ' + Bowl02)
LET Bowl04 (Bowl04 + '
CENTER')
LET Bowl03 (' (PNT_XY ' +
(STR ((INQ
101) - Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 +
Gl_fruit)
LET Bowl03 (' (PNT_XY ' +
(STR ((INQ
102) - Declination)) + ')')
Ma_stamp_string_data_change
Bowl03 ',' ' ' {カンマをスペースに取り替え}
LET Bowl04 (Bowl04 +
Gl_fruit)
LET Bowl03 (Bowl04 + '
END')
END_IF
ELSE
{その他}
LET Bowl04 ''
END_IF
LET Gl_fruit Bowl04 {戻り値}
END_DEFINE
{ スタンプ・制作、格納
2003.01.31-2003.02.01
}
DEFINE Ma_stamp_make
LOCAL
Env_dir
{現在のカレントパス}
LOCAL
Angle_unit
{ラディアンへの変換値}
LOCAL
Content
{要素の有無 0=無し}
LOCAL
File_name
{格納ファイル名}
LOCAL
Volume_file
{カレントバスのファイルの数}
LOCAL
Count
{既存スタンプファイルの行カウンタ}
LOCAL
Stock
{既存スタンプファイル 無=0 有=1}
LOCAL
Basket
{通いのデータ}
LOCAL
Stamp_name
{スタンプの名前}
LOCAL
Stampdata_line
{既存のスタンプデータの位置}
LOCAL
Change_name
{スタンプの交換名}
LOCAL
Point_center
{スタンプの中心位置}
LOCAL
Stampend
{スタンプデータの終わり}
LOCAL
Sirusi
{抜けだし用のデータ}
LOCAL
Endline
{終了記号行のデータ}
LOCAL
Number_row
{データべーの行値}
DISPLAY '** スタンプデータを変換作成します。(カレント・パーツのデータを処理して、指定のファイルに格納します。)**'
INQ_ENV 0
LET Env_dir (INQ
302)
{現在のカレントパスの記憶}
INQ_ENV 6
LET Angle_unit (INQ
3)
{ラディアンへの変換値}
INQ_SELECTED_ELEM
ALL
{要素データの呼び出し}
LET Content
0
{要素有無の確認をリセット}
{スタンプ用の要素が掻かれているか?}
LOOP
Ma_stamp_write_data_element
(PNT_XY 0 0) Angle_unit {要素データの作成}
EXIT_IF (Gl_fruit <>
'')
{変換可能要素が存在}
IF ((INQ 14) =
1)
{変換可能要素が無ければ}
DISPLAY '**
カレントパーツに、スタンプに変換できる要素が有りません。
**'
CANCEL
{終了}
END_IF
INQ_NEXT_ELEM
END_LOOP
Fbt_dtabs_all_on
0
{ファイル一覧の表示}
READ STRING "** スタンプを格納する'ファイル名'を入力して下さい。**"
File_name
Ma_stamp_get_filename
File_name
{パス名からファイル名を切り出す}
LET File_name Gl_fruit
LET Volume_file (LTAB_ROWS
'FBT_FTAB')
{カレントバスのファイルの数}
LET Count
1
{カウンターのセット}
LET Stock
0
{既存ファィルの有無}
LOOP
IF ((LWC (READ_LTAB 'FBT_FTAB' Count
1)) = (LWC
File_name)) {ファイルが有るなら}
OPEN_INFILE 1
File_name
{既存スタンプファィルのオープン}
READ_FILE 1
Basket
{1行目を読み出し}
IF ((POS Basket
'"スタンプデータのファイル"')
= 1) {スタンプファイルなら}
LET Stock
1
{既存ファイル有りの印}
ELSE
CLOSE_FILE 1
READ STRING "**
指示されたファイルは、スタンプファイルでは有りません。'ファイル名'を入力して下さい。**"
File_name
Ma_stamp_get_filename
File_name
{パス名からファイル名を切り出す}
LET File_name
Gl_fruit
LET Count
0
{カウンターのセット}
END_IF
END_IF
EXIT_IF ((Count= Volume_file) OR (Stock = 1))
LET Count (Count + 1)
END_LOOP
FBROWSER
UNMAP_ALL
{ファイル一覧の消去}
IF (Stock =
1)
{既存スタンプファイルが存在するなら}
Ma_stamp_list_data_up
File_name
1
{リストデータの作成}
Ma_stamp_list_frame_on
{リストデータの表示}
END_IF
READ STRING '** スタンプの名前を入力して下さい。(大文字、小文字は区別されます。)
**' Stamp_name
LET Stampdata_line
-1
{名称の合致位置を合致しないにセット}
IF ((LEN Stamp_name) >
40)
{40文字以上なら}
LET Stamp_name (SUBSTR Stamp_name 1 40)
END_IF
IF (Stock =
1)
{既存スタンプファイルが存在するなら}
LOOP
OPEN_INFILE 1
File_name
{既存スタンプファィルのオープン}
Ma_stamp_get_agree_title
1 Stamp_name {同じ名称があるか?}
EXIT_IF (Gl_fruit =
0)
{合致の名称が無いなら}
READ STRING "**
同じスタンプの名称が使われています。次の動作を指示して下さい。(上書き作成は、'+++'を入力。別のスタンプの名前を入力。終了は[ESC]キー入力。**"
DEFAULT Stamp_name Change_name
EXIT_IF (Change_name =
'+++')
{スタンプの上書きなら}
LET Stamp_name
Change_name
{新しいスタンプ名}
END_LOOP
LET Stampdata_line
Gl_fruit
{名称の合致位置 0=合致しない}
Ma_stamp_list_frame_off
{リストデータの削除}
OPEN_INFILE 1
File_name
{既存スタンプファィルのオープン}
END_IF
READ PNT '** スタンプの中心位置を指示して下さい。**' Point_center
OPEN_OUTFILE 2 DEL_OLD
'Gl_fruit_file'
{仮ファィルを上書きでセット}
{ データのコピー}
LET Count
1
{既存ファイルの行カウンターのセット}
LET Stampend
0
{スタンプデータの終わりではない}
LET Sirusi
0
{抜けだし用のデータ}
LOOP
IF (Stock =
1)
{既存スタンプファイルが存在するなら}
READ_FILE 1
Basket
{1行の読み出し}
IF (Basket =
'END-OF-
FILE')
{既存スタンプファイルの読み込み終了}
LET Stock 0
CLOSE_FILE
1
{既存スタンプファイルを閉じる}
ELSE_IF ((POS Basket '-1')
=
1)
{スタンプの最後なら}
LET Stampend
1
{スタンプデータの終わり}
LET Endline
Basket
{記憶}
END_IF
END_IF
IF ((Stampend = 1) OR (Stock =
0))
{既存スタンプファイルが無いか、スタンプデータが無いならなら}
IF (Count = 1)
LET Basket
'"スタンプデータのファイル","内容の編集には充分に、気を付けて下さい。"'
ELSE_IF (Count = 2)
LET Basket
'"メモの行です1。"'
ELSE_IF (Count = 3)
LET Basket
'"メモの行です2。"'
ELSE_IF (Count = 4)
LET Basket
'"今後の為に予約した行です。(いつになるやら)"'
END_IF
END_IF
{ 抜け出しデータの作成}
IF ((Stock = 0) AND (Count >
4))
{ファイルデータが無いなら}
LET Sirusi 1
ELSE_IF ((Stock = 1) AND (Count >=
4))
IF (Stampend =
1)
{スタンプデータの終了なら}
LET Sirusi 1
ELSE_IF ((Count >=
Stampdata_line)
AND (Stampdata_line <> 0))
LET Sirusi 1
END_IF
END_IF
EXIT_IF (Sirusi = 1)
IF ((Basket <> '') OR ((Basket =
'') AND (Stampend
= 1)))
WRITE_FILE 2 Basket
END_IF
LET Count (Count +
1)
{次}
END_LOOP
{ 要素データの書き込み}
WRITE_FILE 2 ('0,' +
Stamp_name)
{名称行の書き込み}
INQ_SELECTED_ELEM ALL
LOOP
LET Sirusi (INQ
14)
{要素の数}
Ma_stamp_write_data_element
Point_center Angle_unit {要素データの作成}
IF (Gl_fruit =
'')
{サポート外要素なら}
ELSE_IF (Gl_fruit =
'Gl_fruit_ltab')
{TEXTとBSPLINEなら}
LET Number_row
1
{呼び出しカウントのセット}
LOOP
LET Basket
(READ_LTAB
'Gl_fruit_ltab' Number_row 1)
EXIT_IF (Basket =
'')
{無くなれば}
WRITE_FILE 2
('1,' +
Basket)
LET Number_row
(Number_row
+ 1)
END_LOOP
CREATE_LTAB
'Gl_fruit_ltab'
{戻りテーブルの最小化}
ELSE
{その他の変換可能要素なら}
WRITE_FILE 2 ('1,' +
Gl_fruit)
END_IF
EXIT_IF (Sirusi = 1)
INQ_NEXT_ELEM
{次の要素}
END_LOOP
{ 残りのデータコピー}
IF (Stock =
1)
{移すデータが有るなら}
IF (Stampdata_line <>
0)
{上書きなら}
{ 次のデータに移動}
LOOP
READ_FILE 1
Basket
{1行の読み出し}
EXIT_IF ((POS Basket '0,')
=
1)
{次のデータ}
IF ((POS Basket
'-1')
= 1)
LET
Stampend
1
{終了記号有り 0=まだ}
LET
Endline
Basket
{記憶}
END_IF
EXIT_IF ((POS Basket '-1') =
1)
{スタンプの最後なら}
EXIT_IF (Basket =
'END-OF-
FILE')
{終了なら}
END_LOOP
END_IF
IF (Stampend =
1)
{終了記号行なら}
LET Basket
Endline
{写しを書き込み}
END_IF
{ 残りを移す}
LOOP
EXIT_IF (Basket =
'END-OF-
FILE')
{終了なら}
IF ((Basket <> '') OR
((Basket
= '') AND (Stampend = 1)))
WRITE_FILE 2
Basket
{写しを書き込み}
IF ((POS Basket
'-1')
= 1)
LET
Stampend
1
{終了記号有り 0=まだ}
END_IF
END_IF
READ_FILE 1
Basket
{1行の読み出し}
END_LOOP
CLOSE_FILE 1
END_IF
IF (Stampend =
0)
{データ終了記号の書き込み}
WRITE_FILE 2 "-1"
END_IF
CLOSE_FILE 2
COPY_FILE 'Gl_fruit_file' DEL_OLD
File_name
{上書きの書き戻し}
PURGE_FILE 'Gl_fruit_file'
CONFIRM
{仮ファイルを削除}
CURRENT_DIRECTORY Env_dir {カレントパスの復元}
END_DEFINE
気をつけて作りました、使用してのトラブルに責任は持てませんが、
自由にお使い下さい。(伏 見 表)