- •Гоувпо «Воронежский государственный технический университет» м.И. Чижов а.Н. Юров
- •Введение
- •1. Создание проектов прикладных библиотек
- •2. Работа с двумерными графическими документами
- •2.1. Функции для работы с графическими документами
- •2.2. Функции построения составных объектов
- •2.3. Функции ввода параметров
- •3. Элементы и функции для проведения вспомогательных построений
- •3.1. Математические функции
- •3.2. Функции вычисления пересечений
- •3.3. Функции вычисления длин, расстояний, углов
- •4. Работа с базами данных
- •5. Примеры проектирования библиотек в 2d
- •5.1. Построение графиков функций
- •5.2. Построение фигур
- •5.3. Построение эскизов
- •6. Работа с твердотельными моделями и объектами
- •6.1. Построение твердотельных деталей посредством операций вращения и выдавливания
- •6.2. Построение фасок и скруглений в твердотельных моделях прикладных библиотек
- •6.3. Построение объектов в цвете
- •6.4. Работа со сборками
- •6.5. Включение в сборочные узлы твердотельных моделей без истории построения
- •6.6. Построение сборочных узлов и компонентов с параметрами посредством диалога
- •Заключение
- •Библиографический список
- •3 94026 Воронеж, Московский просп., 14
4. Работа с базами данных
Базы данных достаточно часто используются для хранения и размещения электронной информации, поиск которой осуществляется посредством запросов со стороны пользователя. Для организации данных в системе Компас 3D определен набор команд, позволяющий реализовать вышеперечисленные задачи. Под базой данных понимается текстовый документ, имеющий расширение .loa. Текстовый документ, содержащий необходимые параметры, можно создать и отредактировать любой программой, входящей в комплект ОС Windows. Файл с простейшей базой данных для Компас 3D имеет следующий вид:
/*Пример
базы данных. x
- координата х объекта y
- координата y объекта r
- радиус окружности x
y r */ 80,
100, 5, 100,
135, 30, 70,
60, 15, 140,
45, 20, 192,
120, 50,
Из примера видно, что файл включает в себя группу цифр, размещенных построчно в несколько рядов. Отдельно взятая строка является взаимосвязанной структурой данных. Так в файле группа из 3 трех цифр позволяет нести информацию о координатах центра окружности с указанием ее радиуса. Базы данных в системе Компас 3D могут иметь более сложную структуру, а одни параметры строки, представленные цифрами, могут находиться в прямой или косвенной зависимости от других. Типичным примером для создания базы данных является номенклатура некоторых крепежных элементов, например винтов, определенных по ГОСТ 1491-80,11738-84.
Для того чтобы начать работу с созданной базой данных необходимо загрузить данные в память или часть информации с базы, если количество параметров превышает размер имеющейся оперативной памяти компьютера, выделенную под операцию чтения. Загрузить базу данных в память возможно посредством указания точного месторасположения данных на диске или на сменном носителе следующим образом:
TCHAR
fileName[]=_T( "./Load/1154 .loa ");
Однако проще организовать для пользователя диалог по загрузке базы данных с произвольного каталога жесткого диска или сменного носителя. Для создания блока заголовка базы данных используется команда CreateDB. Функция позволяет открыть БД. Одновременно может быть открыто несколько БД. Формат команды следующий:
reference CreateDB( char *s ) где,
s-тип базы данных: TXT_DB - база данных текстового формата.
Команда ConnectDB позволяет связать заголовок и базу данных. Формат команды следующий:
int ConnectDB (reference bd, char * dataBaseName) где,
bd- указатель на блок заголовка, созданный при помощи функции CreateDB,
dataBaseName- имя БД (для базы данных, доступной через интерфейс ODBC - имя БД в администраторе ODBC, для базы данных текстового формата - имя файла).
Далее необходимо соотнести поля чтения по колонкам с некоторым указателем путем команды Relation- создать новое отношение. Отношение характеризует один запрос и представляет собой описание памяти, необходимой для размещения очередной записи выборки, выполняемого функцией ReadRecord. Является составным объектом, каждое поле которого описывает тип и имя поля (колонки) в таблице базы данных. Имя действительно только в случае работы с текстовым файлом, так как при обмене через ODBC-интерфейс имена уже описаны в блоке заголовка. Количество отношений, определенных для базы данных, не ограничивается. Формат команды следующий:
reference Relation (reference bd) где,
db- указатель на объект БД.
Для обращения к базе данных применяется команда DoStatement. Синтаксис команды следующий:
int DoStatement (reference bd, reference rel, char * str) где,
bd- указатель на объект БД,
rel- действительный указатель на отношение,
str- запрос к БД.
После обращения к базе данных происходит построчное связывание потока с элементами структуры (struct {}), созданной стандартными средствами языка C. Для нескольких параметров базы данных структура может иметь следующий вид:
struct
{int par1,par2,par3,…, parn ;}datas;
В следующем примере реализована работа по обращению к базе данных.
void
DrawTxtDB() { TCHAR
fileName[255]; //
Диалоговое окно при выборе базы данных
if
( ksChoiceFileT( _T("*.loa"),
_T("Базы
данных( *.loa )|*.loa|Все файлы ( *.*
)|*.*|"),fileName,
255,1))
{
reference
rDataBase = CreateDBT( _T("TXT_DB") ); if
( ConnectDBT( rDataBase, fileName ) ) { reference
rRelation = Relation( rDataBase ); RDoubleT(
_T("x") );
RDoubleT(
_T("y") );
RDoubleT(
_T("") ); EndRelation(); //Колонка
x - 1, y - 2, оставшаяся
колонка
- 3 DoStatementT(
rDataBase, rRelation, _T("1 2 3") ); TCHAR
buf[255]; //Структура
для считывания информации из базы struct
{ //Координаты
объекта
double x, y ;
//Радиус
окружности
double r;
}record; //
Считывание данных из базы int
pointer=1;
int counter =0; while
(pointer ) { //Считать
очередную строку и загрузить в структуру
record
pointer=ReadRecord(
rDataBase, rRelation, &record ); if
( pointer ) { _stprintf(
buf, _T("x=%4.1f,y=%4.1f,r=%4.1f"), record.x, record.y,
record.r ); MessageT(
buf ); Circle(
record.x, record.y, record.r, 1); counter++; } } _stprintf(
buf, _T("База данных прочитана, всего
записей %d"), counter );
MessageT( buf ); } DeleteDB(
rDataBase ); } }
Результат выполнения представлен на рис. ----.
Результат работы с базой данных элементов представлен на рис. 22.
Рис. 22. Последовательное чтение значений с базы данных и отображение окружностей на плоскости |