目的是生产一种所谓的斜齿轮
如下图所示:
我已经完成了配置文件的生成(使用TopoDS_Wire
的TopoDS_Face
-> BRepBuilderAPI_MakeFace
)-所示齿轮顶部的面。
我认为任务是沿着穿过中间钻孔的齿轮轴线性扫掠面/线,同时将面旋转恒定角度以定义螺旋角,直到达到所需的齿轮高度为止。
我考虑过使用GeomFill_Pipe
或BRepOffsetAPI_MakePipeShell
,但我不知道如何使用...
您能否看一下并分享任何想法或代码片段,它们可能对我有帮助,或者至少可以将我踢向正确的方向进行调查?
非常感谢任何愿意帮助我的人。
最佳答案
不幸的是,直到我自己找到解决方案之前,没人回答。这是因为它有可能帮助有一天其他人面临同样的问题...
算法说明:
齿轮轮辋宽度分为几个步骤(nSteps
)。对于每个步骤,使用以下公式计算所需的旋转角度和平移:
rotation_angle = atan( b_TranslationStep * CONST_FACTOR )
哪里
b_TranslationStep
是轮辋宽度,对应于计算出的台阶,CONST_FACTOR = 2 * tan( beta ) / d_a
哪里
beta
是斜齿轮螺旋角d_a
是外圆直径使用应用于轮辋轮廓的旋转和平移变换,可以创建定义轮辋形状的截面线。完成后,
BRepOffsetAPI_ThruSections
使用截面线生成最终的斜齿轮原始轮辋形状。齿轮轮廓面在XY平面中构造,而齿轮的轴与Z轴对齐。 GearProfile是以前构造的,是“包含”所有齿的闭合线。
实现方式:
/* TopoDS_Wire GearProfile is constructed previously - out of the question scope */
TopoDS_Shape HelicalGearRim( const TopoDS_Wire & GearProfile )
{
double ToothFaceWidth = 10e-3; /* 10mm */
double HelixAngle = 0.349; /* [rad] --> 20deg */
double OutsideDiameter = 42e-3; /* 42mm */
int nSteps = 10;
/* Make solid with the faces interpolated */
BRepOffsetAPI_ThruSections tShapeGen( Standard_True, Standard_False );
/* Instantiate rim profile transformations */
gp_Trsf RimProfileRotation;
gp_Trsf RimProfileTranslation;
/* Initially add the first section wire - the original rim profile */
tShapeGen.AddWire( RimProfile );
/* Calculate translation step equal to tooth face width divided by required number of steps */
const double TranslationStep = ToothFaceWidth / nSteps;
/* Constant part of rotation angle calculation is referred as factor */
const double Factor = 2.0 * std::tan( HelixAngle ) / OutsideDiameter;
/* Calculate rotation angle and translation for each step */
for( int i = 1; i <= nSteps; i++ )
{
/* Setup rotation for current step */
RimProfileRotation.SetRotation( gp::OZ(), std::atan( i * TranslationStep * Factor ) );
/* Setup translation for current step */
RimProfileTranslation.SetTranslation( gp_Vec( 0.0, 0.0, ( i * TranslationStep ) ) );
/* Apply the transformations */
BRepBuilderAPI_Transform RotationTransformer( RimProfile, RimProfileRotation );
BRepBuilderAPI_Transform TranslationTransformer( RotationTransformer.Shape(), RimProfileTranslation );
/* Add generated wire of current step section */
tShapeGen.AddWire( TopoDS::Wire( TranslationTransformer.Shape() ) );
}
/* Generate the shape out of the section wires created previously */
return( tShapeGen.Shape() );
}
上面的实现不是可独立运行的,但已在我的应用中经过测试并证明可以正常工作。它可能对寻求原理的人有所帮助,如何构造斜齿轮形状...请参见屏幕截图上的结果:
希望这对某人有帮助。干杯马丁
关于c++ - 斜齿轮构造:旋转旋转轮廓(扭曲),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39405857/