Чтение онлайн

на главную

Жанры

Шрифт:

Разработка мини-САПР зубчатых колес

Для лучшего усвоения прочитанного материала разработаем мини-САПР, создающую по минимальному количеству исходных данных 3D-модель зубчатого колеса (как прямозубого, так и косозубого). В общих чертах задача такова: после вызова библиотеки пользователем появляется диалоговое окно, в котором он задает модуль, количество зубьев, ширину зубчатого венца, а также угол наклона зубьев колеса. По введенным параметрам, после нажатия кнопки Построение, библиотека должна сгенерировать трехмерную модель колеса.

Выполните заготовку конструкторской библиотеки, как это было описано в предыдущем разделе. Чтобы немного облегчить себе задачу, вы можете воспользоваться готовым шаблоном, для чего скопируйте

все исходные файлы предыдущего примера в новую директорию (назовем ее Gears3D) и сохраните проект под новым именем (Gears3D.dpr). Обязательно отредактируйте пути к файлам библиотек КОМПАС (то есть к папке Gears3D\dcu) в настройках проекта. Измените название библиотеки на Gears miniCAD и оставьте старый идентификатор библиотеки. Скопируйте из папки SDK\Include в каталог Gears3D\dcu еще один файл с описаниями констант, использующимися при инициализации различных интерфейсов, – ksConstTLB.pas. Затем можно, наконец, приступать к выполнению проекта.

Поскольку взаимодействие с пользователем планируется осуществлять с помощью диалогового окна, в проект необходимо добавить диалоговую форму. Для этого выполните команду File -> New -> Form, после чего в инспекторе объектов настройте часть свойств формы (табл. 6.8), оставив остальные заданными по умолчанию.

Таблица 6.8. Настройка свойств формы диалогового окна библиотеки

После создания формы Delphi автоматически сгенерировал модуль (unit) с кодом ее описания. Удалите из этого модуля описание глобальной переменной GearsForm типа TGearsForm и сохраните модуль под именем BuildUnit.pas.

Добавьте на форму по четыре текстовых метки (TLabel) и поля ввода (TEdit), а также две кнопки (TButton). Присвойте им заголовки Построение и Отмена.

Разместите указанные элементы управления приблизительно так, как показано на рис. 6.24.

Рис. 6.24. Форма будущего диалогового окна библиотеки

После создания формы необходимо обеспечить ее вывод в окне КОМПАС. Задача, на первый взгляд, сложная, но решается просто. Для вывода диалогового окна библиотеки нужно сделать следующее.

1. Получить дескриптор главного окна КОМПАС.

2. Запретить доступ пользователю к главному окну программы.

3. Создать объект диалогового окна и вывести его на экран в модальном режиме.

4. После закрытия пользователем окна библиотеки уничтожить окно и вернуть управление главным окном КОМПАС пользователю.

5. Обнулить дескриптор приложения.

Реализовать эту последовательность действий лучше всего в процедуре точки входа в библиотеку (листинг 6.10).

Листинг 6.10. Вывод диалогового окна библиотеки

procedure LibraryEntry(command: WORD); pascal;

var GearsForm : TGearsForm;

begin

kompas := KompasObject(CreateKompasObject);

if (kompas = nil) then exit;

// получаем дескриптор главного окна КОМПАС

Application.Handle := kompas.ksGetHWindow;

// запрещаем доступ к главному окну

kompas.ksEnableTaskAccess(0);

// создаем объект диалогового окна

GearsForm := TGearsForm.Create(Application);

GearsForm.ks := kompas;

// выводим диалог на экран

GearsForm.ShowModal;

// удаляем объект

GearsForm.Free;

// возвращаем доступ к окну

kompas.ksEnableTaskAccess(1);

Application.Handle := 0;

kompas := nil;

end;

В приведенном фрагменте кода есть одна, на первый взгляд, непонятная строка – GearsForm.ks := kompas;. В действительности, здесь все просто. Поскольку обработка построения зубчатого колеса будет выполнена внутри класса формы TGearsForm, то для того, чтобы в нем не получать заново указатель на интерфейс KompasObject, этот указатель передается внешней переменной ks класса TGearsForm. Разумеется, эту переменную (типа KompasObject) необходимо предварительно добавить в раздел public описания класса формы. Перед этим подключите в разделе uses модуля BuildUnit следующие файлы (модули): ksTLB, ksAuto, ksConstTLB, LDefin3D, LDefin2D и math (последний не относится к КОМПАС API, это стандартный модуль математических функций Delphi).

