Files
kompas3d-mcp/docs/Kompas3D_SDK/guides/createspciterator.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

89 lines
4.5 KiB
Markdown

---
title: "CreateSpcIterator - Создать итератор для перебора объектов спецификации"
type: guide
api: [api7]
tags: [guide, api7, createspciterator]
sources:
- createspciterator.html
---
*API экспортных функций > Функции работы с документом-спецификацией *
## CreateSpcIterator - Создать итератор для перебора объектов спецификации
Пример...
Аналог данной функции при использовании Automation - метод ksIterator::ksCreateSpcIterator.
Синтаксис:
```
reference CreateSpcIterator (char * nameLib,
unsigned int styleNumb,
int spcObjType);
Входные параметры:
nameLib - имя библиотеки стилей спецификации,
styleNumb - номер стиля спецификации в библиотеке,
spcObjType - тип объектов: 0 - базовые, 1 - вспомогательные, 2 - базовые и вспомогательные из сортированного массива, 3 - все объекты.
Возвращаемое значение:
1 - в случае успешного завершения,
0 - в случае неудачи.
```
Примечание:
1. Если функция вызывается в графическом документе, то итератор создается для объектов, образованных по описанию, определяемому именем библиотеки стилей спецификации и номером стиля.
2. В документе-спецификации параметры nameLib и styleNumb не используются (т.к. все объекты в ней создаются по единственному описанию, однозначно определяемому текущим стилем).
3. При использовании Unicode следует использовать функцию CreateSpcIteratorW.
## CreateSpcIterator, ksGetSpcObjectColumnText, ksSetSpcObjectColumnText - пример использования
reference spcObj = 0;
double numbObj; //уникальный номер объекта
//создадим объект спецификации
if( ::ksSpcObjectCreate("graphic.lyt", //имя библиотеки типов
1, // номер типа спецификации
20, 0, //номер раздела и подраздела
0, //тип атрибута
0)) { //базовый объект
spcObj = ::ksSpcObjectEnd();
//запомним номер объекта
numbObj = ::ksGetSpcObjectNumber ( spcObj);
}
//создадим итератор для навигации по объектам спецификации
reference iter = ::CreateSpcIterator("graphic.lyt", 1, 0);
if (!iter)
::MessageBoxResult(); // неудачное завершение - выдадим результат работы нашей функции
else {
reference spcObj;
char buf[120];
// найдем первый объект
spcObj = ::MoveIterator(iter, 'F');
if (spcObj && ::ExistObj(spcObj)) {
//у всех объектов в обозначении добавим "-01"
//а у объекта с номером numbObj - "-02"
do {
//возьмем текст обозначения
::ksGetSpcObjectColumnText (spcObj
SPC_CLM_MARK, //тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
1, //номер колонки данного типа начиная с 1
buf, 120); //указатель
double n = ::ksGetSpcObjectNumber (spcObj);
//добавим к обозначению нужную добавку
strcat(buf, n == numbObj ? "-02" : "-01");
//откроем объект на редактирование
::ksSpcObjectEdit(spcObj);
//в этом блоке можно редактировать все колонки спецификации,
//подключать или отключать ассоциированную геометрию
//в нашем случае заменим обозначение
::kSetSpcObjectColumnText (SPC_CLM_MARK, //тип колонки SPC_CLM_FORMAT...SPC_CLM_USER
1, //номер колонки данного типа начиная с 1
buf); //указатель
//закроем объет после редактирования
::ksSpcObjectEnd();
//найдем следующий объект
spcObj = ::MoveIterator(iter, 'N');
} while(spcObj && ::ExistObj(spcObj));
}
//удалим итератор
::DeleteIterator(iter);
}
}