マリオネット・スクリプト解説講座

第43回「柱状体でスチールラックを描く」

FundamentalsArchitectLandmarkSpotlightDesigner2023

今回は柱状体を作ったモデリング方法を紹介します。プラグインオブジェクトのパラメータと連動させながらスチールラックを作成するプログラムを解説します。(執筆 A&A川崎)

建築物を構成する柱や梁、窓やドア、棚やテーブルを考えると、そのほとんどが直方体の部材の組み合わせで成り立っていることわかります。

Vectorworksでは柱状体を使用して直方体のソリッド部材を作成することができます。スクリプトには柱状体をコントロールするAPIが用意されていますので、複数の直方体部材を同時に生成して大きさや位置関係を調整しながら好きな形状を作っていくことが可能です。

柱状体をマスターすれば構造から建具、インテリアまでどんな形状も作れると言っても過言ではありません。

今回は柱状体を組み合わせてスチールラックを作成する例を解説していきます。

43-1. 手で描く

今回練習のため、まず最初にスチールラックを手作業で作図して、図形成り立ちを確認します。

    1. 横幅60cm、奥行き30cmの棚板を想定して、四角形ツールで長方形を描きます。このとき左下を書類の中心(0,0)にします。
    2. 長方形の4角に直径25mmの円を描きます。
    3. 4つの円を選択した状態でモデルメニューから柱状体…を実行します。奥行き(高さ)は90cmとしておきます。
    4. 最初に描いた長方形を選択して、モデルメニューから柱状体…を実行します。奥行き(厚み)は30mmとしておきます。
    5. 続けて柱状体を選んだ状態で、編集メニューからコピー、ペースト(同位置)x3くらい行います。
    6. 最後にペーストした棚板を1つ選んで、加工メニューから移動>モデルを移動…を実行しz方向に25.4*10とします。
    7. 残りに棚板もz方向に25.4*20、25.4*30とします。最後の一枚を25.4*2とします。

ここまでで、ポール4本と、棚板4枚のスチールラックが出来ました。

43-2. スクリプトで描く

ここからは、手作業での作図手順をプログラムに置き換えて考えます。

リソースブラウザ上でダブルクリックしてスクリプトを選択しスクリプトリソースを作成してください。パレット名、スクリプト名はデフォルトで構いません。

プログラムの名前はsteelrackとしておきましょう。

PROCEDURE steelrack;
BEGIN
END;
Run( steelrack );

次に、長方形の端点の位置に円を4つ描きます。円を描く関数はArcByCenterを使います。

ArcByCenter( x, y, radius, startAngle, sweepAngle );

円を描きますので、startAngle(開始角度)は0.0(度)、sweepAngle(円弧角)は360.0(度)になります。radiusは半径ですので、25.0/2.0になります。
x、yはそれぞれ、(0,0)(600,0)(0,300)(600,300)となります。

PROCEDURE steelrack;
BEGIN
    ArcByCenter( 0.0, 0.0, 25.0/2.0, 0.0, 360.0 );
    ArcByCenter( 600.0, 0.0, 25.0/2.0, 0.0, 360.0 );
    ArcByCenter( 0.0, 300.0, 25.0/2.0, 0.0, 360.0 );
    ArcByCenter( 600.0, 300.0, 25.0/2.0, 0.0, 360.0 );
END;
Run( steelrack );

実行するにはパレット内のスクリプト名をダブルクリックです。円が4つ描かれましたね。

続いて、4つの円を柱状体に変換します。プログラムの場合、柱状体にしたい図形を、BeginXtrd〜EndXtrdで挟みます。

BeginXtrd( startDistance, endDistance );
EndXtrd;

startDistanceは底面の座標、endDistanceは上面の座標になりますので、
startDistanceは0.0、endDistanceは900.0になります。

PROCEDURE steelrack;
BEGIN
BeginXtrd( 0.0, 900.0 );
    ArcByCenter( 0.0, 0.0, 25.0/2.0, 0.0, 360.0 );
    ArcByCenter( 600.0, 0.0, 25.0/2.0, 0.0, 360.0 );
    ArcByCenter( 0.0, 300.0, 25.0/2.0, 0.0, 360.0 );
    ArcByCenter( 600.0, 300.0, 25.0/2.0, 0.0, 360.0 );
EndXtrd;
END;
Run( steelrack );

手作業で描いた円は消しておき、実行するとポールが4つ描かれましたね。

次に棚板を描きます。まず長方形を描くので、手続きRectを使います。

Rect( p1X, p1Y, p2X, p2Y );

