Files
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
Raw Permalink Blame History

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

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

struct User_Data // определение структуры пользовательского массива { int I; char *c; float f; }; //функция удаляет элемент User_Data пользовательского массива void WINAPI DelUserFunc (void *val) { User_Data *tmp = (User_Data *)val; Message(tmp->c); delete [] tmp->c; delete tmp; } //функция добавляет элемент User_Data в пользовательский массив int CreateUserItem (reference arr, int i, char c, float f) { User_Data tmp = new User_Data; tmp->i = I; tmp->c = new char [strlen(c) +1]; strcpy (tmp->c, c); tmp->f = f; return AddArrayItem (arr, -1, tmp, 0); } //функция выдает содержимое элемента User_Data void ShowUserItem (User_Data & tmp) { char buf[128]; sprintf (buf, " i=%d f=%f\n c=%s ", tmp.i, tmp.f, tmp.c); Message (buf); } void Array_Example (void) { User_Data tmp; //создадим пользовательский массив неопределенной длины reference userArr = CreateArray (USER_ARR, DelUserFunc); if (!CreateUserItem (userArr, 1, "январь", 31.)) MessageBoxResult(); if (!CreateUserItem (userArr, 2, "февраль", 29.)) MessageBoxResult(); if (!CreateUserItem (userArr, 3, "март", 31.)) MessageBoxResult(); //просмотрим массив for (int i=0; i< GetArrayCount(userArr); i++) { // получим указатель на элемент массива GetUserArrayItem (userArr, i, &(void)tmp); ShowUserItem (*tmp); } ClearArray (userArr); //очистить массив Message ("удаляем массив"); DeleteArray (userArr); };

Пример обработки динамического запроса при создании панели инструментов

st_reduc

В качестве примера используется процесс указания точки и угла Placement. Процесс содержит системную панель, элементы управления которой позволяют задать два параметра - точку и угол. Можно выделить 3 состояния процесса: •указание точки, •указание угла, •все задано. Если процесс переходит в состояния все задано, то возможны два варианта. Автоматически запускается создание объекта. Процесс ожидает ручного нажатия кнопки Создать объект . При этом никакие функции CallBack не выполняются. В API за это отвечает свойство IProcessParam::AutoReduce, Таким образом, создавая панель, содержащую кнопку Автосоздание объекта с возможностью управлять ее состоянием (нажата/отжата) через ButtonUpdate, необходимо в первый раз синхронизировать состояния кнопки и флага IProcessParam::AutoReduce. Предположим, что процесс запускается с нажатой кнопкой автосоздания. Необходимо задать значение IProcessParam::AutoReduce, равное TRUE. Поля задания точки и угла на панели расфиксированы. Первый щелчок мыши в поле чертежа фиксирует точку, второй фиксирует угол и по флагу IProcessParam::AutoReduce запускается создание объекта. После этого поля задания точки и угла расфиксируются, то есть процесс переходит в начальное состояние (благодаря флагу IProcessParam::AutoReduce=TRUE). В случае нажатия кнопки автосоздания в процессе, событие придет в библиотеку, и инвертирует флаг IProcessParam::AutoReduce в самом процессе автоматически. Пользовательская панель может содержать только элементы управления, а не поля задания параметров. На построения они не влияют, так как таблица состояний статическая и описывается до запуска процесса. Таким образом, если процесс перешел в состояние все задано, то есть значения всех параметров установлены и на пользовательской панели можно только отрабатывать изменение состояния элементов управления, никакие CallBack - функции не выполняются. У процесса указания точки Cursor аналогичная схема работы, но задаваемый параметр всего один и первый же щелчок мыши в поле чертежа переводит процесс в состояние все задано. Для имитации работы процесса Cursor с постоянным присутствием вызовов CallBack'ов необходимо выполнить следующие действия:

  1. На старте процесса задать значение IProcessParam::AutoReduce, равное TRUE.
  2. В событии ButtonClick на нажатия кнопки автосоздания всегда возвращать FALSE, то есть не давать процессу инвертировать значение IProcessParam::AutoReduce.
  3. Управлять состоянием кнопки в ButtonUpdate по собственному усмотрению.
  4. Всю логику работы реализовать в функции обратной связи CallBack, то есть, если заданы не все значения параметров, то возвращать 1, а если все, то 0.