---
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);
}
