見出し画像

複数の3D図形を同じ図形でまとめて削り取る

モデリングをしていて、例えば、ルーバーやデッキ材など、複数配列した3D図形をある形状に沿ってまとめて削り取りたい、あるいは、異なるクラスが割り当てられた複数の図形にまとめて穴を空けたい、という場面が時々あるのですが、そんな時に考えられる操作は、

(1)2D図形の段階で複数配列→切り欠きをしてから柱状体にする。(もしくは柱状体の2次元図形を後から切り欠く)

(2)複数の3D図形を一度合成(噛み合わせる)して一つの図形にしてから削り取る。

(3)削り取る図形を複製して、一つ一つの図形を手作業で削りとっていく。

かと思います。

ただ、既に3D化したものを複製してしまったものは(1)は使えませんし、異なるクラスが割り当てられた複数の図形のクラスを維持したままにしたい場合は、(1)(2)が使えず、結局ちまちまと(3)をする、ということがしばしばでした。

ですが、今やっているプロジェクトで、スタディをするごとに、「複数の3D図形を同じ図形でまとめて削り取る」ということが必要になりそうだったため、これはそういうメニューを作るしかない、と思いやってみました。

案外簡単にできたので、こんなことなら早くやればよかった。

と、思ったのも束の間、実際のプロジェクトで試してみると、ある条件下ではうまくいかないことが判明。

しばらくいろいろ試してみましたが、解決策までたどり着けなかったので、フォーラムで質問してみたところ、丁寧な回答をいただき、ばっちりうまくいくようになりました。たぶん

→ フォーラム vectorscriptで選択図形の検索について – Vectorworks Design Blog

最終的なコードはこんな感じ。

#---------------------------------------
import vs
		
# ----------------------------------------------------------
# script-----------------------------------------------------
# ----------------------------------------------------------
obj = vs.LSActLayer()
h1 =obj
obj = vs.PrevSObj( obj )
while obj != 0:
	obj0 = obj
	obj = vs.PrevSObj( obj )
	h2 = vs.HDuplicate(h1,0,0)
	(a, obj2) = vs.SubtractSolid(obj0, h2)
vs.DelObject(h1)
	
#---------------------------------------

短いコードですが、大変勉強になりました。また、これで結構便利になったかと思います。

一応、vsmファイルも添付しておきます。VectorworksのPlug-insフォルダに入れて、作業画面の編集でメニューのオリジナルから好きな場所にメニューを追加すれば使えるかと思います。(ご使用は一応自己責任でお願いいたします。)


この記事が気に入ったらサポートをしてみませんか?