- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания КОМПАС-3D V10 на 100 % - Максим Кидрук
Шрифт:
Интервал:
Закладка:
Таким образом, создание какой-либо трехмерной операции пользовательской программой сводится к такой последовательности шагов.
1. Инициализация главного интерфейса приложения API – KompasObject. Он инициализируется один раз для всего сеанса работы программы.
2. Инициализация интерфейса трехмерного документ ksDocument3D, с последующим созданием нового документа или получением указателя на активный документ.
3. Создание компонента и получение на него указателя (интерфейс ksPart). Для сборки это может быть готовый компонент, компонент, вставленный из файла или созданный «на месте». Для детали необходимо получить указатель на компонент типа pTop_Part.
4. Создание с помощью метода ksPart::NewEntity интерфейса нужной нам операции. При этом в метод передается соответствующий идентификатор (например, для выдавливания – o3d_bossExtrusion).
5. Получение с помощью метода ksEntity::GetDefinition указателя на интерфейс параметров конкретной операции (для выдавливания этим интерфейсом является ksBossExtrusionDefinition). Настройка этих параметров необходимым пользователю образом.
6. Создание операции с помощью метода ksEntity::Create.
Кроме перечисленных, в API системы КОМПАС существует еще большое множество различных интерфейсов, отвечающих за тот или иной аспект работы с программой. Небольшая их часть описана в табл. 6.7.
Таблица 6.7. Некоторые дополнительные интерфейсы API КОМПАСПример программной реализации трехмерной операции
Рассмотрим выполнение трехмерной формообразующей операции вручную (то есть в самом КОМПАС) и с помощью воображаемого подключаемого модуля. В качестве примера выберем обычную операцию выдавливания на основе несложного эскиза, содержащего изображение окружности. Раздел var функции, реализующей выполнение операции, должен выглядеть подобно листингу 6.1.
Листинг 6.1. Раздел объявлений функции построения операции выдавливанияvar
doc3 : ksDocument3D;
// интерфейс трехмерного документа
doc2 : ksDocument2D;
// интерфейс графического документа
// используется для создания изображения в эскизе
iPart : ksPart;
// интерфейс детали
planeXOY : ksEntity;
// интерфейс плоскости, на которой будет размещен эскиз
iSketch : ksEntity;
// интерфейс эскиза
iSketchDef : ksSketchDefinition;
// интерфейс параметров эскиза
iBossExtrusion : ksEntity;
// интерфейс операции выдавливания
iBossDef : ksCutExtrusionDefinition;
// интерфейс параметров операции выдавливания
color : ksColorParam;
// интерфейс параметров цвета операции выдавливания
Предположим, что документ-деталь и эскиз с окружностью радиусом 40 мм на плоскости XY уже созданы (это значит, что объекты doc3, doc2, planeXOY, iSketch, iSketchDef уже созданы и проинициализированы).
Для выполнения операции выдавливания пользователь на панели инструментов Редактирование детали нажимает кнопку Операция выдавливания. При этом на панели свойств, которая по умолчанию закреплена в нижней части окна программы, отображаются вкладки с настройками данной операции (некоторые значения установлены по умолчанию), в результате чего пользователь получает возможность изменять эти настройки (рис. 6.15).
Рис. 6.15. Настройки операции выдавливания на панели свойств
Программно это все реализуется следующим образом (листинг 6.2).
Листинг 6.2. Получение интерфейсов операции выдавливания и ее параметров// iPart – указатель на объект класса ksPart,
// верхний элемент дерева построения детали
// создание интерфейса операции выдавливания
// с помощью метода ksPart::NewEntity,
// которому передаем идентификатор o3d_bossExtrusion
iBossExtrusion := ksEntity(iPart.NewEntity(o3d_bossExtrusion));
if (iBossExtrusion <> nil) then
begin
// если создание прошло успешно
// инициализируем интерфейс настроек операции выдавливания
iBossDef := ksBossExtrusionDefinition(iBossExtrusion.GetDefinition);
if (iBossDef <> nil) then
begin
end;
end;
Несколько замечаний. Данный фрагмент кода будет работать лишь в версиях КОМПАС-3D V8 Plus или выше, поскольку в этих версиях появилась возможность многотельного моделирования. При написании программ для более ранних версий КОМПАС, в качестве первой (подчеркиваю – лишь первой) операции выдавливания вместо константы типа o3d_bossExtrusіon следует использовать o3d_baseExtrusіon, то есть базовую операцию выдавливания (так как в КОМПАС-3D V8 и более ранних версиях в детали могло быть лишь одно тело, имеющее общую базовую формообразующую операцию). Для всех следующих операций нужно применять o3d_bossExtrusіon, как и в КОМПАС-3D V8 Plus и более поздних версиях. Еще одно отличие версии КОМПАС-3D V8 Plus от предыдущих состоит в названии класса для получения определения интерфейса (параметров операции). При многотельном моделировании можно сразу использовать ksBossExtrusіonDefіnіtіon, в более ранних версиях КОМПАС первым всегда должен применяться интерфейс ksBaseExtrusіonDefіnіtіon, а все следующие за ним – ksBossExtrusіonDefіnіtіon. Это, тем не менее, не приводит к серьезным усложнениям, так как методы и свойства этих двух классов идентичны.
Все сказанное касается и других формообразующих операций (за исключением вырезания, которое по определению не может быть базовой операцией). Из чего следует, что в более ранних версиях КОМПАС и для кинематической операции, и для операции по сечениям первой всегда следует реализовать базовую операцию.
Совет
Даже если вы создаете плагин для версии КОМПАС-3D V8 Plus или выше, все равно желательно не забывать о первой операции, как о базовой. Мало ли в какой версии КОМПАС будут работать пользователи с вашей программой.
Теперь рассмотрим параметры операции выдавливания и способы их настройки.
1. Направление выдавливания в КОМПАС выбирается из раскрывающегося списка Направление на панели свойств (рис. 6.16).
Рис. 6.16. Выбор направления операции выдавливания
Программным аналогом направления является свойство directionType (тип – SmallInt) интерфейса ksBossExtrusіonDefіnіtіon (или ksBaseExtrusіonDefіnіtіon). Для него предопределены четыре значения:
• dtNormal (прямое направление) – направление добавления материала совпадает с направлением нормали к базовой плоскости (то есть плоскости, в которой размещается эскиз выдавливания);
• dtReverse (обратное направление) – направление выдавливания противоположно направлению нормали;
• dtBoth (в оба направления) – величина выдавливания задается отдельно для каждого направления;
• dtMіddlePlane (средняя плоскость) – выдавливание происходит в обе стороны от базовой плоскости на одинаковое расстояние, равное половине от указанной пользователем величины выдавливания.
Направление выдавливания устанавливается очень просто (листинг 6.3).
Листинг 6.3. Задание направления выдавливанияiBossExtrusion := ksEntity(iPart.NewEntity(o3d_bossExtrusion));
if (iBossExtrusion <> nil) then
begin
iBossDef := ksBossExtrusionDefinition(iBossExtrusion.GetDefinition);
if (iBossDef <> nil) then
begin
// задаем направление выдавливания
iBossDef.directionType := dtNormal;
end;
end;
2. Способ выдавливания (рис. 6.17).
Рис. 6.17. Выбор способа выдавливания
Для этого типа настроек в API системы также предусмотрены константы:
• etBlіnd (на расстояние) – проводит выдавливание на величину, заданную в поле Расстояние 1 (или Расстояние 2, если задано направление dtReverse или dtBoth);
• etThroughAll (через все) – при наличии другой геометрии (других формообразующих операций) выдавливание происходит через все тело детали; значение величины выдавливания игнорируется;
• etUpToVertexTo, etUpToVertexFrom (до вершины) – система переходит в режим ожидания указания пользователем вершины, до которой будет осуществлено выдавливание. Введенное значение величины выдавливания игнорируется. В программе эту вершину следует задать явно еще на этапе разработки проекта;
• etUpToSurfaceTo, etUpToSurfaceFrom (до поверхности) – аналогично режиму построения до вершины, в данном режиме система ожидает выбора пользователем трехмерной поверхности. Значение величины выдавливания также игнорируется. Как и для вершины, плоскость в программе следует указывать явно;
• etUpToNearSurface (к ближайшей поверхности) – выдавливание проводится к ближайшей поверхности, которую система автоматически определяет в направлении выдавливания.
3. Расстояние выдавливания – вводится пользователем в соответствующем текстовом поле (полях).
4. Угол наклона операции выдавливания. На панели свойств задается направление наклона (внутрь или наружу), а также сам угол наклона.
Параметры операции, описанные в пп. 2–4, устанавливаются с помощью единого метода интерфейса ksBossExtrusіonDefіnіtіon::SetSideParam (листинг 6.4).
Листинг 6.4. Задание способа, величины выдавливания, а также угла наклонаiBossExtrusion := ksEntity(iPart.NewEntity(o3d_bossExtrusion));
if (iBossExtrusion <> nil) then
begin
iBossDef := ksBossExtrusionDefinition(iBossExtrusion.GetDefinition);
if (iBossDef <> nil) then
begin
iBossDef.directionType := dtNormal;
// Если первый параметр имеет значение true,
// это значит, что все следующие параметры