Vectorworks ビューポートを作る(1) リスト
python のリスト
CADでの操作は、条件に沿って複数の図形やレイヤの処理を行うことがよくあります。
●処理したい図形を複数選択して線種を変える
●複数のレイヤの設定を選択して一括で変える
コンピュータの処理は高速なので、都度選択するよりも一旦選択対象を絞って、処理を行うとあっという間です。多くのCADでは図形の選択条件や検索条件の関数があります。
VectorworksだとForEachObject という関数で条件を満たした図形を一括で処理します。あとはプログラミング言語で処理するリストを作って、まとめて手続きを行うこともできます。
今回のサンプルはVectorworksでのリスト作り。クラスやレイヤ、登録画面のリストを作ります。AlrtDialogという関数で表示します。
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
vlist = create_Vlist()
layer_list = create_layer_list()
class_list = classNameList()
vs.AlrtDialog('登録画面のリストは'+vs.Chr(13) + str(vlist))
vs.AlrtDialog('デザインレイヤのリストは'+vs.Chr(13) + str(layer_list))
vs.AlrtDialog('クラスのリストは' + vs.Chr(13) + str(class_list))
リソースマネージャでスクリプトを作成して(上をペーストすればできます)実行します。A&AのHPからダウンロードしたチュートリアルデータに登録画面を追加しました。
クラスが多いですね。こんなに分けてレイヤと別で管理が大変そうです。2020あたりで一括のリネーム機能も追加されましたが、クラスリストのクラスそれぞれに'a'を追加する事などもできます。