Vectorworks ビューポートを作る(2) 辞書
python の辞書
pythonの辞書とはキーと値があるものです。多くのデータはキーと値で成り立っていて、x座標:100 などといった具合です。python 辞書 とかで検索すれば色々と出てきます。
前回レイヤやクラスのリストを作りました。今回は辞書を使ってみたいと思います。
登録画面からシートレイヤを作る
Vectorworksの古くからの使い方で、登録画面があります。レイヤとクラスの表示状態や画面位置を登録するものです。
印刷物としてはシートレイヤを使うことを開発元は推奨しているようですが、まだまだ登録画面で印刷物までの処理を行っている人も多いはずです。
登録画面からシートレイヤとビューポートを作ってみたいと思います。
import vs
import os
def create_Vlist():#登録画面のリストを作る
n = vs.SheetNum() #登録画面の数
vlist = []
i =1
for i in range(1,n+1):
v_String = vs.SheetList(i)
vlist.append(v_String)
i += 1
return vlist
#ーーーーーーーーーーーーーーーーーーー
def create_layer_list():#デザインレイヤ名のリストを作る
n = vs.NumLayers() #レイヤの数
layer_list = []
layerH = vs.FLayer()
layerName = vs.GetLName(layerH)
layer_list.append(layerName)
i =1
while i <= int(n-1):
layerH = vs.NextLayer(layerH)
boo = vs.SetSheetLayerUserOrigin(layerH, 0, 0)#シートレイヤの判別
if boo == True: #Trueの場合はシートレイヤなので何もしない
i += 1
continue
layerName = vs.GetLName(layerH)
layer_list.append(layerName)
i += 1
return layer_list
#ーーーーーーーーーーーーーーーーーーーー
def classNameList():#クラス名のリストを作る
n = vs.ClassNum()
class_list = []
i =1
for i in range(1,n+1):
c_Name = vs.ClassList(i)
class_list.append(c_Name)
i += 1
return class_list
def class_View(class_list):#クラスの表示の辞書を作る
classview_dict = {}
for view in class_list:
classview = vs.GetCVis(view) #クラスの表示状態
classview_dict[view] = classview #クラス名:表示状態(整数)
return classview_dict
def layer_View(layer_list):#レイヤの表示の辞書を作る
layerview_dict = {}
for name in layer_list:
layer_H = vs.GetLayerByName(name)
layerview = vs.GetObjectVariableInt(layer_H, 153)
layerview_dict[name] = layerview #レイヤ名:表示状態(整数)
return layerview_dict
vlist = create_Vlist()
layer_list = create_layer_list()
class_list = classNameList()
for vName in vlist: #登録画面で回す
vs.VRestore(str(vName))
sheet_H = vs.CreateLayer(vName, 2)
view_H = vs.CreateVP(sheet_H)
classview_dict = class_View(class_list)
layerview_dict = layer_View(layer_list)
vs.AlrtDialog(str(classview_dict))
vs.AlrtDialog(str(layerview_dict))
for key,value in classview_dict.items():
boo = vs.SetVPClassVisibility(view_H, key, int(value))
for key,value in layerview_dict.items():
layer_H = vs.GetLayerByName(key)
boo = vs.SetVPLayerVisibility(view_H, layer_H, int(value))
#vs.AlrtDialog(str(key))
#vs.AlrtDialog(str(value))
vs.UpdateVP(view_H)
vs.ReDraw()
三つの登録画面を用意して、シートレイヤを作成します。
スクリプトを実行
スクリプトを実行すると、無事シートレイヤに登録画面の表示状態のビューポートが作成されました。
縮尺が1:1のままなので、大きくなってました。縮尺を登録画面のアクティブレイヤに合わせたり、3Dの場合の対応などが必要ですが、上手く表示状態が反映できました。