アーカイブ

Archive for the ‘VectorScript’ Category

【VectorScript】初心者さんが特に気をつけると良いこと

うまく動かない場合、以下のようなところを見直すとよいと思います。

  • 括弧、カンマ、セミコロンの数と位置が正しいか?
  • 変数の過不足や型が正しいか?

 

 

カテゴリー:VectorScript

【VectorScript】作業ウィンドウの背景を白黒切り替える1行スクリプト

画面の背景色が黒のCADで作られたデータをDXFなどの形でもらってVectorworksで開いたとき、Vectorworks標準の白い背景では、たいへんに見づらい配色になっていることがあります。そのようなときは背景を黒に切り替えればよいのですが、いったん黒に設定すると、次に起動したときも背景が黒のままになります。私は日常的にはほとんどやらない操作ですが、先日、たまたま頻繁にやらなければならない仕事が湧いてきたので、一行スクリプトを作ってみました。

SetPref(16,NOT(GetPref(16)));

【解説】

背景色の設定は「16」です。

デフォルト設定でインストールすると “C:/Program 0Files/VW20xx/VWHelp/Script Reference”(Windowsの場合、Macでも似たような場所にあるはず)に入っている ScriptFunctionReference.html を開いて当該機能を探すと、Appendix F – Preference Selectors の中に見つかります。

“SetPref(16,TRUE);”で黒い背景、”SetPref(16,FALSE);”で白い背景になるから、当初はそれぞれを別々に作ってパレットに2つ並べていましたが、美しくないので1つにまとめることにしました。

そのためには、スクリプト内で白黒切り替える必要があります。具体的には、スクリプト実行前後でTRUE / FALSEが逆になるように “TRUE”あるいは” FALSE” の部分をところを書き換えればOKです。

まず現在の状態を”GetPref(16)”で取得し、それと反対の状態にするために頭に”NOT”を付けた “NOT(GetPref(16))”を”TRUE/FALSE”の代わりに書けばOKだということになります。

なお、一行スクリプトの動かし方は、『VECTORWORKS ベストテクニック 100』でご覧ください。Vectorworksベストテクニック100表紙

 

 

 

 

 

カテゴリー:VectorScript

【VectorScript】 私のプログラミング言語体験

VectorScriptについていくつか書いたついでに、私のプログラミング言語体験を思い出しながら書いてみます。誰の役にも立たない内容かも知れませんが、私が現在VectorScriptを使う上で、あるいは、いろいろなソフトをトラブルを最小にしながら使う上で、以下の経験がとても役に立っています。プログラミング言語学習としていきなりVectorScriptを始めるのはハードルが高い気がする場合は、現時点では手始めに Squeak に触ってみるといいと思います。

*

以下、体験した順に思い出しながら記すので、時系列は多少あっちこっちすると思います。

APL

大学1年のときに、ある研究室でデータ入力の手伝いをしたことがありますが、このときのプログラムがAPLで書かれていました。IBMのAPL専用マシンでAPL独特の記号がキーボードに並んでいました。自分自身では書きませんでしたが、プログラムの中身をちょこちょこ見たりしていました。私がAPLとApple IIの違いすら知らなかった頃のお話です。

プログラミング電卓のBASIC

友人がSHARPの関数&プログラミング電卓を持っていました。これには階乗計算が標準搭載されていなかったので、説明書と首っ引きで内蔵BASICで作ってみました。たぶんこれが最初のプログラミング体験です。ディスプレイに一行しか表示できなかったので、プログラムを書くのは大変で、実行速度もとんでもなく遅かったことが、マイコンが欲しいという気持ちに繋がりました。

F-BASIC

新宿の西口界隈をぶらついていたら、ある店の前で高校の同期に呼び止められました。その店はCSK、当時はマイコンの小売りもやっていました。友人はそこでアルバイトしていたそうでMZ-2000の中古を買わないかと持ちかけられ、すっかり買う気になっていたのに元所有者の都合でドタキャン。そして、その勢いのまま発売されたばかりのFM-7をローンで買いました。当時は電源を入れるとROM-BASICが立ち上がりプロンプトがピコピコするタイプのものが普通で、FM-7に搭載されていたのはF-BASICです。当時主流であったNECのPC-8001や8801のN-BASICとはちょこちょこ違いがありましたが、便利になる側に働く相違でした。当時はプログラムが掲載された月刊誌が複数発売されていたので、それらを買って、書いてある通りに打ち込みながら学習しましたが、大したものは作りませんでした。雑誌に掲載されるのはN-BASIC用のプログラムが大半だったので、それらをF-BASICに移すのは良い学習になりました。月刊誌Oh!FMの発刊は、ちょうどそのころだったと思います。

Fortran

