今回は、Pythonスクリプトを使用して、Vectorworksの書類で扱う様々なデータを一覧で取得する方法を紹介します。
プログラミングで作業の効率化を考えるとき、まずは対象となるデータをプログラムの中で扱えるように書類から取得することから始まります。
図面上の図形や、クラス、パラメータやリソースなど、Vectorworksの作業でよく使うデータをPythonスクリプトで取得する例を紹介します。
Vectorworksでプログラムを開発するときは、環境設定から「スクリプトを開発者モード実行」にチェックを入れましょう。

開発者モードでは、スクリプト実行の際の軽微な問題にも反応するようになり、Pythonスクリプトでのprint等を使用した標準出力のログの確認にも使用できます。

エラーメッセージとして表示されますが、エラーではありませんのでびっくりしないでください。※実際にエラーがある場合も、同じメッセージ内に表示されます。


67-1. 図面上の図形をサーチ
objs = []
obj = vs.FActLayer()
while obj != vs.Handle(0):
objs.append( obj )
obj = obj.next
print( objs )
67-2. 検索条件を指定して図形をサーチ
criteria = "((L='1F-壁') & (PON='Space'))" # レイヤが1F-壁かつ、図形の種類がスペースの図形
objs = []
def callback(obj):
objs.append( obj )
vs.ForEachObject( callback, criteria )
print( objs )
図形選択マクロで「Python Scriptを作成」にチェックを入れることで検索条件式を作成することができます。


生成されたPythonスクリプトから、検索条件式部分の文字列をコピーして使用します。

67-3. グループ内の図形
objs = []
grpobj = vs.FSActLayer() #図面上で選択されているグループ図形のハンドル
obj = vs.FInGroup( grpobj )
while obj != vs.Handle(0):
objs.append( obj )
obj = obj.next
print( objs )
67-4. 壁に挿入されているオブジェクトの一覧
objs = []
wallobj = vs.FSActLayer() #図面上で選択されている壁のハンドル
obj = vs.FIn3D( wallobj )
while obj != vs.Handle(0):
if obj.type in [15,86]: #図形の種類がシンボル(15)またはプラグインオブジェクト(86)
objs.append( obj )
obj = obj.next
print( objs )
67-5. レイヤの一覧
layers = []
designLayers = []
sheetLayers = []
layer = vs.FLayer()
while layer != vs.Handle(0):
lname = vs.GetLName( layer )
layers.append( lname )
if vs.GetObjectVariableInt( layer, 154 ) == 1: #デザインレイヤorシートレイヤを判定
designLayers.append( lname )
else:
sheetLayers.append( lname )
layer = vs.NextLayer( layer )
print( layers )
print( designLayers )
print( sheetLayers )
67-6. クラスの一覧
classlist = []
for index in range( vs.ClassNum() ):
classname = vs.ClassList( index+1 ) #索引番号は1始まり
classlist.append( classname )
print( classlist )
67-7. 多角形・曲線の頂点座標一覧
pointlist = []
poly = vs.FSActLayer() #図面上で選択されている多角形のハンドル
for index in range(vs.GetVertNum(poly)):
pt = vs.GetPolyPt(poly, index+1) #索引番号は1始まり
pointlist.append( pt )
print( pointlist )
67-8. NURBS曲線の頂点一覧
pointlist = []
nurbs = vs.FSActLayer() #図面上で選択されているNURBS曲線のハンドル
for seg in range(vs.NurbsCurveGetNumPieces(nurbs)):
for index in range( vs.NurbsGetNumPts( nurbs,seg ) ):
pt3D = vs.NurbsGetPt3D( nurbs, seg, index ) # 0始まり
pointlist.append( pt3D )
print( pointlist )
67-9. NURBS曲面の頂点一覧
pointlist = []
surface = vs.FSActLayer() #図面上で選択されているNURBS曲面のハンドル
for uu in range( vs.NurbsGetNumPts( surface,1 ) ):
sublist = []
for vv in range( vs.NurbsGetNumPts( surface,0 ) ):
pt3D = vs.NurbsGetPt3D( surface, uu, vv )
sublist.append( pt3D )
pointlist.append( sublist )
print( pointlist )
67-10. パラメトリックオブジェクトのパラメータ(レコード)の一覧
params = {}
obj = vs.FSActLayer() #図面上で選択されているオブジェクトのハンドル ※壁に挿入されている場合はFSActLayerでハンドルを取得できません
for ii in range(vs.NumRecords( obj )):
rec = vs.GetRecord( obj, ii+1 )
recname = vs.GetName( rec )
data = {}
for jj in range( vs.NumFields(rec) ):
fld = vs.GetFldName( rec, jj+1 )
fldValue = vs.GetRField( obj, recname, fld)
data[ fld ] = fldValue
params[ recname ] = data
print( params )
67-11. リソースリスト – ラインタイプの一覧
linetypeIndex = {}
listID, numitems = vs.BuildResourceList( 96, 174, '' )
for ii in range( numitems ):
lintypename = vs.GetNameFromResourceList( listID, ii+1 )
index = vs.Name2Index( lintypename )
if index == 0:
linetype = vs.ImportResourceToCurrentFile( listID, ii+1 )
if linetype == vs.Handle(0):
continue
lintypename = vs.GetName( linetype )
index = vs.Name2Index( lintypename )
linetypeIndex[ lintypename ] = index
print( linetypeIndex )
BuildResourceListの引数に使用するリソースの種類番号と、参照するフォルダ番号はdeveloperサイトで確認できます。
Appendix D – Vectorworks Object Types and Subtypes
この機能を利用できる製品
|
Vectorworks Fundamentals2D/3D汎用作図機能に、プレゼンボード作成機能や図面と連動できる表計算機能など、数多くの基本作図機能に加え、高品質レンダリング&3Dビジュアライズ機能を搭載したVectorworksシリーズの基本製品 |
|
Vectorworks Architect建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品 |
|
Vectorworks Landmark地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品 |
|
Vectorworks Spotlightステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品 |
|
Vectorworks Design Suite専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品 |






