环境搭建
安装Anaconda与pythonocc-core
安装Anaconda,官网 https://www.anaconda.com/
打开Anaconda Prompt,执行下面代码
方案1:来自知乎 https://zhuanlan.zhihu.com/p/382312038
# 创建新环境
conda create --name=pyoccenv python=3.9
# 激活某环境
conda activate pyoccenv
# 安装 pythonocc
conda install -c conda-forge pythonocc-core=7.5.1
# 安装 pyside2
conda install -c conda-forge pyside2
方案2,来自PythonOCC-core仓库
# 创建新环境
conda create --name=pyoccenv python=3.10
# 激活某环境
conda activate pyoccenv
# 安装 pythonocc
conda install -c conda-forge pythonocc-core=7.8.1
# 安装 pyside2
conda install -c conda-forge pyside2
切换 conda 源
# 查看当前的下载源
conda config --show
# 切换到清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
# 恢复成默认
conda config --remove-key channels
在Pycharm调试运行
- 打开PyCharm,新建项目
- 选择已经存在的解释器环境,选择前面创建的
pyoccenv
解释器环境
- 建立项目
- 添加py文件运行下面代码
from OCC.Display.SimpleGui import init_display
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox
display, start_display, add_menu, add_function_to_menu = init_display()
my_box = BRepPrimAPI_MakeBox(10., 20., 30.).Shape()
display.DisplayShape(my_box, update=True)
start_display()
如果正常显示形状,则配置成功。如果显示下面错误也不要慌
RuntimeError: Aspect_GraphicDeviceDefinitionErrorOpenGl_Window::CreateWindow: SetPixelFormat failed. Error code: 2000 raised from method Init of class Display3d
打开qtDisplay.py文件,将 QtOpenGL.QGLWidget
修改为 QtWidgets.QWidget
即可
向Jupyter notebook添加虚拟环境
# conda create --name=pyoccenv python=3.9
pip install ipykernel
python -m ipykernel install --name pyoccenv
# jupyter kernelspec remove py39 # 移除名为py39的kernel
关于帮助文档
Github: https://github.com/tpaviot/pythonocc-core
OCCT帮助文档:
官方没有提供帮助文档,具体来说,没有提供pythonocc-core的帮助文档,但是有0.8.1
版本的pythonocc
文档,https://github.com/tpaviot/pythonocc-documentation,有很大参考意义
可以借助编辑器如Pycharm的.
功能来查看当前对象的属性或方法
可以在OCCT文档查找某些方法的具体名称,再去0.8.1的文档查找,或者去pythonocc-core
的模块代码中查找
有些方法不能直接from... import,比如判断点是否在面上IsPointInFace
,其在OCC代码中是这样写的
# OCC\Core\IntTools.py
class IntTools_Context:
...
def IsPointInFace(self, *args) -> "Standard_Boolean":
r"""
Returns true if the point ap2d is inside the boundaries of the face af, otherwise returns false.
Parameters
----------
aF: TopoDS_Face
aP2D: gp_Pnt2d
Returns
-------
bool
Returns true if the point ap2d is inside the boundaries of the face af, otherwise returns false.
Parameters
----------
aP3D: gp_Pnt
aF: TopoDS_Face
aTol: float
Returns
-------
bool
"""
return _IntTools.IntTools_Context_IsPointInFace(self, *args)
我一开始引用它的格式为:
# 错误1
from OCC.Core.IntTools.IntTools_Context import IsPointInFace
IsPointInFace(ap3d,aface,0.01) # 报错,不让这样引用
# 错误2
from OCC.Core.IntTools import IntTools_Context
IntTools_Context.IsPointInFace(ap3d,aface,0.01) # 报错,说参数不足
其实应该按照下面这样才可以正常使用,也就是需要初始化一个对象,因为有个self
from OCC.Core.IntTools import IntTools_Context
itc = IntTools_Context()
tf = itc.IsPointInFace(ap3d,aface,0.1)