Similar presentations:
Долговременное хранение данных прикладных библиотек. Операции с фрагментами. Библиотеки фрагментов
1. Долговременное хранение данных прикладных библиотек. Операции с фрагментами. Библиотеки фрагментов
Прикладные программныеинтерфейсы САПР
Долговременное хранение
данных прикладных библиотек.
Операции с фрагментами.
Библиотеки фрагментов
Александр Иванович Сергеев
д-р техн. наук, профессор
2. Рассматриваемые вопросы
1 Операции с фрагментами2 Библиотеки фрагментов
3. 1 Операции с фрагментами
Многие прикладные библиотеки для построения стандартных деталей нуждаются всредствах для долговременного хранения данных об этих деталях. Часто эти
данные можно представить одним из двух способов - в виде готовых изображений,
которые можно непосредственно добавлять в чертежи, либо в виде списка
параметров деталей, которые библиотека будет использовать при программном
рисовании деталей. Готовые изображения удобны в том случае, когда детали
имеют мало разновидностей или вообще их не имеют (например, изображения
микросхем). Подобные изображения можно хранить в отдельных файлах
фрагментов КОМПАС-ГРАФИК. Если фрагментов много, их можно помещать в
библиотеки фрагментов.
4. 1 Операции с фрагментами
У многих стандартных деталей (например, гаек, шайб, винтов и многих других),определяемых ГОСТом, допускается несколько вариантов с различными
размерами, причем получить изображение любого варианта из некоторого
исходного простым масштабированием не удается. Параметры таких деталей (в
основном размеры) можно представить в виде таблиц с числовыми значениями.
Для их хранения удобно использовать текстовые файлы табличной структуры,
которые, хотя и являются некомпактным средством хранения, но допускают
удобное редактирование и быстрое добавление новых вариантов деталей с
помощью простого текстового редактора. Для работы с такими текстовыми
файлами в КОМПАС-МАСТЕР предусмотрены средства для доступа к базам данных.
Эти средства основаны на использовании интерфейса ODBC, являющегося
стандартом для работы с базами данных в ОС Windows. Поэтому описанные в
данной работы приемы могут применяться для доступа к любым базам данных, для
которых в ОС установлены драйверы ODBC1.
1
При установке КОМПАС драйверы ODBC автоматически не устанавливаются, но их можно установить вручную
с дистрибутивного диска, раскрыв самораспаковывающийся архив \Util\Mdac_rus\Mdac_typ. ехе.
5. 1 Операции с фрагментами
Фрагменты и текстовые базы данных часто используются в прикладныхбиблиотеках, распространяемых вместе с КОМПАС. В каталоге прикладных
библиотек КОМПАС (в папке c:\Program Files\ASCON\KOMPAS-3D v19\Libs\ и
вложенных папках) можно обнаружить библиотеки фрагментов (расширение
файлов *.LFR), файлы фрагментов *.FRW и текстовые базы данных *.LOA (их
содержимое можно посмотреть в любом текстовом редакторе, например, в
Блокноте). Применение этих файлов данных для упрощения рисования
стандартных деталей, конечно, определяется программистом конкретной
прикладной библиотеки.
6. 1 Операции с фрагментами
Фрагмент - разновидность графического документа КОМПАС-ГРАФИК. В нем естьтолько один вид и отсутствуют компоненты оформления чертежа (штамп, тех.
требования и др.).
Фрагменты применяются для компоновки чертежа из готовых частей. Чаще всего
эти части рисуются отдельно и сохраняются в файлах фрагментов *.FRW. При
вставке фрагмента в чертеж указываются параметры привязки фрагмента координаты точки привязки, масштаб и угол наклона. Допускается вложенная
вставка фрагментов.
Фрагменты по отношению к чертежу могут быть внешними и локальными. Внешние
фрагменты вставляются из внешних файлов *.FRW. При вставке можно сохранить
связь фрагмента с FRW-файлом, так что изменения в этом файле будут
автоматически отражаться и на листе чертежа, в который вставлен фрагмент. При
таком способе вставки файл чертежа (*.CDW) оказывается связан с файлами
фрагментов (*.FRW), так что при копировании файла чертежа необходимо будет
копировать и файлы фрагментов. Если вставить фрагмент без ссылки, "взятием в
чертеж", то связь с FRW-файлом будет утеряна.
7. 1 Операции с фрагментами
Если типовое изображение требуется использовать только в одном документе, нетнеобходимости сначала создавать файл фрагмента, а потом вставлять его в
документ. Локальный фрагмент можно создавать и хранить непосредственно в
самом документе. При этом работа с ним будет выполняться точно так же, как и с
внешним фрагментом, вставленным способом ’’взять в документ". После создания и
сохранения локального фрагмента в графический документ можно будет добавлять
произвольное количество экземпляров этого фрагмента.
С точки зрения программиста, поведение фрагмента напоминает поведение
группы. Фрагмент можно разрушить и получить доступ к его отдельным
элементам. Среди функций работы с фрагментами есть функции, преобразующие
фрагмент в группу. Различие по сравнению с группой состоит в том, что во
вставленном фрагменте сохраняется связь с источником - внешним файлом
фрагмента или локальным фрагментом, хранящимся в графическом документе.
8. 1 Операции с фрагментами
Если типовое изображение требуется использовать только в одном документе, нетнеобходимости сначала создавать файл фрагмента, а потом вставлять его в
документ. Локальный фрагмент можно создавать и хранить непосредственно в
самом документе. При этом работа с ним будет выполняться точно так же, как и с
внешним фрагментом, вставленным способом ’’взять в документ". После создания и
сохранения локального фрагмента в графический документ можно будет добавлять
произвольное количество экземпляров этого фрагмента.
С точки зрения программиста, поведение фрагмента напоминает поведение
группы. Фрагмент можно разрушить и получить доступ к его отдельным
элементам. Среди функций работы с фрагментами есть функции, преобразующие
фрагмент в группу. Различие по сравнению с группой состоит в том, что во
вставленном фрагменте сохраняется связь с источником - внешним файлом
фрагмента или локальным фрагментом, хранящимся в графическом документе.
9. 1 Операции с фрагментами
Пользователь КОМПАС-ГРАФИК может работать с фрагментами с помощью командменю Вставка/Фрагмент, закладки Параметры Панели свойств, либо с
помощью команды контекстного меню Редактировать. Диалоговое окно
параметров фрагмента позволяет просмотреть и отредактировать свойства
вставленных в документ фрагментов.
Окно, вызванное командой
контекстного меню
Редактировать
Закладка
Параметры на
Панели свойств
10. 1 Операции с фрагментами
При вставке фрагмента указывается точка привязки (координаты началакоординат фрагмента в системе координат листа), масштаб и угол наклона. Эти
значения хранятся в специальной структуре, доступной через структуру
параметров привязки PlacementParam.
При вставке фрагмента масштабирование выполняется не для всех элементов.
Например, текст масштабированию не подвергается, а подчиняется заданному
стилю, в котором определена высота шрифта.
В модели графического документа КОМПАС элементы делятся на два типа геометрические (масштабируемые) и аннотационные (не масштабируемые). К
аннотационным относятся текст, размеры, линии выноски, таблицы, допуска форм.
Они, как правило, подчиняются соответствующим настройкам. Это соответствует
ГОСТ на оформление конструкторской документации.
11. 1 Операции с фрагментами
Таблица 1 - Методы для работы с фрагментамиИмя метода
Назначение
ReadFragment
Вставить фрагмент "россыпью" в документ
ReadFragmentToGroup
Вставить фрагмент "россыпью" во временную
группу
WriteFragment
Записать группу в файл фрагмента
LocalFragmentDefinition
Начать определение локального фрагмента
CloseLocalFragmentDefinition
FragmentDefinition
Закончить определение локального фрагмента
Задать параметры фрагмента для вставки
InsertFragment
Вставить фрагмент в документ
12. 1 Операции с фрагментами
При реализации вставки фрагмента приходится работать с несколькимиразличными объектами КОМПАС-МАСТЕР.
Во-первых, методом FragmentDefinition надо создать ’’определение фрагмента" объект, в котором хранится имя файла фрагмента, имя, которое будет иметь
вставленный фрагмент в документе, и способ вставки фрагмента (0=’’взять в
документ" или 1 –”внешней ссылкой").
Во-вторых, надо задать параметры привязки с помощью интерфейса
PlacementParam.
В-третьих, надо создать элемент "вставка фрагмента" вызовом InsertFragment.
Отсюда следует, что, термины "фрагмент" и "вставка фрагмента" обозначают
различные объекты КОМПАС-МАСТЕР.
Фрагмент – это тип документа, вставка фрагмента - это элемент модели
графического документа (чертежа или фрагмента).
В функции DrawInsFragmentExternal() демонстрируется вставка в лист чертежа
внешней ссылкой фрагмента из файла.
13. 1 Операции с фрагментами
// Вставка внешнего фрагмента// --void DrawInsFragmentExternal()
{
TCHAR file[255];
if (ksChoiceFileT(_T("*.frw"), NULL, file, 255, 1))
{
// Определить данные для вставки фрагмента
reference rDefinitionFragment = FragmentDefinitionT(file,
// Имя
файла фрагмента
_T("Fragment"), // Имя вставки
1);
// Тип вставки ( 0 - взять в документ, 1 - внешней
ссылкой )
PlacementParam parPlacement; // Параметры привязки
parPlacement.xBase = 30; // Координаты базовой точки в системе координат
вида
parPlacement.yBase = 40;
parPlacement.ang = 45; // Угол поворота в системе координат вида
parPlacement.scale = 2; // Масштаб
14. 1 Операции с фрагментами
// Вставить ссылку на фрагментreference rInsertFragment = InsertFragment(rDefinitionFragment, //
Указатель определения фрагмента
0,
// Тип размещения по слоям ( 0 - на свои
слои 1 - в текущий слой )
&parPlacement);
// Параметры привязки
// Подсветить фрагмент
LightObj(rInsertFragment, 1);
MessageT(_T("Снять выделение фрагмента"));
// Снять выделение фрагмента
LightObj(rInsertFragment, 0);
}
}
15. 1 Операции с фрагментами
При вставке локального фрагмента изменяется способ "определения фрагмента".Вместо определения, в котором хранится имя файла, вызовами
LocalFragmentDefinitionT и CloseLocalFragmentDefinition организуется
создание содержимого локального фрагмента.
До вставки в документ локальный фрагмент хранится в памяти КОМПАС, но не
запоминается в чертеже. После вставки локальный фрагмент принадлежит
документу, в который вставлялся.
Параметры привязки и организация вставки фрагмента остаются без изменений,
как и для внешнего фрагмента, что видно в следующей функции
DrawInsFragmentLocal().
16. 1 Операции с фрагментами
// Вставка локального фрагментаvoid DrawInsFragmentLocal()
{
// Определим локальный фрагмент
LocalFragmentDefinitionT(_T("Local")); // Начать определение локального фрагмента
LineSeg(0, 0, 10, 0, 1);
LineSeg(0, 0, 0, 10, 1);
ArcByPoint(0, 0, 10, 10, 0, 0, 10, -1, 1);
// Закончить определение локального фрагмента
// Функция возвращает указатель на определение фрагмента
reference rDefinitionFragment = CloseLocalFragmentDefinition();
PlacementParam parPlacement; // Параметры привязки
parPlacement.xBase = 30; // Координаты базовой точки в системе координат вида
parPlacement.yBase = 40;
parPlacement.ang = 45; // Угол поворота в системе координат вида
parPlacement.scale = 2; // Масштаб
17. 1 Операции с фрагментами
// Вставить ссылку на фрагментreference rInsertFragment = InsertFragment(rDefinitionFragment, // Указатель на
фрагмент
0,
// Тип размещения по слоям ( 0 - на свои слои 1 - в текущий
слой )
&parPlacement);
// Параметры привязки
// Подсветить фрагмент
LightObj(rInsertFragment, 1);
MessageT(_T("Снять выделение фрагмента"));
// Снять выделение фрагмента
LightObj(rInsertFragment, 0);
}
18. 2 Библиотеки фрагментов
Когда фрагментов становится много, управлять большим количеством файловоказывается не слишком удобно. Поэтому в КОМПАС есть возможность работы с
библиотеками фрагментов - специальными файлами (с расширением *.LFR,
*.KLE), внутри которых хранятся иерархически упорядоченные фрагменты.
В комплект поставки КОМПАС входят несколько примеров библиотек фрагментов.
Они хранятся в папке c:\Program Files\ASCON\KOMPAS-3D v19\Libs\ (например,
библиотека элементов электрооборудования Electro.lfr).
Можно вставить несколько фрагментов из этой или других библиотек. Для этого с
помощью команды меню Настройка/Панели нужно активировать закладку
Библиотеки. После этого появится закладка на Панели свойств, из которой
можно вставить библиотечные элементы.
После вставки фрагментов можно убедиться, что они вставлены в документ
Внедрением.
19. 2 Библиотеки фрагментов
В КОМПАС-МАСТЕР программирование операций с фрагментами из библиотекфрагментов незначительно отличается от операций с файловыми фрагментами изменяется только соглашение об именовании фрагмента. При открытии или
записи фрагмента вместо указания имени файла *.FRW надо указывать имя
фрагмента в библиотеке фрагментов. Для этого применяется формат имени, в
котором имя библиотеки фрагментов, имена папок внутри этой библиотеки и имя
фрагмента отделяются вертикальными линиями ’|’. Пример имени фрагмента из
библиотеки фрагментов:
с:\gr\libl.Ifг|детали|литье|фланец
где
c:\gr\libl.lfr- имя файла библиотеки фрагментов;
| детали | литье | - папки внутри библиотеки фрагментов;
фланец - имя фрагмента.
Если выбор фрагмента из библиотеки надо предоставить пользователю, то можно
воспользоваться методом выбора фрагмента из ksChoiceFragmentFromLibT,
который подготовит имя в необходимом формате.
20. 2 Библиотеки фрагментов
Начиная с версии КОМПАС v17 библиотеки получили расширение *.kle исуществующие функции API для программной работы с ними (например,
ksCheckFragmentLibrary, ksFragmentLibrary и другие) не поддерживаются.
Расширения файлов библиотек КОМПАС:
- *.kle — КОМПАС-библиотека элементов,
- *.lfr — КОМПАС-библиотека фрагментов (создавались в КОМПАС-3D версии 16 и
более ранних),
- *.l3d — КОМПАС-библиотека моделей (создавались в КОМПАС-3D версии 16 и
более ранних).
21. 2 Библиотеки фрагментов
Далее приведена функция DrawInsFragmentFromLib(), которая запрашивает упользователя имя библиотеки фрагментов и предоставляет возможность добавить
в текущий графический документ любое количество фрагментов из этой
библиотеки.
Фрагменты можно произвольным образом размещать на листе и поворачивать. Для
этого применяется метод Placement, а в качестве вариантного изображения изображение вставки фрагмента.
Метод ksChoiceFragmentFromLib возвращает имя выбранного фрагмента и код,
обозначающий, что именно было выбрано в окне библиотеки фрагментов - имя
фрагмента (код 3), имя папки (2), корневая папка библиотеки фрагментов (1) или
произошла ошибка (0). Поэтому в DrawInsFragmentFromLib() действия по
вставке фрагмента выполняются только при получении кода 3.
Приведен и более компактный вариант выбора фрагмента.
22. 2 Библиотеки фрагментов
// Функция выбора и простановки в текущий документ фрагмента из библиотки фрагментовvoid DrawInsFragmentFromLib()
{
TCHAR libName[255];
// Выберем библиотеку фрагментов
if (ksChoiceFileT(_T("*.lfr"), // Предопределенный тип файла
// Фильтр поиска ( если не задан, то формируется автоматически
)
_T("Библиотки фрагментов( *.lfr )|*.lfr|Все файлы ( *.* )|*.*|"),
libName, // Результат выбора
255, 0))
// Длина строки выбора
{
TCHAR buf[500];
// Выбрать фрагмент в библиотеке фрагментов
//введем искусственную проверку выбора имени фрагмента
while (true)
{
int res = ksChoiceFragmentFromLibT(libName, buf, 500);
if (res == 0)//если неудача - выход из цикла
break;
else
if (res != 3) //продолжение цикла, пока не будет выбран
23. 2 Библиотеки фрагментов
//более компактный и верный вариант, так как окно библиотеки не даетвозможности
//выбора папок (res == 2)
или
корень библиотеки фрагментов
(res == 1)
//while (ksChoiceFragmentFromLibT(libName, buf, 500))
//{
// Выделим имя вставки
TCHAR * insertName = _tcsrchr(buf, _T('|'));
if (insertName)
{// Подготовим структуры фанома и запросов для Placement
Phantom phantom; // Структура параметров фантома
phantom.phType = 1; // Тип фантома ( type1, type2,
... type7 )
phantom.type1.xBase = 0; // Координаты начальной
точки группы
phantom.type1.yBase = 0;
phantom.type1.scale = 1; // Масштаб
phantom.type1.gr = 0; // Указатель на группу
phantom.type1.ang = 0; // Угол поворота группы
// Определить данные для вставки фрагмента
FragmentDefinitionT(buf,
reference rDefinitionFragment =
// Имя файла фрагмента
24. 2 Библиотеки фрагментов
// Во временную группу положим вставку фрагмента, взятую из библиотеки фрагментовPlacementParam parPlacement; // Параметры привязки
parPlacement.xBase = 0; // Координаты базовой точки в системе координат
вида
parPlacement.yBase = 0;
parPlacement.ang = 0; // Угол поворота в системе
координат вида
parPlacement.scale = 1; // Масштаб
// Создание группы объектов, type - тип группы ( 0 - определяет модельный, 1 - временный )
phantom.type1.gr = NewGroup(1);
// Вставить ссылку на фрагмент
reference rInsertFragment =
InsertFragment(rDefinitionFragment, // Указатель определения фрагмента
0, // Тип размещения по слоям ( 0 - на свои слои 1 - в текущий
слой )
&parPlacement);
// Параметры привязки
EndGroup(); // Завершить создание группы объектов
// Координата вставки
double x = 0, y = 0;
int comm = 1; // Пришедшая команда
25. 2 Библиотеки фрагментов
while (comm){
phantom.type1.ang = 0; // Задание точки, угла или команды
comm = PlacementExT(NULL, // Указатель на структуру параметров запроса к
системе
&x, &y,
// Координаты введенной точки
&phantom.type1.ang, // Введенный угол
определяющую тип
&phantom, NULL);
движения курсора
// Указатель на структуру управления фантомом,
if (comm != 0) // Поставить в модель
CopyObj(rInsertFragment,
// Указатель на графический объект
0, 0,
// Базовая точка объекта
x, y,
// Точка куда копировать
1, phantom.type1.ang); // Масштаб и угол поворота а градусах
MessageT(_T("Вставлен фрагмент из библиотеки"));
}
ClearGroup(phantom.type1.gr); // Очистить группу
объектов
}
else
26. 2 Библиотеки фрагментов
Результат27. Контрольные вопросы
1 Назовите методы для работы со стандартными диалоговыми окнами.2 На какие три группы можно разделить операции ввода данных?
3 Как может выполняться редактирование уже созданной библиотечной
детали?
4 Что такое вариантное изображение?
5 Объясните параметры метода Cursor?
6 Объясните параметры метода Placement?
7 Опишите структуру параметров Requestlnfo?
8 Опишите структуру параметров Phantom?