begin
// строим на плоскости YOZ
iSketch3Def.SetPlane(PlaneYOZ);
iSketch3Entity.Create;
doc := ksDocument2D(iSketch3Def.BeginEdit);
alfa2 := -RadToDeg(b_k*tan(DegToRad(beta))/d_k);
doc.ksMtr(0, 0, 90, 1, 1);
// вычерчивание изображения эскиза
// вместо эвольвент для простоты
// берем обычные дуги по трем точкам
// код пропущен
doc.ksDeleteMtr;
iSketch3Def.EndEdit;
end;
end;
// вторая смещенная плоскость
iOffsetPlane1Entity := ksEntity(iPart.NewEntity(o3d_planeOffset));
if (iOffsetPlane1Entity <> nil) then
begin
iOffsetPlane1Def :=
ksPlaneOffsetDefinition(iOffsetPlane1Entity.GetDefinition);
if (iOffsetPlane1Def <> nil) then
begin
// величина смещения та же
iOffsetPlane1Def.Offset := b_k/2;
// направление противоположное
iOffsetPlane1Def.direction := true;
iOffsetPlane1Def.SetPlane(PlaneYOZ);
// делаем плоскость скрытой
iOffsetPlane1Entity.Hidden := true;
// создаем смещенную плоскость
iOffsetPlane1Entity.Create;
end;
end;
// третий (последний) эскиз выреза между зубьями
iSketch4Entity := ksEntity(iPart.NewEntity(o3d_sketch));
if (iSketch4Entity <> nil) then
begin
iSketch4Def := ksSketchDefinition(iSketch4Entity.GetDefinition);
if (iSketch4Def <> nil) then
begin
// базовая плоскость – только что созданная смещенная
iSketch4Def.SetPlane(iOffsetPlane1Entity);
iSketch4Entity.Create;
doc := ksDocument2D(iSketch4Def.BeginEdit);
alfa2 := -RadToDeg(2*b_k*tan(DegToRad(beta))/d_k);
doc.ksMtr(0, 0, 90, 1, 1);
// вычерчивание изображения эскиза
// вместо эвольвент для простоты
// берем обычные дуги по трем точкам
// код пропущен
doc.ksDeleteMtr;
iSketch4Def.EndEdit;
end;
end;
// интерфейс операции Вырезать по сечениям
iCutLoftEntity := ksEntity(iPart.NewEntity(o3d_cutLoft));
if (iCutLoftEntity <> nil) then
begin
// интерфейс параметров операции по сечениям
iCutLoftDef := ksCutLoftDefinition(iCutLoftEntity.GetDefinition);
if (iCutLoftDef <> nil) then
begin
// интерфейс массива ksEntityCollection
// коллекции эскизов для вырезания по сечениям
Collect := ksEntityCollection(iCutLoftDef.Sketchs);
// добавляем эскизы в колекцию
Collect.Add(iSketch2Entity);
Collect.Add(iSketch3Entity);
Collect.Add(iSketch4Entity);
// создаем операцию по сечениям
// результат – первый вырез между зубьями в венце колеса
iCutLoftEntity.Create;
end;
end;
// интерфейс вспомогательной оси на пересечении двух плоскостей
iAxis := ksEntity(iPart.NewEntity(o3d_axis2Planes));
if (iAxis <> nil) then
begin
// интерфейс параметров вспомогательной оси
// на пересечении плоскостей
iAxis2PlDef := ksAxis2PlanesDefinition(iAxis.GetDefinition);
if (iAxis2PlDef <> nil) then
begin
// задаем плоскости
iAxis2PlDef.SetPlane(1, PlaneXOZ);
iAxis2PlDef.SetPlane(2, PlaneXOY);
// делаем ось невидимой
iAxis.hidden := true;
// создаем вспомогательную ось
iAxis.Create;
end;
end;
// интерфейс операции Массив по концентрической сетке
iCircularCopy := ksEntity(iPart.NewEntity(o3d_circularCopy));
if (iCircularCopy <> nil) then
begin
// интерфейс параметров операции копирования по массиву
iCirCopyDef :=