p1X, p1Yを左上(左下)、p2X, p2Yを右下(右上)とします。

PROCEDURE steelrack;
BEGIN
    Rect( 0.0, 0.0, 600.0, 300.0 );
END;
Run( steelrack );

手書きの時は、床上に描いた板をZ方向に移動しましたが、スクリプトならば柱状体の上下の値で、最初から目的の高さに描くことが可能です。

PROCEDURE steelrack;
BEGIN
    BeginXtrd( 25.4*2-30.0, 25.4*2 );
        Rect( 0.0, 0.0, 600.0, 300.0 );
    EndXtrd;

    BeginXtrd( 25.4*10-30.0, 25.4*10 );
        Rect( 0.0, 0.0, 600.0, 300.0 );
    EndXtrd;

    BeginXtrd( 25.4*20-30.0, 25.4*20 );
        Rect( 0.0, 0.0, 600.0, 300.0 );
    EndXtrd;

    BeginXtrd( 25.4*30-30.0, 25.4*30 );
        Rect( 0.0, 0.0, 600.0, 300.0 );
    EndXtrd;
END;
Run( steelrack );

ポールの部分と棚板の部分のプログラムを合わせることで、最初に手描いたものと同じ図形が描けるようになりました。

PROCEDURE steelrack;
BEGIN
BeginXtrd( 0.0, 900.0 );
ArcByCenter( 0.0, 0.0, 25.0/2.0, 0.0, 360.0 );
ArcByCenter( 600.0, 0.0, 25.0/2.0, 0.0, 360.0 );
ArcByCenter( 0.0, 300.0, 25.0/2.0, 0.0, 360.0 );
ArcByCenter( 600.0, 300.0, 25.0/2.0, 0.0, 360.0 );
EndXtrd;

BeginXtrd( 25.4*2-30.0, 25.4*2 );
Rect( 0.0, 0.0, 600.0, 300.0 );
EndXtrd;

BeginXtrd( 25.4*10-30.0, 25.4*10 );
Rect( 0.0, 0.0, 600.0, 300.0 );
EndXtrd;

BeginXtrd( 25.4*20-30.0, 25.4*20 );
Rect( 0.0, 0.0, 600.0, 300.0 );
EndXtrd;

BeginXtrd( 25.4*30-30.0, 25.4*30 );
Rect( 0.0, 0.0, 600.0, 300.0 );
EndXtrd;
END;
Run( steelrack );

43-3. プラグインオブジェクト化

さて、プログラムによって自動で描くことができるようになりましたが、このままではシンボル図形と変わらず、何度実行しても同じ図形を描き続けます。

そこで、いよいよサスティナブルなシンボル、スクリプトをプラグインオブジェクト化していきます。プラグインのスクリプトはスクリプトのリソースではなくプラグインマネージャにプラグインのスクリプトとして定義していきます。

ツールメニューのプラグイン>プラグインマネージャを実行します。カスタムプラグインタブのところで新規ボタンを実行すると、プラグインのタイプを選択するダイアログが表示されます。プラグインの名前を入れて1点型オブジェクトを選択してOKボタンを押します。

次にパラメータを追加します。プラグイン名を選んだ状態で定義の編集ボタンを押しパラメータタブを選択します。

パラメータとして、棚板の横幅、棚板の奥行、ポールの高さを用意し、変更できるようにします。変更できるというのは、図形を図面に置いた後に、四角形の幅をオブジェクトパレットから変えるのと同じように後から変更できるようになります。

ただ数字を入れるのではなく、例えば大きさの規格が決まっている場合を想定して、あらかじめ何種類からか選択できるようにしてみましょう。パラメータの型としてはPop-upとなります。選択肢として次の値を用意しましょう。

    • 棚板の横幅、60cm、90cm、120cm、150cm、180cm
    • 棚板の奥行、30cm、45cm、60cm、90cm
    • ポールの高さ、90cm、120cm、150cm、180cm

パラメータの名前はスクリプト上から参照する名前になるため、半角英数字です。フィールド名はオブジェクトパレットに出てくる名前です。Pop-up型の定ボタンを押して、プルダウンに表示するストリングを入れます。棚板の横幅なら、

600
900
1200
1500
1800

を入れておきましょう。初期値は好きな値を選んでおきます。棚板の奥行、ポールの高さも作ります。

これでパラメータの準備ができましたので、プラグラムの手直しをしていきます。ベースとしてスクリプトリソースで作成したプログラムをプラグインオブジェクトのスクリプト編集画面にペーストしておきます。

