31
APA ススススス Web スススス ススススススススス 【】 VectorScript ススススススス ススススススス スススス 2015 ス 5 ス 13 ス ( ス ) ススススス スス ス

APA01 2015513 1

Embed Size (px)

Citation preview

Page 1: APA01 2015513 1

APA スペシャル Web セミナー【プログラミング編】『 VectorScript 実践セミナー』第3回【ファイル入出力、レコード】2015 年 5 月 13 日( 株 ) 治郎吉商店白石 亘

Page 2: APA01 2015513 1

VectorScript とは?VectorScript は、 Vectorworks のソフトウェアパッケージに含まれるスクリプト言語です。軽量なプログラミング言語である VectorScript の構文は Pascal と似ており、 Pascal のプログラム要素を多く取り入れています。VectorScript は実際、 Pascal 言語の「スーパーセット」として、 Pascal の基本機能に Vectorworks CAD エンジンの機能にアクセスするための各種 API (アプリケーションプログラミングインターフェース)を加えて拡張したものです。

VectorScript Language Guide から抜粋

Page 3: APA01 2015513 1

資料• 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これだけです。

Page 4: APA01 2015513 1

資料を開いてみよう• VectorScript Language Guide• http://www.aanda.co.jp/develop/VS/ind

ex.html• VectorScript Function Reference• サイト• VectorWorks フォルダにも入っている

Page 5: APA01 2015513 1

全3回の内容• 第1回

• プログラムの基本形• 変数とデータ型• 論理構造• 図形を作成

• 第2回• 図形情報とハンドル• ハンドル移動ルーチン• 無限ループ

• 第3回• ファイル入出力• レコード

Page 6: APA01 2015513 1

目標サイト:http://developer.vectorworks.net/index.php/Main_Page

多くのコマンドがあります、同じ機能を実現するのにいくつかの方法があります。そんな中で、私らのコードは結構パターン化されています。よく使うコードパターンがあって、それらを組み合わせて使うことで多くの機能を実現することができます。基本となるコードパターンを覚えて、あとは応用で使えるコマンドを増やしていきます。このあたりのコツを紹介したいです。

Page 7: APA01 2015513 1

内容• CAD のデータ構造• ハンドル変数• 論理構造( while による無限ループ)• 論理構造( procedure と function )• 図形情報を取得• 図形情報を変更• デバッグ

Page 8: APA01 2015513 1

CAD のデータ構造• まずレイヤがあって• その上に図形がある• どちらも前後関係がある

Page 9: APA01 2015513 1

CAD のデータ構造• まずレイヤがあって• その上に図形がある• どちらも前後関係がある

Page 10: APA01 2015513 1

ハンドル型の変数• プログラムの中で参照したいレイヤや図形はハンドルを取得して「ハンドル型の変数」に代入します。• ハンドルを取得する方法• レイヤのハンドル• 図形のハンドル• そのほか、シンボル定義のハンドルなどなど

Page 11: APA01 2015513 1

ハンドル型の変数• レイヤのハンドルを取得する方法• 変数宣言• layerHandle, layerH, layH, h :

handle;• layH := FLayer;• ActLayer, LLayer,

• layH := CreateLayer( 'template1', 1 );• template という名前でレイヤを作成

Page 12: APA01 2015513 1

ハンドルを取得する方法• 変数宣言• layH: handle;• objH, h : Handle;

• ハンドルを取得• objH := FActLayer; { アクティブレイヤの最初の図形 }

