Конструкция винтовой зубчатой ​​передачи: профиль качения с вращением (поворот)

Цель состоит в том, чтобы произвести так называемое винтовое зубчатое колесо

как показано на рисунке ниже:

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

Я завершил генерацию профиля (TopoDS_Wire -> TopoDS_Face с помощью BRepBuilderAPI_MakeFace) — лицо на верхней части изображенного механизма.

Я думаю, что задача состоит в том, чтобы линейно проведите поверхность / проволоку вдоль оси зубчатой ​​передачи, проходящей через отверстие в середине, поворачивая поверхность на постоянный угол, определяющий угол наклона спирали, пока не будет достигнута желаемая высота зубчатой ​​передачи

Я думал об использовании GeomFill_Pipe или же BRepOffsetAPI_MakePipeShell но я понятия не имею, как его использовать …

Не могли бы вы взглянуть и поделиться какими-нибудь идеями / фрагментами кода, которые могут помочь мне или, по крайней мере, подтолкнуть меня в правильном направлении для расследования?

Большое спасибо всем, кто хочет мне помочь …

0

Решение

К сожалению, никто не ответил, пока я не нашел решение самостоятельно. Вот как это может помочь кому-то, кто сталкивается с той же проблемой однажды …

Описание алгоритма:

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

Ширина обода зубчатого колеса делится на несколько шагов (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() );
}

Реализация, приведенная выше, не работает автономно, но протестирована в моем приложении и доказала свою работоспособность. Это может помочь любому, кто ищет принцип построения формы винтовой зубчатой ​​передачи … Смотрите результат на скриншоте:

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

Надеюсь, это кому-нибудь поможет. Ура Мартин

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]