Главная страница

КОМПАС-3D V10 на 100%. Максим Иванович Кидрук компас3d v10 на 100 %


Скачать 13.81 Mb.
НазваниеМаксим Иванович Кидрук компас3d v10 на 100 %
АнкорКОМПАС-3D V10 на 100%.pdf
Дата20.09.2017
Размер13.81 Mb.
Формат файлаpdf
Имя файлаКОМПАС-3D V10 на 100%.pdf
ТипДокументы
#8845
страница44 из 47
1   ...   39   40   41   42   43   44   45   46   47
Для выполнения операции выдавливания пользователь на панели инструментов Редактирование детали нажимает кнопку Операция выдавливания. При этом на панели свойств, которая по умолчанию закреплена в нижней части окна программы, отображаются вкладки с настройками данной операции (некоторые значения установлены по умолчанию), в результате чего пользователь получает возможность изменять эти настройки (рис.
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,
// это значит, что все следующие параметры
// задаются для направления выдавливания dtNormal.
// Если установить значение параметра равным false,
// значит все следующие параметры
// определяются для обратного направления.

// Второй параметр задает способ выдавливания (etBlind);
// третий параметр – величина выдавливания (25 мм);
// четвертый параметр false – уклон вглубь (true – наружу)
// последний параметр – величина уклона в градусах iBossDef.SetSideParam(true, etBlind, 25, false, 10); end; end;
5. На вкладке Тонкая стенка пользователь может управлять параметрами толщины и способа формирования тонкой стенки или установить режим выдавливания сплошного тела (рис. 6.18).
Рис. 6.18.
Выбор режима построения тонкой стенки
В программе это задается следующим образом (листинг 6.5). В примере выполняется операция выдавливания без тонкой стенки.
Листинг 6.5. Задание параметров тонкой стенки
iBossExtrusion := ksEntity(iPart.NewEntity(o3d_bossExtrusion)); if (iBossExtrusion <> nil) then begin iBossDef := ksBossExtrusionDefinition(iBossExtrusion.GetDefinition); if (iBossDef <> nil) then begin iBossDef.directionType := dtNormal; iBossDef.SetSideParam(true, etBlind, 25, false, 10);
// первый параметр false указывает на то,
// надо ли строить тонкую стенку
// второй параметр задает направление выдавливания
// третий и четвертый параметры определяют толщину стенки
// в прямом и обратном направлениях соответственно iBossDef.SetThinParam(false, dtNormal, 0, 0);
// устанавливаем эскиз операции iBossDef.SetSketch(iSketch); end; end;
В этом фрагменте кода также был задан эскиз операции с помощью метода ksBossExtrusіonDefіnіtіon::SetSketch. Мы приняли, что сам эскиз, как и упоминалось ранее, был создан до начала выполнения операции выдавливания.

На вкладке Свойства можно также настроить цвет и оптические свойства создаваемого элемента. При программном построении элемента для этого сначала необходимо инициализировать еще один дополнительный интерфейс – ksColorParam. С помощью его свойств можно управлять визуальными характеристиками трехмерного элемента. Внесенные в функцию построения изменения показаны в листинге 6.6.
Листинг 6.6. Установка визуальных свойств iBossExtrusion := ksEntity(iPart.NewEntity(o3d_bossExtrusion)); if (iBossExtrusion <> nil) then begin
// присваиваем имя трехмерной операции,
// которое будет отображено в дереве построения iBossExtrusion.name := “Программная операция выдавливания”;
// получаем указатель на интерфейс параметров цвета
// и оптических свойств color := ksColorParam(iBossExtrusion.ColorParam);
// с помощью макроса RGB задаем цвет – красный color.color := RGB(255, 0, 0);
// задаем уровень зеркальности (в долях единицы) color.specularity := 0.8;
// и блеск color.shininess := 1; iBossDef := ksBossExtrusionDefinition(iBossExtrusion.GetDefinition);
if (iBossDef <> nil) then begin iBossDef.directionType := dtNormal; iBossDef.SetSideParam(true, etBlind, 25, false, 10); iBossDef.SetThinParam(false, dtNormal, 0, 0); iBossDef.SetSketch(iSketch); end; end;
Теперь все свойства настроены нужным образом, и можно создавать саму трехмерную операцию выдавливания. В КОМПАС для этого необходимо нажать кнопку Создать объект, в программе – вызвать метод
Create объекта интерфейса ksEntity. Окончательный вид функции приведен в листинге 6.7.
Листинг 6.7. Операция выдавливания iBossExtrusion := ksEntity(iPart.NewEntity(o3d_bossExtrusion)); if (iBossExtrusion <> nil) then begin iBossExtrusion.name := “Программная операция выдавливания”; color := ksColorParam(iBossExtrusion.ColorParam); color.color := RGB(255, 0, 0); color.specularity := 0.8; color.shininess := 1; iBossDef := ksBossExtrusionDefinition(iBossExtrusion.GetDefinition);
if (iBossDef <> nil) then begin iBossDef.directionType := dtNormal; iBossDef.SetSideParam(true, etBlind, 25, false, 10); iBossDef.SetThinParam(false, dtNormal, 0, 0); iBossDef.SetSketch(iSketch); iBossExtrusion.Create; // создаем операцию end; end;
Результат проделанной работы, как «вручную», так и с помощью подключаемого модуля, показан на рис.
6.19. Изображенный трехмерный элемент, как вы только что сами убедились, вполне может быть создан без какого-либо вмешательства пользователя, с помощью API КОМПАС.

Рис. 6.19.
Трехмерный элемент, созданный программно
Очевидно, что точно таким же образом вы можете автоматизировать выполнение любой последовательности любых трехмерных формообразующих операций, построение вспомогательной геометрии, формирование массивов и пр., что в результате даст вам готовую трехмерную модель изделия.
Первая библиотека к КОМПАС-3D
Приведенный выше пример, демонстрирующий общий принцип программного выполнения трехмерных операций из внешнего приложения (плагина), вряд ли объяснил, как все-таки создать прикладную библиотеку
для КОМПАС-3D. В этом разделе подробно рассмотрим разработку простейшей библиотеки, выводящей в среде
КОМПАС сообщение «Привет из КОМПАСа!». Структура всех приложений для КОМПАС практически не отличается, поэтому такую библиотеку можно будет в дальнейшем использовать как заготовку для других более сложных утилит.
Прикладная библиотека для КОМПАС-3D представляет собой обычную DLL (Dynamic Link Library – динамически подключаемая библиотека Windows), только с расширением RTW. Такая библиотека подключается к
КОМПАС, как и любая другая, уже известным нам способом: через менеджер библиотек посредством команды контекстного меню Добавить описание → прикладной библиотеки.
Для выполнения примера создайте на жестком диске папку FirstLib, а в ней папку dcu, в которой будут храниться файлы библиотек КОМПАС.
Теперь можно приступить к выполнению проекта.
1. Запустите Delphi и создайте шаблон DLL-библиотеки, который предлагается по умолчанию. Для этого выполните команду File → New → Other. Появится окно New Items (рис. 6.20) со всевозможными шаблонами
Windows-приложений и файлами Delphi (исполняемый EXE-файл, консольное приложение, форма или компонент
Delphi и пр.). На вкладке New этого окна выберите пункт DLL Wizard и нажмите кнопку OK.

Рис. 6.20.
Диалоговое окно New Items
Если вы хорошо знакомы с Delphi, например не раз выполняли в этой среде динамически подключаемые библиотеки, то для вас будет привычным созданный файл-заготовка проекта, начинающийся со служебного слова library. Сохраните его на жесткий диск в папку FirstLib под именем Hello_KOMPAS.dpr.
2. Теперь нужно связать этот файл с библиотеками типов КОМПАС, чтобы можно было пользоваться интерфейсами API. Выполните команду Project → Import Type Library, затем из списка Import Type Library появившегося окна выберите пункт Kompas6API5 (Version 1.0). При этом в текстовом поле под списком должен
отобразиться путь к файлу библиотек типов КОМПАС (например, C:\Program Files\ASCON\KOMPAS-3D
V10\Bin\kAPI5.TLB). Выбрав указанный пункт, нажмите кнопку Create Unit (рис. 6.21).
Рис. 6.21.
Подключение библиотеки типов КОМПАС к Delphi

Примечание
Если в списке Import Type Library нет необходимого пункта, вы можете добавить его вручную, нажав кнопку
Add и отыскав файл kAPI5.TLB (он находится в каталоге Bin папки, в которой установлен КОМПАС).
3. За несколько секунд Delphi сгенерирует PAS-файл с именем Kompas6API5-TLB, который будет иметь описание всех интерфейсов API 5. Измените имя (заголовок) скомпилированного модуля (автоматически добавленного в проект библиотеки), с Kompas6API5-TLB на ksTLB и сохраните проект.
4. Закройте окно, в котором был открыт файл Kompas6API5-TLB.pas, в редакторе кода Delphi и измените имя файла на ksTLB.pas. Сгенерированный файл Kompas6API5-TLB.pas с интерфейсами размещается в каталоге
Imports папки, в которой установлен Delphi, например C:\Program Files\Borland\Delphi7\Imports.
5. Скопируйте переименованный файл в каталог FirstLib\dcu вашего проекта.
6. Перейдите в главное окно проекта. В разделе uses замените следующую строку: Kompas6API5-TLB in
“C:\Program Files\Borland\Delphi7\Imports\Kompas6API5-TLB.pas” на ksTLB. Напомню вам о том, что путь к
Kompas6API5-TLB.pas может быть другим (он зависит от того, где установлен Delphi). Однако это не имеет значения, поскольку запись генерируется системой автоматически при компиляции файла библиотек типов.
Указывать путь к модулю ksTLB, который был скопирован в папку dcu проекта, нет необходимости.
7. При компиляции прикладной библиотеки будут использованы множество различных файлов с описаниями интерфейсов, констант и пр. В принципе, они могут быть размещены где угодно (при этом в разделе uses следовало бы задавать каждый путь явно), но для удобства работы с проектом рекомендую хранить их в папке dcu, где уже находится файл ksTLB.pas. Где бы все эти файлы ни находились, в Delphi необходимо указать путь к ним. Для этого выполните команду Project → Options, после чего на вкладке Directories/Conditionals открывшегося окна настроек проекта (рис. 6.22) задайте пути к файлам проекта:


Output directory – путь, по которому Delphi будет сохранять скомпилированный файл прикладной библиотеки (в нашем примере подойдет каталог FirstLib);

Unit output directory и Search path – полный путь к каталогу FirstLib\dcu. По этим путям система будет искать необходимые файлы библиотек КОМПАСа, а также сохранять скомпилированные DCU-файлы.
Рис. 6.22.
Задание путей к файлам проекта прикладной библиотеки

8. Перейдите на вкладку Application диалогового окна настроек проекта. В поле Target file extension введите расширение, которое будет применяться для файла будущей библиотеки – RTW. Нажмите OK, чтобы сохранить настройки.
Теперь можете сохранить проект и выполнить компиляцию (для этого воспользуйтесь командой Project →
Compile Hello_KOMPAS или сочетанием клавиш Ctrl+F9). В результате в папке FirstLib должна появиться пока еще пустая и бесполезная библиотека, файл которой назван системой Hello_KOMPAS.rtw.
Чтобы RTW-библиотека, написанная на Delphi, могла взаимодействовать с КОМПАС, в ней обязательно должны присутствовать как минимум три функции (для сред программирования на базе языка C или C++ достаточно двух, так как функции LibraryName и LibraryId объединены в одну – unsigned int WINAPI LIBRARYID()):
• LibraryEntry – точка входа в библиотеку;
• LibraryName – возвращает имя библиотеки, отображаемое в менеджере библиотек;
• LibraryId – возвращает идентификатор библиотеки (позже его можно использовать при работе с самой библиотекой, для подключения списка меню ее команд и пр.).
Все эти функции обязательно должны быть экспортными, то есть экспортируемыми из данной DLL, чтобы система КОМПАС могла их видеть и вызывать. По этой причине их обязательно нужно вынести в раздел exports прикладной библиотеки.
Добавьте описание этих функций в вашу библиотеку (листинг 6.8).
Листинг 6.8. Три базовых функции RTW-библиотеки library Hello_KOMPAS; uses
SysUtils, Classes, ksTLB;

{$E rtw}
{$R *.res} function LibraryName: PChar; pascal; begin
Result := “Первая библиотека”; end; function LibraryId: integer; pascal; begin
Result := 100; end; procedure LibraryEntry(command: WORD); pascal; begin end; exports
LibraryName name “LIBRARYNAME”,
LibraryId name “LIBRARYID”,
LibraryEntry name “LIBRARYENTRY”; begin end.
Скомпилируйте полученный код и подключите файл библиотеки к КОМПАС. Убедитесь, что в окне менеджера отобразилось заданное в функции LibraryName имя библиотеки. Запускать приложение не нужно,
поскольку все равно ничего не произойдет – будет вызываться пустая функция точки входа в библиотеку
LibraryEntry.
1   ...   39   40   41   42   43   44   45   46   47


написать администратору сайта