PythonOCC 应用实例(1)|模型动画

我们能够通过PythonOCC进行三维建模来表达我们的设计意图,今天介绍模型动画的实现。

关于PythOCC

PythonOCC是python语言封装opencascade的 3D CAD/CAE/PLM开源开发框架,它提供了如下功能:复杂曲面的操作,信息转换(STEP,IGES,STL格式),用户界面可视化(基于wxpython库或者qt库),jupyter nootbook生成等。该框架采用LGPL协议,既保证了软件的开源传播,又给予了更自由的商业使用权限。

opencascade源码为c++版本,虽然能够保证运行速度,但是开发效率以及开源程度却受到了限制.pythonOCC为是opencascade的python封装版本,由tpaviot制作并发行的。Python是当前热门开源语言,在github网站上拥有着大量的repo,结合python的开源特性以及opencascade的运行效率,作者开发了PythonOCC,兼顾了运行效率以及开发效率.

程序代码

#!/usr/bin/env python##Copyright 2009-2014 Thomas Paviot (tpaviot@gmail.com)
##
##This file is part of pythonOCC.
##
##pythonOCC is free software: you can redistribute it and/or modify
##it under the terms of the GNU Lesser General Public License as published by
##the Free Software Foundation, either version 3 of the License, or
##(at your option) any later version.
##
##pythonOCC is distributed in the hope that it will be useful,
##but WITHOUT ANY WARRANTY; without even the implied warranty of
##MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##GNU Lesser General Public License for more details.
##
##You should have received a copy of the GNU Lesser General Public License
##along with pythonOCC.  If not, see <http://www.gnu.org/licenses/>.import time
from math import pi
from OCC.Core.gp import gp_Ax1, gp_Pnt, gp_Dir, gp_Trsf
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox
from OCC.Core.TopLoc import TopLoc_Location
from OCC.Display.SimpleGui import init_display
display, start_display, add_menu, add_function_to_menu = init_display()
ais_boxshp = None
def build_shape():
    boxshp = BRepPrimAPI_MakeBox(50.0, 50.0, 50.0).Shape()
    ais_boxshp = display.DisplayShape(boxshp, update=True)[0]
    return ais_boxshp
​
​
def rotating_cube_1_axis(event=None):
    display.EraseAll()
    ais_boxshp = build_shape()
    ax1 = gp_Ax1(gp_Pnt(0.0, 0.0, 0.0), gp_Dir(0.0, 0.0, 1.0))
    aCubeTrsf = gp_Trsf()
    angle = 0.0
    tA = time.time()
    n_rotations = 200
    for i in range(n_rotations):
        aCubeTrsf.SetRotation(ax1, angle)
        aCubeToploc = TopLoc_Location(aCubeTrsf)
        display.Context.SetLocation(ais_boxshp, aCubeToploc)
        display.Context.UpdateCurrentViewer()
        angle += 2 * pi / n_rotations
    print("%i rotations took %f" % (n_rotations, time.time() - tA))def rotating_cube_2_axis(event=None):
    display.EraseAll()
    ais_boxshp = build_shape()
    ax1 = gp_Ax1(gp_Pnt(0.0, 0.0, 0.0), gp_Dir(0.0, 0.0, 1.0))
    ax2 = gp_Ax1(gp_Pnt(0.0, 0.0, 0.0), gp_Dir(0.0, 1.0, 0.0))
    a_cube_trsf = gp_Trsf()
    a_cube_trsf2 = gp_Trsf()
    angle = 0.0
    tA = time.time()
    n_rotations = 200
    for i in range(n_rotations):
        a_cube_trsf.SetRotation(ax1, angle)
        a_cube_trsf2.SetRotation(ax2, angle)
        aCubeToploc = TopLoc_Location(a_cube_trsf * a_cube_trsf2)
        display.Context.SetLocation(ais_boxshp, aCubeToploc)
        display.Context.UpdateCurrentViewer()
        angle += 2 * pi / n_rotations
    print("%i rotations took %f" % (n_rotations, time.time() - tA))
if __name__ == "__main__":
    add_menu("animation")
    add_function_to_menu("animation", rotating_cube_1_axis)
    add_function_to_menu("animation", rotating_cube_2_axis)
    start_display()

模型动画实现效果

在这里插入图片描述

尾言

接下来就是抛砖引玉了,大家可自行验证!碰到问题,欢迎和小编交流!

福利

推荐一款福利型小程序,每日只需完成签到和日常任务,即可兑换1~10元不等。
在这里插入图片描述

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.涂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值