Как смоделировать сферическое лицо с многоугольной границей в pythonO CC? - PullRequest
0 голосов
/ 02 августа 2020

Я пытаюсь обрезать сферу с помощью восьмиугольной проволоки, но не совсем понимаю, как это сделать правильно.

Мой текущий подход - использовать конструктор BRepBuilderAPI_MakeFace(), используя Geom_SphericalSurface() как поверхность и многоугольник из BRepBuilderAPI_MakePolygon() как границы. Он не делает того, что я ожидал, на дисплее я ожидал увидеть одну грань, образованную проекцией проволоки на сферу, но вместо этого я вижу каркас как сферы, так и исходной многоугольной проволоки.

Как правильно подойти к этой проблеме? Я подозреваю, что мой провод неправильно параметризован в терминах U и V, вместо этого я просто выразил его в глобальных координатах. Однако, если бы это было так, я бы ожидал ошибки «вне домена», вместо этого кажется, что ошибок нет.

import numpy as np
from OCC.Core import gp, BRepBuilderAPI, Geom
from OCC.Display import SimpleGui

# Define vertices of polygonal wire
poly_half_width = 100
num_vertices = 8
angles = np.linspace(0, 2 * np.pi, num_vertices, endpoint=False)
vertex_x, vertex_y = poly_half_width * np.cos(angles), poly_half_width * np.sin(angles)

# Create polygonal wire
poly = BRepBuilderAPI.BRepBuilderAPI_MakePolygon()
for vx, vy in zip(vertex_x, vertex_y):
    poly.Add(gp.gp_Pnt(vx, vy, 0))
poly.Close()

# Define spherical surface
radius = 3 * poly_half_width
zhat = gp.gp_Dir(0, 0, 1)
center = gp.gp_Pnt(0, 0, radius)
sphere = Geom.Geom_SphericalSurface(gp.gp_Ax3(center, zhat), radius)

# Create Face (THIS IS NOT WORKING)
face = BRepBuilderAPI.BRepBuilderAPI_MakeFace(sphere, poly.Wire()).Face()

# Display result
display, start_display, add_menu, add_function_to_menu = SimpleGui.init_display()
display.DisplayShape(face)
start_display()

введите описание изображения здесь

...