转载

Make Helix Curve in OpenCASCADE

Make Helix Curve in OpenCASCADE

eryar@163.com

Abstract.OpenCASCADE does not provide helix curve directly, but you can build a helix curve by the pcurve of a surface(curve on surface). When you understand the pcurve of a surface, you can make a helix curve easily. The paper first make a helix by Tcl in Draw Test Harness, then translate the Tcl script to OpenCASCADE C++ code.

Key Words.OpenCASCADE, Helix Curve, PCurve, Sweep, Spring

1. Introduction

螺旋线是实践中常用到的曲线,例如平头螺丝钉的外缘曲线就是螺旋线。当我们拧紧平头螺丝钉时,它的外缘曲线上的任一点M一方面绕螺丝钉的轴旋转,另一方面又沿平行于轴线的方向前进,点M就走出一段螺旋线。[1]

如果空间一点M在圆柱面x*x+y*y=a*a上以角速度ω绕z轴旋转,同时又以线速度υ沿平等于z轴正方向上升(其中ω,υ都是常数),那未点M构成的图形叫螺旋线。其参数方程为:

Make Helix Curve in OpenCASCADE

Make Helix Curve in OpenCASCADE

Figure 1.1 A Helix Curve

OpenCASCADE 中并没有直接提供构造螺旋线的类和函数,因此只有自己来构造了,其中构造的核心是要理解PCurve(曲面的参数曲线)。本文先以Tcl脚本在Draw Test Harness中快速生成一个螺旋线,再将相应的Tcl脚本转换成C++代码。在理解Pcurve概念的基础上来构造螺旋线还是很简单的,甚至还可以扩展 应用。

2.Make Helix Curve

在OpenCASCADE提供的一个经典例子:生成一个酒瓶中,就有螺旋线的应用,即生成瓶口处的螺纹。当时看这例子的时候也是没有完全理解,究竟怎么生成的那个螺旋线?感谢lifenli的提醒,使我又重温了一遍例子,顿时茅塞顿开,明白了pcurve的一个应用。

由《OpenCASCADE BRep Format》[4]中可知,圆柱面的参数方程为:

Make Helix Curve in OpenCASCADE

假设当你在参数空间[u,v]中创建一条二维曲线后,可根据这个二维曲线来计算对应曲面上的三维曲线。根据二维曲线的不同定义,得到的结果如下:

条件

参数方程

参数曲线

U=0

S(v)=P+r*cos(u)+vDz

与Z轴平行的直线

V=0

S(u)=P+r*(cos(u)*Dx+sin(u)*Dy)

与XOY面平行的圆

U!=0 && V != 0

S(u,v)=P+r(cos(u)*Dx+sin(u)*Dy)+vDz

螺旋线

对比螺旋线的参数方程可知,当参数空间中的u和v都不为0时,得到的圆柱面上的线就是螺旋线。考虑最简单的情况,那就是u=v,即在参数空间中是一条斜率k=1的直线。在OpenCASCADE的Draw Test Harness用Tcl脚本测试,Tcl脚本如下所示:

正文到此结束
Loading...