Files
kompas3d-mcp/docs/Kompas3D_SDK/guides/func.md
T
mikhail e1337e4016 feat(sdk-docs): MD-база знаний SDK — в репозиторий; генератор и зеркало убраны
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK
и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало
docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор
tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается.

- .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным
  (safety-net на случай повторной локальной выгрузки).
- CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 20:00:05 +03:00

6.6 KiB

title, type, api, tags, sources
title type api tags sources
Пример использования функций работы с базами данных guide
api7
guide
api7
func
func_rab_s_bases_example.html

Пример использования функций работы с базами данных

//пример текстового файла 1.loa с тремя параметрами - шириной, высотой и типом линии прямоугольника /* 10.0 100 1 15.0 80 2 20.0 120 1 */ #ifndef __LIBTOOL_H #include <libtool.h> #endif #ifndef __LIBDB_H #include <libdb.h> #endif static void ReadFirstStatement(reference bd, reference r1, void b) { // вспомогательная функция чтения записей char buf[40]; int i; do { // считываем все записи выборки i= ReadRecord(bd, r1, b); if (i) { sprintf(buf, "a=%4.1f b=%4.1f t= %d", b->a, b->b, b->t); Message(buf); } } while(i); Message("конец выборки"); } / ReadFirstStatement / void ExampleDB (void) { int i; char buf[40]; struct { double a; double b; int t; } b; // создать блок заголовка базы данных reference bd = CreateDB ("TXT_DB"); // связать с файлом базы данных 1.loa ConnectDB(bd, "1.loa"); // задаем отношение из двух действительных и одного целого поля reference r1 = Relation(bd); RDouble ("a"); RDouble ("b"); RInt (""); EndRelation(); // определяем запрос для считывания всех полей(колонок) записи DoStatement(bd, r1, ""); // равносильно DoStatement(bd, r1, "1 2 3"); // cчитываем все записи ReadFirstStatement(bd, r1, &b); // выдать вторую запись Condition(bd, r1, "Index1000 = 2"); ReadFirstStatement(bd, r1, &b); // по условию выдать первую и третью запись(см. файл 1.loa) Condition(bd, r1, "a=10 || b>100"); ReadFirstStatement(bd, r1, &b); //задаем отношение для считывания только второго поля записи reference r2 = Relation(bd); RChar("b", 20, 0); EndRelation(); // Освободить запрос базы данных FreeStatement(bd, r1, «»); DoStatement(bd, r2, "2"); do { i= ReadRecord(bd, r2, buf); if (i) { Message(buf); } } while(i); Message("конец выборки"); DisconnectDB(db); // удаляем блок заголовка базы данных DeleteDB(bd); }; / ExampleDB */

Пример использования функций работы с фрагментами

void ReadFragment_Example (void) { PlacementParam par; par.xBase = 30; par.yBase = 40; par.ang = 0; par.scale = 1 ; ReadFragment("c:\kompas5\1.frw", 0, &par); //Пример вставки фрагмента внешней ссылкой //определим фрагмент для вставки pDefFrg = FragmentDefinition("c:\kompas5\1.frw", "frw1", 1); if(pDefFrg) { PlacementParam par; par.xBase = 80; par.yBase = 70; par.ang = 45; par.scale = 2 ; reference pInsFrg = InsertFragment(pDefFrg, 0, &par); LightObj (pInsFrg, 1); Message("вставка фрагмента внешней ссылкой"); LightObj (pInsFrg, 0); } // Пример вставки локального фрагмента // определим фрагмент для вставки reference pDefFrg = 0; //определим локальный фрагмент if(LocalFragmentDefinition("local")) { LineSeg(0, 0, 10, 0, 1); LineSeg(0, 0, 0, 10, 1); ArcByPoint(0, 0, 10, 10, 0, 0,10, -1, 1); pDefFrg = CloseLocalFragmentDefinition(); } if(pDefFrg) { PlacementParam par; par.xBase = 100; par.yBase = 40; par.ang = 45; par.scale = 1 ; reference p = InsertFragment(pDefFrg, 0, &par); LightObj (p, 1); Message("вставка локального фрагмента"); LightObj (p, 0); } }; /* ReadFragment */

Пример использования функций для редактирования допуска формы

// редактирование допуска формы reference pObj; RequestInfo info; double x, y; memset(&info, 0, sizeof(info)); info.prompt = "Укажите допуск формы"; int j = Cursor(&info, &x, &y, 0); if (j) { if(ExistObj(pObj = FindObj(x, y, MAXDOUBLE))){ //узнаем тип объекта int type =GetObjParam( pObj,0,0,0); //указатель на графический объект if (type == TOLERANCE_OBJ) { unsigned int numb; char buf[128]; //открыть допуск формы для редактирования ksOpenTolerance(pObj); ToleranceParam par; //параметры допуска формы GetObjParam( pObj, //указатель на графический объект &par, //указатель на структуру параметров sizeof(ToleranceParam), //размер структуры параметров ALLPARAM); //тип считывания параметров sprintf(buf, "базовая точка=%d стиль=%d расположение-%s\nx=%5.1f y=%5.1f ", par.tBase, par.style, par.type ? "вертикальное":"горизонтальное", par.x, par.y); Message(buf); TextLineParam par1; //в цикле будем брать все существующие ячейки while (ksGetToleranceColumnText(&numb, &par1)!=0) { sprintf(buf, "numb =%d ", numb); Message(buf); sprintf(buf, "style=%d ", par1.style); Message(buf); TextItemParam par3; for (int j=0; j< GetArrayCount(par1.pTextItem); j) { GetArrayItem(par1.pTextItem, j, &par3, sizeof(TextItemParam)); if (!par3.tip) sprintf(buf, "компонента=%d h=%5.1f\ns=%s\n fontName=%s\nбитвектор =%d ",j,par3.font.height,par3.s, par3.font.fontName, par3.font.bitVector); else sprintf(buf, "компонента=%d тип = %d номер спецзнака=%d ",j,par3.tip,par3.iSNumb); Message(buf); } DeleteArray(par1.pTextItem); //очистим массив компонент } //заменим параметры par.x = 10; par.y = 10; SetObjParam( pObj, //указатель на графический объект &par, //указатель на структуру параметров sizeof(ToleranceParam ), //размер структуры параметров ALLPARAM); //тип считывания параметров ColumnNumber(2); TextLine (NEW_LINE ,0,0 ,"вторая ячейка"); ksDivideTableItem(3, 1, 2); ColumnNumber(4); TextLine (NEW_LINE ,0,0 ,"4"); // ksSetTableBorderStyle(1,2,1); // ksClearTableColumnText(0); EndObj();//закрыли объект "допуск формы" } else Error("это не допуск формы"); } else Error("нет объекта"); }