FM-7はモトローラの6809という8ビットCPUを積んでいましたが、当時の8ビットCPUはZ-80が主流でした。FM-7には別売でZ-80カードが存在し、それを入れるとCP/M-80というOSを動かせました。CP/M-80はOSなので、その上でいろいろな言語を動かせました。そのひとつがFortranです。当時のパソコン雑誌にFortranを使った3Dパッケージが掲載されていて、それを使ってパース作成プログラム(今で言う3D-CAD)を作りたくてFortranをかじりました。

FortranはBASICのベースであったと思うので、BASICの知識をベースにわりとすんなり入れましたが、入出力の面倒くささには辟易しました。パース作成プログラムもデータの格納方法(データベース構築)で行き詰まって挫折しました。でも汎用性を持たせることの重要さと大変さ、インタフェース設計の重要性を痛いほど理解できたのが良かったです。

BASIC-09

FM-7で動いたOS-9上で動く構造化BASICです。「OS-9はMacintoshだ、おまえは間違えている」と主張する変なアップルユーザがいて困ったことがありますが、そっちはMac OS 9、由緒正しいOS-9と別物です(OS-9はMac OS 9よりずっと前に登場したものです)。

BASIC-09は強いて言えば、通常のBASICとPascalの間にあるような言語でした。構造化されているからF-Basicで書くものより美しく分かりやすいプログラムを書けました。

OS-9がマルチタスクだったので、640×480の画面を田の字に4分割して、それぞれで異なるリサジュー図形を書かせたりして遊んでいました。8ビットCPUでのマルチタスクだから、田の字に分割した画面すべてに線画のリサジュー図形を書くのに丸1日かかったりしていました。

LISP, Prolog

これらはCP/M-80、OS-9、MS-DOSなどでやったと思います。概念的な側面に対しては興味を引かれていましたが、Prologでとても小規模な、いまで言えばSiriとの会話っぽいプログラムを作って終わりました。

LISPはAutoCADに搭載されたAutoLISPへの興味が大きかったのですが、AutoLISP自体を使う機会がありませんでした。

LOGO

亀さんを動かして遊んだ程度です。私には、何の役に立つのか全く分かりませんでした。

Turbo Pascal

記憶が定かではありませんが、PC-9801でやっていたと思います。Pascalの特徴は構造化されていて、BASICみたいなスパゲッティにならない(というよりスパゲッティを作りにくい)点が大きな特色だと思います。しかし、私は構造化できるBASIC-09を知っていたので、Pascalは非常に面倒くさい言語だという印象しかもちませんでした。私のPascal嫌いはここに始まります。その後、Turbo Pascal以外のPascalに触ったこともありますが、入り口を入ってすぐに逃走しました。ところが今もっとも使う言語はPascalライクなVectorScriptであるのは、何という皮肉なのでしょうか、、。

dBASE

初めて触ったのはCP/M-80版です。本格的に使ったのはPC-9801のMS-DOS版でした。これを言語と言ってよいのがどうか分かりませんが、dBASEは素のままでは大変に素っ気ないデータベースプログラムで、搭載されているdBASE言語で実用的なものを作る必要がありました。ほとんど個人的な趣味としてやっていましたが、『図説年表 西洋建築の様式の年表を複数人で執筆するときに、データ入力と整理のためプログラムを書きました。他のメンバーはデータベースソフトに触るのが初めてだったので、インタフェースを親切に作ったいたら200行を超えました。不親切なインタフェースだったら半分以下の行数で済んだと思います。

dBASE言語は目的がはっきりした言語だったので、使いやすいし、実用性の高いプログラムが容易に書けました。私が最ものめりこんだ言語です。一方で、プログラミング言語でアプリケーションを作ることのハードルの高さを思い知らせてくれたのもdBASE言語でした。データベース用に特化されたdBASE言語と、汎用の言語では必要なリソースもエネルギーも桁違いだということ、dBASEのようなまともなアプリケーションを作るためにはその筋のプロになる必要があることをdBASE言語が気付かせてくれたのです。この経験から私はプログラミングをやめ、アプリケーションユーザに徹することにしました。

MILC

MS-DOS時代に愛用していたMIFESに内蔵されていた言語です。Cベースだったので、MILCはCへの入り口となってくれました。たとえば、当時最も優れたファイラーであったFDを呼び出すとか、テキストをメール送信するために一定文字数ごとに改行を入れるとか、あるいはそれを復元するとか、かゆいところに手を届かせるための数行から数十行程度のマクロをあれこれ作っていて、それらをNifty-ServeのMIFESのフォーラムにアップしていたら、月刊誌 Oh!PC と、なんとかムックに掲載されました。原稿料は一方が現金5000円、もう一方が図書券5000円分でした。当時は貧乏学生だったので大いに助かりました。

自分にとって「実用的な」プログラムはMILCで作ったものが多かったです。

Turbo-C

