CADとPython学習 12 複数の図形に一括で処理する

複数の図形に一括で処理する場合、一つ一つの図形のリストを作ってfor文で処理を回すという方法もありますが、基本的にはCAD側で用意した関数を利用します。

ライノセラスのスクリプトサンプル

ライノセラスで、複数の図形に一括で処理をするスクリプトです。基本的にはGetObjectsを使うのかな、と思います。複数のカーブを選択して、それぞれのidをリストに加えてmessageを呼び出すというものです。

import rhinoscriptsyntax as rs
objectIds = rs.GetObjects("Pick some curves", rs.filter.curve)
for id in objectIds: 
    print 'Object identifier:', id

Vectorworksのスクリプトサンプル

同じことをVectorworksで行います。VectorworksではForEachObjectという関数を使います。こちらの関数、callback関数というのを利用しますので、関数の処理と対照図形を別で書いていきます。

def callbackUuid(hand):
	uuid = vs.GetObjectUuid(hand)
	uuidList.append(uuid)

uuidList = [] #空のリストを作る
word = "(VSEL=TRUE)" #対象条件の文字列 表示と選択がTrue
vs.ForEachObject(callbackUuid, word) #callbackUuidListを対照図形で実行
vs.AlrtDialog(str(uuidList))

callback関数でuuidListというものに加えていく処理を行なっています。"(VSEL=TRUE)" というのが「表示と選択がTrueの場合」という意味合いになり、この対称図形に対してcallback関数を行なって、最後にまとめてuuidListを文字で表す、となっています。

vs.ForEachObject()で細かな条件設定

ForEachObjectで細かな条件設定を行います。

word = r"INSYMBOL & INVIEWPORT & ('線の集計'.'matadd'='" + rec + "')"

以前ご紹介している線の集計オブジェクトで、mataddのパラメータが共通のものの場合に、色を一緒にしていく処理です。

条件のところに[rec]という変数(この場合はパラメータ)を文字列として加えて、for文で回すことで、同じパラメータの場合は同じ色にする、という処理を行なっています。

#線の集計図形のmataddというフィールドの値をリスト化する関数
def callbackList(hand):
	matHigh = vs.GetRField(hand, '線の集計', 'matadd')
	recList.append(matHigh)

#線の色を変更する関数
def callbackColor(hand):
	#colorsのリストの一番左の番号を割り当てる
	vs.SetPenFore(hand, colors[0])
	vs.ResetObject(hand)

#色番号のリストを作る
colors = [3,4,6,7,14,254,18,19,20,39,40,11,28,92,62,70,86,102,118,165,140,172,222,238,4,22]
#空のレコードリスト
recList = []
#線の集計を統計
word = "INSYMBOL & INVIEWPORT & (PON='線の集計')"

#matAddの値のリストを作成して、集合に変更。
vs.ForEachObject(callbackList, word)
recSet = set(recList)

#線の集計の色を変更。for文でレコードの値を変えながらForEachObjectを使う
for rec in recSet:
	#レコードの値ごとに選択させる。対称図形の条件をfor文使って変数[rec]を使って変更していく
	word = r"INSYMBOL & INVIEWPORT & ('線の集計'.'matadd'='" + rec + "')"
	vs.AlrtDialog(word)
	#同じレコードの値は同じ色としてまとめる。
	vs.ForEachObject(callbackColor, word)
	#色番号のリストから先頭を消す
	colors.pop(0)
 

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です