Работа с геометрической моделью и сеткой конечных элементов осуществляется при помощи объекта Model. Этот объект представляет документ геометрической модели. Для создания нового объекта Model используется метод Add соответствующей коллекции документов.
Dim ELC as ELCUT.Application
......
Dim mdl as ELCUT.Model
set mdl = ELC.Models.Add
Другой способ получения объекта Model , который выглядит более естественным, состоит в использовании одноименного свойства Model объекта Problem. Это свойство возвращает геометрическую модель, ассоциированную с задачей в том случае, если она была предварительно загружена в ELCUT. Загрузка модели соответствует выполнению команды Геометрическая модель в меню Задача или просто двойному щелчку мыши на строке Геометрическая модель в окне задачи при интерактивной работе с ELCUT.
В следующем примере создается пустой объект Model от только что созданной задачи:
Dim prbNew As ELCUT.Problem
Dim mdl As ELCUT.Model
Set prbNew = ELC.Problems.Add
prbNew.LoadModel
Set mdl = prbNew.Model
Открытие существующей модели выполняется аналогично. Мы можем проделать это либо при помощи метода Open коллекции моделей, либо используя свойство Model объекта Problem.
При работе с геометрической моделью используются следующие геометрические примитивы: вершины, ребра и блоки. Объектная модель ELCUT предоставляет отдельные объекты для каждого типа геометрического примитива: Vertex, Edge и Block соответственно. Эти три объекта наследуют свои методы и свойства от базового типа Shape. В некоторых ситуациях оказывается более удобным манипулировать объектом типа Shape, не детализируя его конкретный тип.
Различают два различных типа коллекций геометрических объектов, то есть объектов типа Shape. Один их них - коллекция Shapes. В каждой модели имеется одна и только одна коллекция Shapes, которая содержит все примитивы (вершины, ребра и блоки) в модели. Её можно получить используя свойство Shapes объекта Model. Коллекция Shapes предоставляет методы для создания новых вершин и ребер. Например, следующий фрагмент кода создает квадрат, нижняя левая вершина которого лежит в точке (0, 0), а верхняя правая в точке (1, 1):
|
Dim prb as ELCUT.Problem
|
|
Другой тип коллекции геометрических примитивов - коллекция ShapeRange. Коллекция типа ShapeRange включает в себя те объекты типа Shape, которые надо на время объединить с той или иной целью, например для совершения над ними какой-либо операции. Можно создать несколько коллекций ShapeRange в одно и то же время. Более того, иногда бывает трудно предсказать заранее, с объектом какой природы приходится работать - отдельным Shape или коллекцией нескольких примитивов, объединенных в ShapeRange. Например, метод AddEdge коллекции Shapes возвращает коллекцию типа ShapeRange, которая содержит вновь созданное ребро. Эта коллекция может содержать лишь одно ребро, а может и целый набор примыкающих друг к другу ребер, если вновь созданное ребро пересечется с одним или несколькими уже имеющимися в модели ребрами.
Вообще говоря, в ActiveField геометрическая модель создается путем добавления новых вершин и рёбер таким же способом, как это делается интерактивно при помощи клавиатуры и мыши. Так же как и при работе с мышью, вновь созданные вершины и ребра могут притягиваться к существующим, если расстояние окажется меньше размера ячейки прямоугольной сетки привязки. Можно управлять размером ячейки и прочими аспектами вспомогательной сетки при помощи объекта Grid, который можно получить используя одноименное свойство Grid объекта Model.
Основное различие в приемах работы с геометрической моделью с помощью мыши и программно в рамках ActiveField состоит в том, каким образом указываются и выделяются необходимые для той или иной операции объекты (вершины, ребра и блоки). Работая на экране с мышью, обычно выделяют группу интересующих объектов, а затем проводят с ними операцию. Имея дело с объектами ELCUT, делают то же самое при помощи свойств, возвращающих объект типа ShapeRange, который тем или иным способом соотносится со своим родительским объектом Shape (или ShapeRange).
Среди свойств, возвращающих коллекцию геометрических объектов, можно отметить следующие:
|
Свойство |
Возвращает коллекцию геометрических объектов, которая: |
|
Содержит все объекты родительской коллекции, которые имеют заданный тип (только блоки, только ребра или только вершины соответственно) |
|
|
Содержит ребра, образующие границу родительского блока (блоков). | |
|
Содержит все объекты родительской коллекции, которые целиком помещаются внутри заданного прямоугольника (круга). | |
|
Содержит три объекта (если такие найдутся): один блок, одно ребро и одну вершину, каждый из которых принадлежит родительской коллекции и является ближайшим к указанной точке. | |
|
Содержит все объекты, помеченные указанными метками. | |
|
Содержит все блоки, прилегающие к ребрам из
родительской коллекции слева или справа соответственно. | |
|
Содержит все объекты из родительской коллекции, которым присвоено указанное значение при помощи свойства UserData. |