Пример программной реализации трехмерной операции
Пример программной реализации трехмерной операции
Рассмотрим выполнение трехмерной формообразующей операции вручную (то есть в самом КОМПАС) и с помощью воображаемого подключаемого модуля. В качестве примера выберем обычную операцию выдавливания на основе несложного эскиза, содержащего изображение окружности. Раздел 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,
// это значит, что все следующие параметры
// задаются для направления выдавливания 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. Трехмерный элемент, созданный программно
Очевидно, что точно таким же образом вы можете автоматизировать выполнение любой последовательности любых трехмерных формообразующих операций, построение вспомогательной геометрии, формирование массивов и пр., что в результате даст вам готовую трехмерную модель изделия.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
10.1 ВЗАИМОДЕЙСТВИЕ ДРАЙВЕРОВ С ПРОГРАММНОЙ И АППАРАТНОЙ СРЕДОЙ
10.1 ВЗАИМОДЕЙСТВИЕ ДРАЙВЕРОВ С ПРОГРАММНОЙ И АППАРАТНОЙ СРЕДОЙ В системе UNIX имеется два типа устройств — устройства ввода/вывода блоками и устройства неструктурированного или посимвольного ввода-вывода. Как уже говорилось в главе 2, устройства ввода-вывода блоками,
5.1. Основы освещения в трехмерной графике
5.1. Основы освещения в трехмерной графике Правильное освещение значительно усиливает впечатление от простой сцены. Оно не только позволяет лучше передать форму предметов, но и создает общее настроение в сцене. При помощи ярких цветов и обилия света можно получить эффект
Пример 7-5. Операции сравнения
Пример 7-5. Операции сравнения #!/bin/basha=4b=5# Здесь переменные "a" и "b" могут быть как целыми числами, так и строками.# Здесь наблюдается некоторое размывание границ#+ между целочисленными и строковыми переменными,#+ поскольку переменные в Bash не имеют типов.# Bash выполняет
Пример 8-2. Арифметические операции
Пример 8-2. Арифметические операции #!/bin/bash# От 1 до 6 пятью различными способами.n=1; echo -n "$n "let "n = $n + 1" # let "n = n + 1" тоже допустимоecho -n "$n ": $((n = $n + 1))# оператор ":" обязателен, поскольку в противном случае, Bash будет#+ интерпретировать выражение "$((n = $n + 1))" как команду.echo -n "$n "n=$(($n + 1))echo
Пример 10-6. Создание списка аргументов в цикле for с помощью операции подстановки команд
Пример 10-6. Создание списка аргументов в цикле for с помощью операции подстановки команд #!/bin/bash# уЩЫЬ for гЯ [гаЩгЫЯЭ], гЯкФСЮЮйЭ г аЯЭЯниР аЯФгдСЮЯзЫЩ ЫЯЭСЮФ.NUMBERS="9 7 3 8 37.53"for number in `echo $NUMBERS` # for number in 9 7 3 8 37.53do echo -n "$number "doneecho exit 0Более сложный пример использования подстановки
Пример 25-8. Пример реализации алгоритма Решето Эратосфена
Пример 25-8. Пример реализации алгоритма Решето Эратосфена #!/bin/bash# sieve.sh# Решето Эратосфена# Очень старый алгоритм поиска простых чисел.# Этот сценарий выполняется во много раз медленнее# чем аналогичная программа на C.LOWER_LIMIT=1 # Начиная с 1.UPPER_LIMIT=1000 # До 1000.# (Вы можете
5 ФУНКЦИИ ПРОГРАММНОЙ ДОКУМЕНТАЦИИ
5 ФУНКЦИИ ПРОГРАММНОЙ ДОКУМЕНТАЦИИ Для эффективного управления документированием программного обеспечения, важно осознавать различные функции, выполняемые документацией.Программную документацию можно рассматривать как имеющую шесть основных функций:1) информация
5.2.1. Создание трехмерной модели втулки
5.2.1. Создание трехмерной модели втулки Условие. Создать трехмерную модель втулки согласно приведенной иллюстрации (рис. 5.14). Решение.1. Нажмите кнопку Создать на панели Стандартная: В открывшемся окне выберите тип нового документа Деталь (см. рис. 5.2).2. На панели Вид
5.3.1. Создание трехмерной модели опоры
5.3.1. Создание трехмерной модели опоры Условие. Создать трехмерную модель опоры, у которой сделаны сквозные вырезы по нанесенной разметке (рис. 5.23). Решение.1. Нажмите кнопку Создать на панели Стандартная: В открывшемся окне выберите тип нового документа Деталь.2. На
Четыре мира программной разработки
Четыре мира программной разработки Из предшествующей дискуссии следует, что когда мы говорим об ОО-разработке, следует различать четыре отдельных мира:[x]. Моделируемую систему, - внешнюю по отношению к программной системе, описываемую типами объектов и их абстрактными
Интуиция (Дзен) и искусство программной надежности: больше гарантий и меньше проверок
Интуиция (Дзен) и искусство программной надежности: больше гарантий и меньше проверок Возможно, вы не заметили, что контракт противоречит мудрости, бытующей в программной инженерии. Поначалу это шокирует, но контракт - один из главных вкладов в надежность ПО.Правило
Роль инвариантов класса в программной инженерии
Роль инвариантов класса в программной инженерии Свойство (2) правила инвариантов показывает, что неявно их можно рассматривать как добавления к предусловиям и постусловиям каждой экспортируемой программы класса. Посему принципиально понятие инварианта класса
6.1. ПОНЯТИЕ АРХИТЕКТУРЫ ПРОГРАММНОЙ СИСТЕМЫ
6.1. ПОНЯТИЕ АРХИТЕКТУРЫ ПРОГРАММНОЙ СИСТЕМЫ Разработка архитектуры системы — это процесс разбиения большой системы на более мелкие части. Для обозначения этих частей придумано множество названий: программы, компоненты, подсистемы…Процесс разработки архитектуры —