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

新着記事第71回「プログレスダイアログを表示する」

FundamentalsArchitectLandmarkSpotlightDesigner2026

今回はプログレスバーを表示するスクリプトAPIの使い方を解説します。

プログレスダイアログは、処理の進行状況をユーザーに知らせるためのインタフェースです。

Vectorworksはスクリプトでプログラムを実行している間は操作ができなくなります。例えば大量の図形のパラメータを変更する場合や、複雑な計算を行う場合など処理に時間がかかるとアプリがフリーズしているとユーザーが誤解してしまうかもしれません。

プログレスダイアログを表示することで、処理が進行中であることをユーザーに知らせることができます。

VectorScript/PythonにはプログレスダイアログをコントロールするAPIが用意されています。

これらのAPIを使用して、プログレスダイアログのサンプルを作成していきます。

71-1. プログレスダイアログの表示

時間のかかる処理として、四角形の作成と削除を100000回繰り返すスクリプト(Python)を作成します。

for ii in range( 100000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )

まずはプログレスダイアログを表示します。ProgressDlgOpenを処理の開始前に、ProgressDlgCloseを処理の後に記述します。

vs.ProgressDlgOpen('進捗状況', False)

for ii in range( 100000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )

vs.ProgressDlgClose()

OpenとCloseだけでも処理中にプログレスダイアログを表示することができます。ただしプログレスバーは進捗しません。

ProgressDlgOpenの仲間にProgressDlgOpenDelayがあります。ダイアログを表示する機能は同じですが、遅延して表示することができます。遅延時間はミリ秒で指定します。

キャンセルボタン

ProgressDlgOpenの第2引数はキャンセルボタンを表示するかどうかの設定です。ProgressDlgHasCancelとセットで使用します。

ProgressDlgHasCancelはキャンセルボタンが押されたかどうかをチェックすることができます。例えばキャンセルボタンで処理を中断する場合は次のように記述します。

vs.ProgressDlgOpen('進捗状況', True)

for ii in range( 100000 ):
    if vs.ProgressDlgHasCancel():
        break
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )

vs.ProgressDlgClose()

71-2. プログレスバーの進捗

プログレスバーはProgressDlgStartProgressDlgYieldおよびProgressDlgEndの組み合わせで進捗します。

vs.ProgressDlgOpen('進捗状況', False)

vs.ProgressDlgStart(100, 100000)
for ii in range( 100000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )
    vs.ProgressDlgYield(1)
vs.ProgressDlgEnd()

vs.ProgressDlgClose()

vs.ProgressDlgStart(Percentage, LoopCount)

第1引数のPercentageはバー全体(100パーセント)のうち、該当の処理で進捗させたい量を指定します。第2引数のLoopCountは進捗させたい量を幾つに分割して増加させるか指定します。

100パーセント進捗させるとして、LoopCountを100分割とすると1度に1%だけバーが増加します。LoopCountを100000分割とすると一度の増加は0.001%です。

実際にバーを増加させるのはProgressDlgYieldです。LoopCountの何個分を増加させるかを指定します。

複数の処理

一度のプログレスダイアログの間で処理を区切る場合はProgressDlgStartを複数記述してそれぞれパーセンテージを指定します。次の例では最初の処理で40%進捗して、次の処理で60%進捗しています。

vs.ProgressDlgOpen('進捗状況', False)

vs.ProgressDlgStart(40, 40000)
for ii in range( 40000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )
    vs.ProgressDlgYield(1)
vs.ProgressDlgEnd()

vs.ProgressDlgStart(60, 60000)
for ii in range( 60000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )
    vs.ProgressDlgYield(1)
vs.ProgressDlgEnd()

vs.ProgressDlgClose()

71-3. メッセージの表示

プログレスダイアログの上部、下部、メーター部分の3箇所に任意のメッセージを表示することができます。

vs.ProgressDlgOpen('進捗状況', False)

vs.ProgressDlgSetTopMsg('上部のメッセージ')
vs.ProgressDlgSetBotMsg('下部のメッセージ')

vs.ProgressDlgStart(100, 100000)
for ii in range( 100000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )
    vs.ProgressDlgYield(1)
    vs.ProgressDlgSetMeter('メーター部分のメッセージ')
vs.ProgressDlgEnd()

vs.ProgressDlgClose()

ダイアログのタイトルも含めて処理の内容や進捗具合(%)を表示すると分かりやすいですね。

vs.ProgressDlgOpen('四角形の生成と削除', False)

percentage = 0

vs.ProgressDlgSetTopMsg('現在の処理:')

vs.ProgressDlgSetBotMsg('処理1')
vs.ProgressDlgStart(40, 40000)
for ii in range( 40000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )
    vs.ProgressDlgYield(1)
    percentage += 0.001
    vs.ProgressDlgSetMeter(f'{int(percentage)}%')
vs.ProgressDlgEnd()

vs.ProgressDlgSetBotMsg('処理2')
vs.ProgressDlgStart(60, 60000)
for ii in range( 60000 ):
    vs.Rect((0,1),(1,0))
    vs.DelObject( vs.LNewObj() )
    vs.ProgressDlgYield(1)
    percentage += 0.001
    vs.ProgressDlgSetMeter(f'{int(percentage)}%')
vs.ProgressDlgEnd()

vs.ProgressDlgClose()

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

Fundamentals

Vectorworks Fundamentals

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

Architect

Vectorworks Architect

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

Landmark

Vectorworks Landmark

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

Spotlight

Vectorworks Spotlight

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

Designer

Vectorworks Design Suite

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