アーカイブ

‘VectorScript’ カテゴリーのアーカイブ

【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

【VectorScript】 図形の面積値をスクリプトで記入する

このスクリプトは、アクティブレイヤの全図形(※1)ひとつひとつのほぼ中心(※2)に面積値(単位は㎡、小数点以下第2位まで)を書き込むためのスクリプトです。(2018/07/09 YouTubeで動作を示した動画を公開)

(※1)スクリプトは対象レイヤ上の全図形を対象としていますが、スクリプト中にコメントした2行を削除すれば、予め手作業で選択した図形を対象にできます。

(※2)面積値を記入する座標としては、図形の境界ボックスの中心(下図)を拾っているので、L形など入り隅があるような図形では面積値が図形の外にこぼれます。その場合は、必要に応じて手動で修正することになります。

2018-07-07_131932.png

また、このスクリプトでは、面積値をいったん一時的なレイヤに書き込んで、後から元のレイヤ(面積値を記入した図形があるレイヤ)に移動しています。これは一種の保険としてやっているだけで、「選択図形に面積値を書き込む動き」として見れば不要です。

*

以下がスクリプトです(私は VectorScript の専門家ではなく、「必要な結果が得られれば十分」というポリシーです)。行頭をインデントしていないので、多少読みづらいですがご容赦ください。実行に際してはコメント行は不要なので削除しても大丈夫です。またレイヤ名、クラス名、作業レイヤの削除の有無などは、必要に応じてアレンジしてください。それから変数名をreiyaのように頭が悪そうな名前にしていますが、本物の英語である組み込みコマンドと見間違えないようにするためです。動作確認は、Windows版 Vectorworks 2017/2018 で行いました。(某掲示板で、Mac版2018で動いたという報告を頂戴しました。)

なお、VectorScriptの基本的な作り方や実行方法は下記をご覧ください。

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

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

*

VectorScriptユーザは分かると思いますが、{}内は注記なので実際の動作には必要ありません。

Procedure WriteArea;
VAR
reiya:STRING;

{以下が面積値を記入するためのサブルーチン}
FUNCTION DoIt(h :HANDLE) :BOOLEAN;
VAR
x1,x2,y1,y2:REAL;
BEGIN
{面積記入用の一時的レイヤの設定}
Layer(‘面積記入用一時’);
{面積値を書き込む位置(座標)の設定。上の図で示したように境界ボックスの中央に書き込む。}
GetBBox(h, x1,y1,x2, y2);
MoveTo( (x1+x2)/2, (y1+y2)/2 );
{次は面積値の書き込み。小数点以下の桁数はHAreaの前の数値で設定。また平方ミリを1000^2=1000000で割って平方メートルに換算している。}
CreateText(Num2Str(2,HArea(h)/1000000));
{単位を付ける場合は、上の1行を下記のように変更すればOK。
CreateText(Concat(Num2Str(2,HArea(h)/1000000),’㎡’));
CreateText(Concat(Num2Str(2,HArea(h)/1000000*0.3025),’坪’));
㎡、坪を併記する場合は、Concatで繋げるか、㎡を書かせた後、MoveToで位置をずらしてt坪を書かせるような手順にすればよい。}

{レイヤを元に戻す}
Layer(reiya);
END;
{サブルーチンはここまで}

BEGIN
{作業状況の待避}
PushAttrs;

{アクティブレイヤの名称を取得}
reiya:=GetLName(ActLayer);

{記入用テキストの設定。設定はご随意に。}
TextSize(72);
TextJust(2);
TextVerticalAlign(1);

{作業用にクラス、レイヤの設定}
SetClassOptions(5);
SetLayerOptions(4);

{念のため、あらためてアクティブレイヤを作業用に設定する}
Layer(reiya);

{面積を記入するためのクラスを設定する(存在しない場合は自動追加)}
NameClass(‘面積値(㎡)’);

{事前に選択した図形に適用する場合は下の2行を削除}
DSelectAll;
SelectAll;

