d_ak := d_k+2*module; // диаметр выступов
d_fk := d_k-2.5*module; // диаметр впадин
// диаметр размещения центров отверстий в диске
Dotv := (d_fk – 2*delta0 + Dm)/2;
// создание детали...
// построение модели...
Close; // закрываем форму
end;
Если сейчас собрать приложение и попробовать запустить библиотеку, ничего происходить не будет, потому что пока ничего не создается и не строится.
Следующий этап построения намного более интересен – он заключается в программном создании документа КОМПАС-Деталь (листинг 6.13). В данном листинге раздел описания переменных и расчет параметров колеса пропущен, а приведен только фрагмент кода, реализующий создание документа-детали. В процедуру построения (обработчик нажатия кнопки Построение) этот фрагмент должен быть вставлен сразу после расчетов.
// получаем указатель на интерфейс трехмерного документа
doc3 := ksDocument3D(ks.Document3D());
// создаем документ
// параметр false – в видимом режиме
// параметр true – документ-деталь
if doc3.Create(false, true) then
begin
// заполняем параметры документа
doc3.author := “Максим Кидрук”;
doc3.comment := “Зубчатое колесо”;
doc3.drawMode := 3;
doc3.perspective := true;
doc3.UpdateDocumentParam();
end else exit;
// проверяем, как прошла инициализация
if (doc3 = nil) then
begin
ks.ksMessage(“Не удалось создать документ!”);
exit;
end;
Откомпилировав и запустив приложение, вы сможете наблюдать, как после закрытия диалогового окна (нажатия кнопки Построение) программа сама создаст пустой документ КОМПАС- Деталь.
В листинге 6.14 приведен с небольшими сокращениями код построения трехмерной модели. Недостающие фрагменты кода вы можете взять из файла ExamplesГлава 6Delphi ProgrammingGears3D BuildUnit.pas на диске. Фрагмент кода содержит достаточно подробные комментарии, поэтому, полагаю, разобраться в нем будет несложно.
// получаем указатель на интерфейс детали
iPart := ksPart(doc3.GetPart(pNew_Part));
if (iPart <> nil) then
begin
// интерфейсы ортогональных плоскостей
PlaneXOY := ksEntity(iPart.GetDefaultEntity(o3d_planeXOY));
PlaneXOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeXOZ));
PlaneYOZ := ksEntity(iPart.GetDefaultEntity(o3d_planeYOZ));
// интерфейс эскиза (половина контура сечения колеса)
iSketchEntity := ksEntity(iPart.NewEntity(o3d_sketch));
if (iSketchEntity <> nil) then
begin
// интерфейс параметров эскиза
iSketchDef := ksSketchDefinition(iSketchEntity.GetDefinition);
if (iSketchDef <> nil) then
begin
if (PlaneXOY <> nil) then
begin
// устанавливаем плоскость,
// на которой создается эскиз
iSketchDef.SetPlane(PlaneXOY);
iSketchEntity.Create;
// запускаем процесс редактирования эскиза
// doc – указатель на интерфейс ksDocument2D
doc := ksDocument2D(iSketchDef.BeginEdit);
if (doc <> nil) then
begin
// вычерчиваем изображение эскиза
// с помощью методов интерфейса ksDocument2D
// код пропущен
end;
// завершение редактирования эскиза
iSketchDef.EndEdit;
end;
end;
end;
// интерфейс базовой операции вращения
iBaseRotatedEntity := ksEntity(iPart.NewEntity(o3d_baseRotated));
// интерфейс параметров цвета и визуальных свойств
Color := ksColorParam(iBaseRotatedEntity.ColorParam);
Color.specularity := 0.8;
Color.shininess := 1;
if (iBaseRotatedEntity <> nil) then
begin
// интерфейс параметров вращения
iBaseRotatedDef :=
ksBaseRotatedDefinition(iBaseRotatedEntity.GetDefinition);
if (iBaseRotatedDef <> nil) then
begin
// настройка параметров вращения
iBaseRotatedDef.SetThinParam(false, dtNormal, 1, 1);
iBaseRotatedDef.SetSideParam(true, 360);
iBaseRotatedDef.toroidShapeType := false;
iBaseRotatedDef.SetSketch(iSketchEntity);
// создаем операцию вращения