Upload
wataru-shiraishi
View
73
Download
0
Embed Size (px)
Citation preview
APA スペシャル Web セミナー【プログラミング編】『 VectorScript 実践セミナー』第3回【ファイル入出力、レコード】2015 年 5 月 13 日( 株 ) 治郎吉商店白石 亘
VectorScript とは?VectorScript は、 Vectorworks のソフトウェアパッケージに含まれるスクリプト言語です。軽量なプログラミング言語である VectorScript の構文は Pascal と似ており、 Pascal のプログラム要素を多く取り入れています。VectorScript は実際、 Pascal 言語の「スーパーセット」として、 Pascal の基本機能に Vectorworks CAD エンジンの機能にアクセスするための各種 API (アプリケーションプログラミングインターフェース)を加えて拡張したものです。
VectorScript Language Guide から抜粋
資料• VectorScript Language Guide• http://www.aanda.co.jp/develop/VS/index
.html• VectorScript Function Reference• VectorWorks フォルダに入っている
• サイト• http://developer.vectorworks.net/index.p
hp/VectorScript/jaこれだけです。
資料を開いてみよう• VectorScript Language Guide• http://www.aanda.co.jp/develop/VS/ind
ex.html• VectorScript Function Reference• サイト• VectorWorks フォルダにも入っている
全3回の内容• 第1回
• プログラムの基本形• 変数とデータ型• 論理構造• 図形を作成
• 第2回• 図形情報とハンドル• ハンドル移動ルーチン• 無限ループ
• 第3回• ファイル入出力• レコード
目標サイト:http://developer.vectorworks.net/index.php/Main_Page
多くのコマンドがあります、同じ機能を実現するのにいくつかの方法があります。そんな中で、私らのコードは結構パターン化されています。よく使うコードパターンがあって、それらを組み合わせて使うことで多くの機能を実現することができます。基本となるコードパターンを覚えて、あとは応用で使えるコマンドを増やしていきます。このあたりのコツを紹介したいです。
内容• CAD のデータ構造• ハンドル変数• 論理構造( while による無限ループ)• 論理構造( procedure と function )• 図形情報を取得• 図形情報を変更• デバッグ
CAD のデータ構造• まずレイヤがあって• その上に図形がある• どちらも前後関係がある
CAD のデータ構造• まずレイヤがあって• その上に図形がある• どちらも前後関係がある
ハンドル型の変数• プログラムの中で参照したいレイヤや図形はハンドルを取得して「ハンドル型の変数」に代入します。• ハンドルを取得する方法• レイヤのハンドル• 図形のハンドル• そのほか、シンボル定義のハンドルなどなど
ハンドル型の変数• レイヤのハンドルを取得する方法• 変数宣言• layerHandle, layerH, layH, h :
handle;• layH := FLayer;• ActLayer, LLayer,
• layH := CreateLayer( 'template1', 1 );• template という名前でレイヤを作成
ハンドルを取得する方法• 変数宣言• layH: handle;• objH, h : Handle;
• ハンドルを取得• objH := FActLayer; { アクティブレイヤの最初の図形 }
• h := LSActLayer; { アクティブレイヤで選択されている最後の図形• layH:= FLayer; { 最初のレイヤ }
ハンドル移動ルーチン• while 文でオブジェクトチェーンをたぐって目的の図形を見つける• h := FActLayer; { アクティブレイヤの最初の図形 }
• while h <> nil do begin• { ここで何かする }• h := NextObj( h );
• end;
ファイル入出力
• テキストファイルに書き出す• テキストファイルから読み込む
テキストファイルに出力• PutFile(' ファイル名: ', fileName,
fileName); { 保存ダイアログ }• ReWrite( fileName ); • WriteLn( tempStr ); { ファイルに1行書き出す }
• Close( fileName ); { ファイルを閉じる }
シンボルの数を数える• objType:= GetType( objH );• if ( objType = 15 ) then begin• symName:=
GetSymName( objH );• if ( symName = kSYMBOL01 )
then begin• gCnt01:= gCnt01 + 1;• end; {if }• ….
テキストファイルから読み込む• GetFile(fileName); { オープンダイアログ }• ReadLn(x1,y1,x2,y2); { ファイルから1行読み込む }• Close( fileName ); { ファイルを閉じる }
レコードを付ける• レコードとは?• 図形にデータを保持させることができる• プラグインオブジェクトで使う
• 図形を選択して、データパレットを開く
レコードを付ける
• ファイルから読み込んで作成した図形にレコードを付けてみよう
レコードを付ける• NewField( kREC_NAME, kFIELD_NAME, '',
4, 0 );• { レコードを作る }
• SetRecord( h, kREC_NAME ); • { レコードをセットする }
• SetRField( h, kREC_NAME, kFIELD_NAME, '1'); • { フラグフィールドに 1 をセットする }
レコードの値を取得
• レコードの値を取得しよう• flagValue:= EvalStr(h, data_type.' フラグ ');
レコードの値を取得• プログラムで自動的に作成した図形に、レコードを付けておいて識別できるようにしておこう• プログラムを繰り返し実行する場合、前の実行で作成した図形は自動的に削除したい
• これ以降は復習
コマンドを作ってみる• リソースパレット• 新規スクリプト• パレットを追加• コマンドを追加• スクリプトエディタ
プログラムの基本形• procedure( myPrg ) で始まる• const で定数を宣言• var で変数を宣言• begin と end で囲む• 行末にセミコロン• run( myPrg ); で終わる run は全体で1カ所だけ
変数名と予約語• 宣言に必要な「変数名」はプログラマが決めます。「データ型」は VectorScript の中で決まっています。• 変数名を決めることをネーミングといいます。• VectorScript によってすでに意味が決まっている「 VectorScript キーワード」というのがあります。予約語と呼ばれます。予約語は変数名に使うことはできません。• たとえば begin とか、 integer 、 handle 、 unit 、などなど• VectorScript Language Guide p10 - p11 参照
宣言文• const• コンストと読む。 constant の略。• 定数変数を宣言するブロックの始まりを意味する。• プログラムの中で変更すると構文エラーになる。
• var• バーと読む。 variable の略。• 変数を宣言するブロックの始まりを意味する。
論理構造• 条件分岐• if - then - else - end• イフ、ゼン、エルス、エンド• if 以下の条件文が正しければ続く実行文を実行、正しくなければ
else に続く実行文を実行• AlrtDialog :ダイアログを表示する
論理構造• 繰り返し• while - do - begin - end• 条件文が真( true )の間はループ内のコードを実行、条件文が偽( false )になったらループを終了• 無限ループです• 終了条件が成立しないと止まりません
プログラムの構造• procedure• 手続き、プロシージャ• 戻り値がない• procedure myProc ;
• function• 関数、ファンクション• 戻り値がある• function myFunc : longint ;
終わりに• ご清聴ありがとうございました。• VectorScript プログラミング入門• 治郎吉商店制作のサンプルコードと解説集• オンラインショップ「 JiroShop 」にて発売中
• 個別のトレーニング、ご相談も承っております。