PythonOCC

PythonOCCでブーリアン演算を使ってみる

2020年5月7日

PythonOCCでブーリアン演算を使ってみます。

ブーリアン演算とは、モデル同士の足し算や引き算みたいなものらしいでです。wikipediaより

この2つの玉にブーリアン演算を使ってみようと思います。

ブーリアン演算 積

重なっている部分を抽出する必殺技です。

ここで共有部分を取得してます。

# ブーリアン演算_積
common = BRepAlgoAPI_Common(my_sphere, my_sphere_blue ).Shape()

もとの玉を薄く表示してます。

共有部分は濃い金色の部分です。

中身はこんな感じです

from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeSphere
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform
from OCC.Core.gp import gp_Pnt
from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Common
from OCC.Core.AIS import AIS_ColoredShape
from OCC.Display.SimpleGui import init_display
from OCC.Display.OCCViewer import rgb_color

display, start_display, add_menu, add_function_to_menu = init_display()

# 玉を作成
my_sphere = BRepPrimAPI_MakeSphere(10.).Shape()

# 青い玉
my_sphere_blue = BRepPrimAPI_MakeSphere( gp_Pnt(10.,0,0), 10. ).Shape()
ais_sphere_blue = AIS_ColoredShape(my_sphere_blue )
ais_sphere_blue.SetCustomColor(my_sphere_blue, rgb_color( 0.3, 0.4, 0.9 ) )
ais_sphere_blue.SetTransparency(0.8)

# ブーリアン演算_積
common = BRepAlgoAPI_Common(my_sphere, my_sphere_blue ).Shape()

# 表示
display.DisplayShape(my_sphere, transparency=0.8,update=True )
display.Context.Display(ais_sphere_blue, True )
display.DisplayShape(common, update=True )

start_display()

ブーリアン演算 差

引き算ですね。

金色の玉から青い球を引いてみました。

ここで引いてます。

# ブーリアン演算_差
cut = BRepAlgoAPI_Cut(my_sphere, my_sphere_blue ).Shape()

金玉がえぐられてますね。

中身はこんな感じです

from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeSphere
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform
from OCC.Core.gp import gp_Pnt
from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Cut
from OCC.Core.AIS import AIS_ColoredShape
from OCC.Display.SimpleGui import init_display
from OCC.Display.OCCViewer import rgb_color

display, start_display, add_menu, add_function_to_menu = init_display()

# 玉を作成
my_sphere = BRepPrimAPI_MakeSphere(10.).Shape()

# 青い玉
my_sphere_blue = BRepPrimAPI_MakeSphere( gp_Pnt(10.,0,0), 10. ).Shape()
ais_sphere_blue = AIS_ColoredShape(my_sphere_blue )
ais_sphere_blue.SetCustomColor(my_sphere_blue, rgb_color( 0.3, 0.4, 0.9 ) )
ais_sphere_blue.SetTransparency(0.9)

# ブーリアン演算_差
cut = BRepAlgoAPI_Cut(my_sphere, my_sphere_blue ).Shape()

# 表示
display.Context.Display(ais_sphere_blue, True )
display.DisplayShape(cut, update=True )

start_display()

ブーリアン演算 和

こっちは足し算ですね。

ここでくっつけてます。

# ブーリアン演算_和
fuse = BRepAlgoAPI_Fuse(my_sphere, my_sphere_blue ).Shape()

金色の双子の玉になりました。

中身はこんな感じです

from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeSphere
from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_Transform
from OCC.Core.gp import gp_Pnt
from OCC.Core.BRepAlgoAPI import BRepAlgoAPI_Fuse
from OCC.Core.AIS import AIS_ColoredShape
from OCC.Display.SimpleGui import init_display
from OCC.Display.OCCViewer import rgb_color

display, start_display, add_menu, add_function_to_menu = init_display()

# 玉を作成
my_sphere = BRepPrimAPI_MakeSphere(10.).Shape()

# 青い玉
my_sphere_blue = BRepPrimAPI_MakeSphere( gp_Pnt(10.,0,0), 10. ).Shape()
ais_sphere_blue = AIS_ColoredShape(my_sphere_blue )
ais_sphere_blue.SetCustomColor(my_sphere_blue, rgb_color( 0.3, 0.4, 0.9 ) )
ais_sphere_blue.SetTransparency(0.8)

# ブーリアン演算_和
fuse = BRepAlgoAPI_Fuse(my_sphere, my_sphere_blue ).Shape()

# 表示
display.DisplayShape(fuse, update=True )

start_display()

-PythonOCC

© 2021 暇人が趣味をさがす