棚板も枚数分の高さ(下からの溝の数、2〜70)を選択できるようにように、また未使用を選んだ場合には、プログラムの方で棚板の描画をしないように書き換えます。

プログラムはパラメータからのデータを参照するように変更するだけです。プログラムの中ではパラメータは、名前の先頭にPを付けます。棚板の横幅ならばPwidth、棚板の奥行ならばPheight、ポールの高さならばPlengthになります。ただし、Pop-upはテキストデータが返りますので、数値として扱うには、関数Str2Numで数値に変換する必要があります。

PROCEDURE steelrack;
BEGIN
    BeginXtrd( 0.0, Str2Num( Plength ) );
        ArcByCenter( 0.0, 0.0, 25.0/2.0, 0.0, 360.0 );
        ArcByCenter( Str2Num( Pwidth ), 0.0, 25.0/2.0, 0.0, 360.0 );
        ArcByCenter( 0.0, Str2Num( Pheight ), 25.0/2.0, 0.0, 360.0 );
        ArcByCenter( Str2Num( Pwidth ), Str2Num( Pheight ), 25.0/2.0, 0.0, 360.0 );
    EndXtrd;

IF Pita1 <> '未使用' THEN
BEGIN
    BeginXtrd( 25.4*Str2Num( Pita1 )-30.0, 25.4*Str2Num( Pita1 ) );
        Rect( 0.0, 0.0, Str2Num( Pwidth ), Str2Num( Pheight ) );
    EndXtrd;
END;

IF Pita2 <> '未使用' THEN
BEGIN
    BeginXtrd( 25.4*Str2Num( Pita2 )-30.0, 25.4*Str2Num( Pita2 ) );
        Rect( 0.0, 0.0, Str2Num( Pwidth ), Str2Num( Pheight ) );
    EndXtrd;
END;

IF Pita3 <> '未使用' THEN
BEGIN
    BeginXtrd( 25.4*Str2Num( Pita3 )-30.0, 25.4*Str2Num( Pita3 ) );
        Rect( 0.0, 0.0, Str2Num( Pwidth ), Str2Num( Pheight ) );
    EndXtrd;
END;

IF Pita4 <> '未使用' THEN
BEGIN
    BeginXtrd( 25.4*Str2Num( Pita4 )-30.0, 25.4*Str2Num( Pita4 ) );
        Rect( 0.0, 0.0, Str2Num( Pwidth ), Str2Num( Pheight ) );
    EndXtrd;
END;

IF Pita5 <> '未使用' THEN
BEGIN
    BeginXtrd( 25.4*Str2Num( Pita5 )-30.0, 25.4*Str2Num( Pita5 ) );
        Rect( 0.0, 0.0, Str2Num( Pwidth ), Str2Num( Pheight ) );
    EndXtrd;
END;

IF Pita6 <> '未使用' THEN
BEGIN
    BeginXtrd( 25.4*Str2Num( Pita6 )-30.0, 25.4*Str2Num( Pita6 ) );
        Rect( 0.0, 0.0, Str2Num( Pwidth ), Str2Num( Pheight ) );
    EndXtrd;
END;

END;
Run( steelrack );

さて実行はどのようにするかというと、普段使っている四角形や円と同じようにツールパレットから実行します。そのための準備として、作業画面の編集をします。

ツールタブを選んで、左の新規ツールパレットセットを右のツールセットの一番下にドラックアンドドロップし、新規ツールセットができますので、左側のその他のカテゴリのスチールラックを新規ツールパレットセットの下にドラックアンドドロップします。

スチールラックを置きたいところで、マウスをクリックするとデフォルトの数値でスチールラックを描きますが、オブジェクトパレットからパラメータを変更することでリアルタイムに図形が書き変わります。

プラグインオブジェクトではイベントハンドリングや、スタイル化、サブパーツでの集計など、さらに深く作り込むことができます。これら中上級者向けの内容についても今後解説していきます。

この機能を利用できる製品

Fundamentals

Vectorworks Fundamentals

2D/3D汎用作図機能に、プレゼンボード作成機能や図面と連動できる表計算機能など、数多くの基本作図機能に加え、高品質レンダリング&3Dビジュアライズ機能を搭載したVectorworksシリーズの基本製品
詳細情報 購入ページ

Architect

Vectorworks Architect

建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品
詳細情報 購入ページ

Landmark

Vectorworks Landmark

地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品
詳細情報 購入ページ

Spotlight

Vectorworks Spotlight

ステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品
詳細情報 購入ページ

Designer

Vectorworks Design Suite

専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品
詳細情報 購入ページ