Скомпилируйте проект и подключите полученную библиотеку Gears3D.rtw к КОМПАС. Запустите ее и убедитесь, что после выполнения ее единственной команды в центре главного окна появляется созданное нами диалоговое окно.

Перейдем к реализации обработчиков щелчка на кнопках. Начнем со второй (Отмена), поскольку ее обработчик чрезвычайно прост. Щелкните дважды в редакторе форм на кнопке Отмена и в обработчике, автоматически созданном в редакторе кода, введите всего одну строку, закрывающую форму (листинг 6.11).

Листинг 6.11. Обработчик щелчка на кнопке Отмена

procedure TGearsForm.Button2Click(Sender: TObject);

begin

if CloseQuery then Close;

end;

Процедура обработки нажатия кнопки Построение намного сложнее. Условно ее можно разделить на три части.

1. Расчет геометрических параметров зубчатого колеса по введенным исходным данным.

2. Создание пустого документа КОМПАС-Деталь.

3. Собственно построение модели зубчатого колеса.

Программное построение модели колеса реализуем такой последовательностью трехмерных операций.

1. Сначала программно в плоскости XOY создается эскиз, содержащий контур половины сечения колеса (такой же, какой мы выполняли при моделировании вручную в гл. 3). На основании этого эскиза выполняется операция вращения, формирующая заготовку зубчатого колеса.

2. Далее в плоскости YOZ строится второй эскиз с четырьмя окружностями, над которыми выполняется операция вырезания в два направления. Таким образом, мы получим отверстия в диске.

3. Следующим шагом является выполнение выреза между зубьями в венце колеса. Для построения выреза воспользуемся первым из способов, предложенных в гл. 3. Напомню, этот способ заключается в построении выреза с помощью операции Вырезать по сечениям. При этом в модели колеса строится ряд эскизов-сечений, плоскости которых удалены от боковой поверхности колеса на величину l = i · b / (nс – 1) (где b ширина колеса, nс – количество сечений или эскизов, i – порядковый номер эскиза). Для нашей библиотеки достаточно будет трех эскизов: по два на торцевых плоскостях колеса и один посредине – на плоскости YOZ. Это значит, что библиотека должна будет построить две вспомогательные плоскости, удаленные в обе стороны от плоскости YOZ на половину ширины венца зубчатого колеса. В каждой из трех плоскостей (двух вспомогательных и ортогональной YOZ) будет создано изображение эскиза выреза между зубьями, повернутое относительно вертикальной оси на угол = 2 · l · tg / dк, где – угол наклона линии зуба, dк – делительный диаметр зубчатого колеса (обоснование этой зависимости приведено в гл. 3). Для первой плоскости вместо l необходимо подставить 0, для второй (YOZ) – b/2, для третьей – b.

Поделиться:
Популярные книги

Я – Орк. Том 4

Лисицин Евгений
4. Я — Орк
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я – Орк. Том 4

Идеальный мир для Лекаря 7

Сапфир Олег
7. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 7

Довлатов. Сонный лекарь 2

Голд Джон
2. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь 2

Внешники такие разные

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Внешники такие разные

Попала, или Кто кого

Юнина Наталья
Любовные романы:
современные любовные романы
5.88
рейтинг книги
Попала, или Кто кого

Барон устанавливает правила

Ренгач Евгений
6. Закон сильного
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Барон устанавливает правила

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

Секси дед или Ищу свою бабулю

Юнина Наталья
Любовные романы:
современные любовные романы
7.33
рейтинг книги
Секси дед или Ищу свою бабулю

Авиатор: назад в СССР 11

Дорин Михаил
11. Покоряя небо
Фантастика:
альтернативная история
5.00
рейтинг книги
Авиатор: назад в СССР 11

Измена. Он все еще любит!

Скай Рин
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Измена. Он все еще любит!

Ваше Сиятельство 4т

Моури Эрли
4. Ваше Сиятельство
Любовные романы:
эро литература
5.00
рейтинг книги
Ваше Сиятельство 4т

Титан империи 7

Артемов Александр Александрович
7. Титан Империи
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Титан империи 7

Мимик нового Мира 5

Северный Лис
4. Мимик!
Фантастика:
юмористическая фантастика
постапокалипсис
рпг
5.00
рейтинг книги
Мимик нового Мира 5