e1337e4016
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>
78 lines
6.2 KiB
Markdown
78 lines
6.2 KiB
Markdown
---
|
|
title: "DecomposeObj - Разбить объект на составляющие части - отрезки, дуги, тексты"
|
|
type: guide
|
|
api: [api7]
|
|
domain: [drawing]
|
|
tags: [guide, api7, drawing, decomposeobj]
|
|
sources:
|
|
- 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);
|
|
}
|