Cについてはポインタというものがなかなか理解できずに手間取りました。どんなものを作っていたかは忘れましたが、数十行程度のものは書けるようになっていました。関数自体に返値があることを理解できたのが自分にとっては画期的で、これがVectorScriptのハンドル理解に役立ちました。Cはその後はMS-Cなどにちょこちょこっと触ったくらいで、そのうちにC++がでてきましたが、プログラミングをやめてアプリケーションユーザに徹すると決めた後だったのでC++の経験はありません。

FORTH

スタック指向とか逆ポーランド記法という言葉に興味を引かれてかじってみましたが、使う目的が見つからなかったので、学習本を少し勉強しただけでやめました。FORTHと言えば、日本語Mindもかじって関西弁で書いてみたりしていました。

QBASIC

構造化BASICで、BASIC-09に似ていてとっつきやすかったこともあり、趣味的に数百行くらいの図形を扱うプログラムをいくつか書いて遊んだ記憶がありますが、何か役に立つものを書いた記憶はありません。

N-BASIC

NECのBASICです。イスタンブールの、とある歴史的建造物の調査に参加したとき、極地研さんから光波測距機を借りられることになりました。そこで当時はまだ無名だった友人=ロボット専門家の山海君に頼んで一定のピッチで光波測距機を動かすロボットを作ってもらって、それの制御と計測値取得のためにN-BASICでプログラムを書きました。このとき、なぜN-BASICを使ったかというと、調査に持っていくラップトップPCがNEC製だったからです。測距機とPCはRS-232Cで繋げました。

調査後は、距離と角度から空間座標を算出し、メッシュで表現するプログラムを書きました(記憶が曖昧ですが、たぶんQBASIC利用)。これにはけっこう骨が折れました。今だったらExcelに座標を取りこんで3Dグラフで表現したか、あるいは、VectorScriptで書いたでしょう。いま書きながら思い出しましたが、当時、すでにLotus 1-2-3があったのだから、それでやればよかったかもしれません。

DesignCAD内蔵のBASIC??

1990年代前半ごろ(?)に存在していたDesignCADという3D-CADに、カスタマイズのためのBASICが内蔵されていました。当時のPCのパフォーマンスでは3Dはまともに動かなかったので、エッシャー風の2D図形を書かせて、それを立体化して遊んでいました。

Squeak, Scratch

Squeakは、長い間、SmallTalkというものに興味があったので使ってみましたが、プログラムを書くのをやめて久しかったので雰囲気を味わって終わりです。Scratchは子供にプログラミング言語を体験させるために使ってみただけです。プログラミング入門には適していると思います。

SED

プログラミング言語と言えるのかどうか知りませんが、MS-DOS時代にはテキスト処理によく使っていました。その後、同様のことができるプログラミング言語としてAWKが広まったようですが、必要なかったので使っていません。

MS-DOSバッチファイル

これもプログラミング言語とは言いきれませんが、かゆいところに手を届かせるために、今でもよく使います。ほとんどが大量のファイルの一括処理なので、エディタではなくExcelで作ることが多いです。

VectorScript

Pascalベースだから読んだときに内容を掴みやすい点は良いのですが、大嫌いなPascalベースだから敬遠していました。しかし20年ほど前、授業で教科書に採用した本の記述通りに進まない箇所があって、その原因を探っているうちに VectorScript に触らざるを得ない状況に陥りました。このときはバグか仕様か分かりませんが、いずれにしてもプログラミングミスや誤植などのヒューマンエラーではなく、Vectorworks側に原因がありました。これ以来、ちょこちょことVectorScriptを使うようになりました。私にとっては、MIFESでMILCを使うのと同様、かゆいところに手を届かせるためなので、大きくても数十行程度です。一度、Vectorworksにない機能を補完する必要に迫られて数百行ものに挑戦したことがありました。8割方完成したのですが、時間不足のため断念しました。手作業ではヒューマンエラーが発生しやすかったので、それを回避するためには是非とも完成させたかったです。その後、同じ処理が必要ないので当該スクリプトは廃棄しました。ただし、VectorScript学習として得るものは大きかったです。

*

他にもかじった言語があったかもしれませんが、思い出せません。

ほとんどが遊びの範疇でしたが、プログラミング言語学習を通して自分の瞬間的思考の解析や何かの手順を人に説明することもうまくなりました。また、いろいろなソフトが内部でどのような処理を行っているかの見当が付くようになったので、より効率的な手順を見つけたり、バグを回避する手法を見つけたりできるようになっています。私にとっては、そのことがプログラミング言語そのものを修得することより飛躍的に大きな意味があったと思います。近いうちに小学校教育にプログラミングが導入されるようですが、上記のことからは歓迎すべきことでしょう。しかし、まともにプログラミングを教えられる指導者を育てることが至難の業だと思います。英語も同様で、子供が和英辞典の丸写しの英単語羅列文(すなわち英語ではない)を教わってきたときに愕然としましたが、プログラミング学習がそのようにならないことを祈るばかりです。

