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.2 KiB

title, type, api, domain, tags, sources
title type api domain tags sources
DecomposeObj - Разбить объект на составляющие части - отрезки, дуги, тексты guide
api7
drawing
guide
api7
drawing
decomposeobj
decomposeobj.html

*API экспортных функций > Редактирование графических объектов  > Функции редактирования объектов чертежа *

DecomposeObj - Разбить объект на составляющие части - отрезки, дуги, тексты

Пример... Аналог данной функции при использовании Automation - метод ksDocument2D::ksDecomposeObj. Синтаксис:

reference DecomposeObj (reference p,
unsigned char level,
double arrow,
unsigned char type);
Входные параметры:
p    - указатель на разбиваемый объект,
level    - степень детализации разбиения: 0 - отрезки, дуги, тексты, точки, 1 - отрезки, тексты, точки, 2 - отрезки, дуги, тексты, 4 - отрезки, дуги, точки, 5 - отрезки, дуги, тексты, заливки стрелок и треугольников баз, 6 - разбиение объектов из ассоциативного чертежа на составляющие с учетом видимых и невидимых участков,
arrow    - размер "стрелки прогиба",
type    - признак выбранной системы координат: 0 - разбиение объекта в СК вида, 1 - разбиение объекта в СК листа.
Возвращаемое значение:
указатель на временную группу компонентов сложного объекта    - в случае удачного завершения,
0    - в случае неудачи.

Примечания:

  1. Метод используется при разработке различных конверторов, преобразующих информацию из системы КОМПАС во внешние форматы.
  2. Текущий документ должен быть графическим.
  3. Графический документ разбивается по частям. Такими частями могут быть объекты вида, основная надпись, технические требования, спецификация на листе, знак неуказанной шероховатости.
  4. Документ-спецификация разбивается по листам (количество листов спецификации можно получить при помощи функции ksGetSpcDocumentPagesCount). Если функция используется для разбиения спецификации, то параметр type представляет собой номер листа спецификации, начиная с 1.
  5. Сложные кривые заменяются набором отрезков и дуг (при level=1 - только набором отрезков).
  6. Точность приближения к исходному объекту задается значением параметра arrow - максимальным расстоянием между исходным объектом и аппроксимирующим отрезком.
  7. Если level=2, точки превращаются в графические объекты, служащие для отрисовки этих точек в КОМПАС-ГРАФИК (например, в два отрезка для точки типа "крест"). В остальных случаях точки (в том числе отрисованные в виде "крестов", "треугольников" и т.д.) превращаются в объект типа "точка".
  8. Во всех случаях, кроме level=4, сложные тексты (например, тексты, написанные буквами разного начертания - прямого и курсивного) разбиваются на тексты с одинаковыми признаками. При level=4 тексты не изменяются.
  9. Исходный объект после разбиения не изменяется.

DecomposeObj - пример использования

{ reference p; LDimParam linPar; memset(&linPar, 0,sizeof(LDimParam)); //параметры текста linPar.tPar.bitFlag = _AUTONOMINAL|_PREFIX|_TOLERANCE|_DEVIATION|_UNIT; linPar.tPar.sign = 1; //диаметр linPar.tPar.pText = CreateArray(CHAR_STR_ARR, 0); AddArrayItem(linPar.tPar.pText, -1, 2отв., 6); // _PREFIX AddArrayItem(linPar.tPar.pText, -1, H12, 4); // _TOLERANCE AddArrayItem(linPar.tPar.pText, -1, мм, 5); // _UNIT //параметры привязки linPar.sPar.ps = 0; // 0-горизонтальный linPar.sPar.x1 = 50; linPar.sPar.y1 = 50; // 1-ая точка linPar.sPar.x2 = 70; linPar.sPar.y2 = 60; // 2-ая linPar.sPar.dy = -20; // вектор определяющий положение размерной линии linPar.sPar.dx = 0; linPar.sPar.basePoint = 1; // признак 1-dx, dy -откладывать от первой точки, 2- от второй // параметры отрисовки линейного размера linPar.dPar.textPos = 0; // автоматическая простановка linPar.dPar.textBase = 0; // от средины размера linPar.dPar.pl1 = 0; // 1-ая выносная линия есть linPar.dPar.pl2 = 0; // 2-ая выносная линия есть linPar.dPar.pt1 = 1; // тип стрелки у 1-ой выносной линии 1-изнутри linPar.dPar.pt2 = 1; // тип стрелки у 2-ой выносной линии 1-изнутри linPar.dPar.shelfDir = -1; // полка направлена влево linPar.dPar.ang = -30; // угол наклона ножки linPar.dPar.length = 20; // длина ножки p = LinDimension(&linPar); //параметры линейного размера DecomposeObj(p, 0, 5, 0); }