• h := LSActLayer; { アクティブレイヤで選択されている最後の図形• layH:= FLayer; { 最初のレイヤ }

Page 13: APA01 2015513 1

ハンドル移動ルーチン• while 文でオブジェクトチェーンをたぐって目的の図形を見つける• h := FActLayer; { アクティブレイヤの最初の図形 }

• while h <> nil do begin• { ここで何かする }• h := NextObj( h );

• end;

Page 14: APA01 2015513 1

ファイル入出力

• テキストファイルに書き出す• テキストファイルから読み込む

Page 15: APA01 2015513 1

テキストファイルに出力• PutFile(' ファイル名: ', fileName,

fileName); { 保存ダイアログ }• ReWrite( fileName ); • WriteLn( tempStr ); { ファイルに1行書き出す }

• Close( fileName ); { ファイルを閉じる }

Page 16: APA01 2015513 1

シンボルの数を数える• objType:= GetType( objH );• if ( objType = 15 ) then begin• symName:=

GetSymName( objH );• if ( symName = kSYMBOL01 )

then begin• gCnt01:= gCnt01 + 1;• end; {if }• ….

Page 17: APA01 2015513 1

テキストファイルから読み込む• GetFile(fileName); { オープンダイアログ }• ReadLn(x1,y1,x2,y2); { ファイルから1行読み込む }• Close( fileName ); { ファイルを閉じる }

Page 18: APA01 2015513 1

レコードを付ける• レコードとは?• 図形にデータを保持させることができる• プラグインオブジェクトで使う

• 図形を選択して、データパレットを開く

Page 19: APA01 2015513 1

レコードを付ける

• ファイルから読み込んで作成した図形にレコードを付けてみよう

Page 20: APA01 2015513 1

レコードを付ける• NewField( kREC_NAME, kFIELD_NAME, '',

4, 0 );• { レコードを作る }

• SetRecord( h, kREC_NAME ); • { レコードをセットする }

• SetRField( h, kREC_NAME, kFIELD_NAME, '1'); • { フラグフィールドに 1 をセットする }

Page 21: APA01 2015513 1

レコードの値を取得

• レコードの値を取得しよう• flagValue:= EvalStr(h, data_type.' フラグ ');

Page 22: APA01 2015513 1

レコードの値を取得• プログラムで自動的に作成した図形に、レコードを付けておいて識別できるようにしておこう• プログラムを繰り返し実行する場合、前の実行で作成した図形は自動的に削除したい

Page 23: APA01 2015513 1

 

• これ以降は復習

Page 24: APA01 2015513 1

コマンドを作ってみる• リソースパレット• 新規スクリプト• パレットを追加• コマンドを追加• スクリプトエディタ

Page 25: APA01 2015513 1

プログラムの基本形• procedure( myPrg ) で始まる• const で定数を宣言• var で変数を宣言• begin と end で囲む• 行末にセミコロン• run( myPrg ); で終わる  run は全体で1カ所だけ

Page 26: APA01 2015513 1

変数名と予約語• 宣言に必要な「変数名」はプログラマが決めます。「データ型」は VectorScript の中で決まっています。• 変数名を決めることをネーミングといいます。• VectorScript によってすでに意味が決まっている「 VectorScript キーワード」というのがあります。予約語と呼ばれます。予約語は変数名に使うことはできません。• たとえば begin とか、 integer 、 handle 、 unit 、などなど• VectorScript Language Guide p10 - p11 参照

Page 27: APA01 2015513 1

宣言文• const• コンストと読む。 constant の略。• 定数変数を宣言するブロックの始まりを意味する。• プログラムの中で変更すると構文エラーになる。

• var• バーと読む。 variable の略。• 変数を宣言するブロックの始まりを意味する。

Page 28: APA01 2015513 1

論理構造• 条件分岐• if - then - else - end• イフ、ゼン、エルス、エンド• if 以下の条件文が正しければ続く実行文を実行、正しくなければ

else に続く実行文を実行• AlrtDialog :ダイアログを表示する

Page 29: APA01 2015513 1

論理構造• 繰り返し• while - do - begin - end• 条件文が真( true )の間はループ内のコードを実行、条件文が偽( false )になったらループを終了• 無限ループです• 終了条件が成立しないと止まりません

Page 30: APA01 2015513 1

プログラムの構造• procedure• 手続き、プロシージャ• 戻り値がない• procedure myProc ;

• function• 関数、ファンクション• 戻り値がある• function myFunc : longint ;

Page 31: APA01 2015513 1

終わりに• ご清聴ありがとうございました。• VectorScript プログラミング入門• 治郎吉商店制作のサンプルコードと解説集• オンラインショップ「 JiroShop 」にて発売中

• 個別のトレーニング、ご相談も承っております。