ところで、プログラミング言語で遊んでいたころ、私は全く畑違いの西洋建築史の研究者でした。今はCADとか情報リテラシーの専門家として扱われることが多いです。

カテゴリー:VectorScript, 一般

【VectorScript】 便利な一行スクリプト

図形選択マクロでVectorScriptを作ると、例えば次のようなスクリプトができあがります。

DSelectAll; SelectObj((INSYMBOL & INVIEWPORT & (L=’レイヤ-1′) & (C=’一般’)));

スクリプトが一行に収まるので、慣習的に一行スクリプト(一行マクロ)と呼ばれています。

*

VectorScript は Pascal というプログラミング言語をベースとしていますが、このPascalという言語の目的のひとつがプログラミング言語学習用であることから、作法に厳しい言語であることが VectorScript を書くときの障害となりやすいと思います。

ところが、一行スクリプトは Pascalを知らなくても、VectorScriptのコマンドを書き連ねればできてしまいます。

*

2018-07-07_150440.png

幸いなことに、図形選択マクロが作るスクリプトだけでなく、環境設定のオンオフやメニューの中のコマンドなども一行に収まるものがたくさんあります。それらを自作パレットに入れておくと操作が大幅に効率アップします。私は頻繁に使う操作を複数のパレットに整理して入れて、そのパレットをテンプレートに組み込み、作図開始時はそのテンプレートから始めるようにしています。(右図はパレットのひとつ)

Vectorworksベストテクニック100表紙これらの一行スクリプトの使い方や作成方法は、『VECTORWORKS ベストテクニック 100』でご覧ください。

 

*

一行スクリプトの利点は、VectorScriptを言語として学習しなくてもよい点です。外国語学習にたとえれば、文法を勉強せず、いくつかの単語をかじってカタコトで通じる範囲のことだけで何とかするのと同様の状態なので、言語学習を目的とした場合は望ましいことではありません。しかし、「ほんのちょっとしたことを便利にしたいだけ」であれば、カタコト英語のごとく、一行スクリプトがかなり助けてくれます。

 

カテゴリー:VectorScript

【VectorScript】 VectorScriptのおまじない、PushAttrs、PopAttrs

UNIXのシェルにpushd、popdという、現在のディレクトリを一時的に保存するコマンドがあります。pushd、popdのおかげで作業中のディレクトリ移動のときのキー入力の手間が大幅に減ります。MS-DOS時代にはKI-Shellという素晴らしいフリーのシェルがあって、大変お世話になりました。

で、本題ですが、VectorworksにはPushAttrs、PopAttrs、というpushd、popdというよく似たコマンドがあります。

Attr=attribute=属性ですが、同じく日本語では「属性」と訳せるproperty(プロパティ)とは異なります。どういう属性であるか、VectorScript のリファレンス( ヘルプフォルダに入っている ScriptFunctionReference.html )から引用しますと;

Stores current attribute, tool, text, and constraint settings for later retrieval as the document default settings. Document settings can be modified as needed after using this call, and the stored settings can be restored with a call to PopAttrs. Calling this function more than once (nested) is allowed. The settings will be placed on a stack, and will be retrieved by calls to PopAttrs in the correct sequence.

ということで、この場合の属性とは、スクリプト実行前のツール、テキスト、拘束の設定のことで、それをpushしたりpopしたりするのがPushAttrs、PopAttrs で、VectorScriptの中でペンの色、フォントサイズ、線の太さなどを一定の設定に変える必要があるが、スクリプト実行後には元に戻したいという場合に役立ちます。

スクリプト実行前後で上記のような属性を維持したい場合は、下記のようにします。

  • BEGINのすぐ次の行に、PushAttrs; を記入
  • END;のすぐ前の行に、 PopAttrs;  を記入

つまり、スクリプトを下記のようにします。下記の「あれこれあれこれ」と書いてある部分にVectorScriptで行いたい処理を書きます。

PROCEDURE Pokopen;
BEGIN
PushAttrs;
あれこれあれこれ
PopAttrs;
END;
RUN(Pokopen);

で、これは一種のおまじないとして、BEGIN、END;とセットで覚えておくといいと思います。

*

VectorScriptの手っ取り早い入門は下記をどうぞ。(VectorScriptだけの本ではありませんが、Vectorworks作業の効率化のひとつの方法としてVectorScriptについても記されています。)

Vectorworksベストテクニック100表紙『VECTORWORKS ベストテクニック 100』

今までのVECTORWORKS解説書にはなかった、より便利に速く図面を描くためのVectorworksの使い方を100コ紹介しています。

カテゴリー:VectorScript
%d人のブロガーが「いいね」をつけました。