{面積記入用サブルーチンに飛ばす}
ForEachObjectInLayer(DoIt, 2, 0, 0);

{記入した面積値が選択状態になっているので、解除する}
DSelectAll;

{面積値を一時的レイヤから元のアクティブレイヤに移動する(必須ではない)。}
Layer(‘面積記入用一時’);
DSelectAll;
SelectAll;
DoMenuTextByName(‘Cut’,0);

Layer(reiya);
DSelectAll;
DoMenuTextByName(‘Paste In Place’,0);
DSelectAll;
{一時的レイヤを削除しない場合は下の行を削除}
DelObject(GetLayerByName(‘面積記入用一時’));

{ここまでが面積値移動のためのスクリプト}

{作業状況の復帰}
PopAttrs;

END;
Run(WriteArea);

*

おまけ

上の動画中にある「削除」や「選択」はいずれも一行スクリプトなので、使う場合は改行を入れずに入力してください。

  • 選択
    DSelectAll; SelectObj((INSYMBOL & INVIEWPORT & (T=TEXT) & (C=’面積値(㎡)’)));
  • 削除(選択するスクリプトの最後に、「 DeleteObjs; 」を付けただけ)
    DSelectAll; SelectObj((INSYMBOL & INVIEWPORT & (T=TEXT) & (C=’面積値(㎡)’)));
    DeleteObjs;

*

<経緯>

ある掲示板に面白そうなネタがありました。以前作ったスクリプト(※)をちょっと変更すればできそうだったので掲示板にちょっとした書き込みをしましたが、せっかくなので自分なりに完成させてみました。(シュウさん、ありがとう!)

(※)数年前、ある伝統的建造物群保存地区の報告書のために地図を作成しました。この地図は3つの時代の地籍の変化を比較するためのもので、昔の歪んだ地図を現況の地図に合致させながらリライトし、さらに地籍ひとつひとつに地番を書き込む作業が必要でした。数千を超える地積ひとつひとつに手作業で地番を打つとヒューマンエラーが発生しやすいのでVectorScriptで自動処理することにしたのでした。

【2018年10月追記】この報告書、インターネットで公開されていました。
http://www.city.fukuyama.hiroshima.jp/soshiki/bunka/129485.html

なお、元のスクリプトでは、ForEachObjectInLayer の部分にForEachObjectInListを使っていましたが、件の談話室でForEachObjectInLayer を使うと良いという指摘があったので、上のスクリプトではForEachObjectInLayer を使ってみています。ForEachObjectInListでも同じ結果を得られますが、変数が1つ増えます。

 

<補足>

上に記した報告書用の地籍図データは、下図のような感じです。これは明治初期の状態。元の手書き地図は歪みが甚だしく(というより「歪み」というほど生やさしいものではなかったので)、現状と突き合わせた作図は骨が折れました。今後、機会があればそんなことも含めて記事にしたいと思います。(報告書には地図作成における諸問題についてすでに記されていますが、もうちょっとスキル面からの記事を書いてみようかな、ということ。)

2018-07-07_103941.png

地番等は、Vectorworksのデータベース機能を利用し、Vectorworksの多角形で表現した地籍ひとつひとつにいくつかのフィールドを割り当てています。スクリプトは、それらの項目から地番フィールドを読み出して図形中央に打つためのものでした。不整形な地籍の場合は、文字がこぼれるので、ひとつひとつ手作業で位置を移動しました。大変ではあったけれど、社会的に大きな問題となっていた地域だったので、結果としては有意義な仕事でした。

この後、あらたな必要でデータをGISに落とし込んだりしましたが、それもあまり手間がかからずに可能でした。この手の要求を容易にかなえてくれる点がVectorworksの強みだと思います。Vectorworksの宣伝や紹介において3Dやレンダリングの能力が強調される場合が多いですが、他のBIMにおいても似たり寄ったりです。Vectorworksのこういう部分こそが強みであると私は思うし、私はこんな使い方をするのが好きです。

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