---
title: "Трехмерное тело (Интерфейсы ksBody, Body)"
type: interface
api: [api7]
domain: [3d, 2d]
tags: [interface, api7, 3d, 2d, ksbody]
sources:
  - ksbody.html
---

*API интерфейсов. Версия 5 > Документ-модель (Интерфейсы - ksDocument3D, IDocument3D )  > Компонент сборки (деталь или подсборка). Интерфейсы ksPart и IPart  > Объект модели (Интерфейсы ksEntity и IEntity)  > Интерфейсы ksEntity и iEntity - Интерфейс элемента модели (оси, плоскости, формообразующего элемента)  > Интерфейс массива трехмерных тел (Интерфейсы ksBodyCollection, IBodyCollection) *


## Трехмерное тело (Интерфейсы ksBody, Body)

Интерфейс трехмерного тела.
| ksBody | - интерфейс Automation |
| --- | --- |
| IBody | - интерфейс COM |
Примечание:
1. Твердое тело состоит из массива граней.
2. Данный интерфейс может быть получен от интерфейса коллекции тел ksBodyCollection, IBodyCollection или от интерфейса компонента ksPart, IPart с помощью метода ksPart::GetMainBody, IPart::GetMainBody.


## CheckIntersectionWithBody - Проверить наличия пересечений с другим телом

Интерфейс..
Синтаксис Automation:
```
LPDISPATCH CheckIntersectionWithBody (LPDISPATCH otherBody,
BOOL checkTangent);
```
Синтаксис COM:
```
LPINTERSECTIONRESULT CheckIntersectionWithBody (LPBODY otherBody,
BOOL checkTangent);
Входные параметры:
otherBody    - тело, с которым проверяется пересечение,
checkTangent    - считать касания пересечениями.
Возвращаемое значение:
Интерфейс ksIntersectionResult    - в случае успеха,
NULL    - если пересечений нет.
```


## CurveIntersection - Рассчитать пересечения с кривой

Интерфейс..
Automation:
BOOL CurveIntersection (LPDISPATCH curve,
LPDISPATCH fases,
LPDISPATCH points);
Синтаксис COM:
```
BOOL CurveIntersection (LPCURVE3D curve,
LPFACECOLLECTION faces,
LPCOORDINATE3DCOLLECTION points);
Входные параметры:
curve    - Указатель на интерфейс 3D кривой ksCurve3D.
Выходные параметры:
faces    - Коллекция граней пересекаемых кривой ksFaceCollection,
points    - Коллекция координат точек пересечений ksCoordinate3dCollection.
Возвращаемое значение:
TRUE    - в случае успеха,
FALSE    - в случае неудачи.
```
Примечание:
1. Координаты точек сортируются по параметру кривой t.
2. Параметры faсes, points являются необязательными.
3. Заполняются только присланные коллекции.
4. Интерфейсы коллекций для заполнения нужно получить с помощью функций:
•ksFaceCollection, ksD ocument3D::GetInterface с параметром o3dType = o3d_faceCollection;
•ksCoordinate3dCollection, ksDocument3D::GetInterface с параметром o3dType = o3d_coordinate3dCollection.


## FaceCollection - Получить указатель на интерфейс массива граней, образующих тело

Интерфейс..
Синтаксис Automation:
```
LPDISPATCH FaceCollection();
```
Синтаксис COM:
```
LPFACECOLLECTION FaceCollection();
Возвращаемое значение:
- указатель на интерфейс ksFaceCollection или IFaceCollection.
```


## GetFeature - Получить объект дерева, связанный с данным телом

Интерфейс..
Синтаксис Automation:
```
LPDISPATCH GetFeature();
```
Синтаксис COM:
```
LPFEATURE GetFeature();
Возвращаемое значение:
- указатель на интерфейс ksFeature или IFeature.
```


## GetGabarit - Получить габарит тела

Синтаксис Automation:
```
BOOL GetGabarit (double *x1,
double *y1,
double *z1,
double * x2,
double *y2,
double *z2);
```
Синтаксис COM:
```
BOOL GetGabarit (double *x1,
double *y1,
double *z1,
double * x2,
double *y2,
double *z2);
Выходные параметры:
x1, y1, z1    - координаты первой вершины габаритного куба,
x2, y2, z2    - координаты второй вершины габаритного куба.
Возвращаемое значение:
TRUE    - в случае успеха,
FALSE    - в случае неудачи.
```


## GetIntersectionFacesWithBody - Определить взаимодействующие грани при пересечении данного тела с другим

Интерфейс..
Синтаксис Automation:
```
BOOL GetIntersectionFacesWithBody (LPDISPATCH otherBody, VARIANT * intersectionFaces1,
VARIANT * intersectionFaces2,
VARIANT * connectedFaces1,
VARIANT * connectedFaces2);
```
Синтаксис COM:
```
BOOL GetIntersectionFacesWithBody (LPBODY otherBody, VARIANT * intersectionFaces1,
VARIANT * intersectionFaces2,
VARIANT * connectedFaces1,
VARIANT * connectedFaces2).
Входные параметры:
otherBody    - второе тело.
Выходные параметры:
intersectionFaces1    - пересекаемые грани первого тела,
intersectionFaces2    - пересекаемые грани второго тела,
connectedFaces1    - совпадающие грани первого тела,
connectedFaces2    - совпадающие грани второго тела.
Возвращаемое значение:
TRUE    - в случае успешного завершения,
FALSE    - в случае неудачи.
```
Примечание:
Пересекаемые и совпадающие грани возвращаются в VARIANT-е так:
•Если грань одна, то VARIANT заполняется как VT_DISPATH в автоматизации и VT_UNKNOVN в COM.
•Если граней несколько, то VARIANT заполняется как массив SafeArray типа VT_ARRAY | VT_DISPATH в автоматизации и VT_ARRAY | VT_UNKNOVN в COM.
Количество граней в массивах intersectionFaces1 и intersectionFaces2 совпадают и образуют пары, т.е. грань с индексом i из массива intersectionFaces1 пересекается с гранью i из массива intersectionFaces2.
Одна и та же грань может встречаться в массиве несколько раз, если она пересекается с несколькими гранями.
Так же заполняются и массивы connectedFaces1 и connectedFaces2.


## IsSolid - Является ли объект твердым телом или поверхностью

Интерфейс..
Синтаксис Automation:
```
BOOL IsSolid();
```
Синтаксис COM:
```
BOOL IsSolid();
Возвращаемое значение:
TRUE    - объект является твердым телом,
FALSE    - объект является поверхностью.
```
Примечание:
Твердое тело может состоять из набора поверхностей.


## MassInertiaParam - Получить указатель на интерфейс массово-центровочных характеристик

Интерфейс..
Синтаксис Automation:
```
LPDISPATCH CalcMassInertiaProperties (long bitVector);
```
Синтаксис COM:
```
LPMASSINERTIAPARAM CalcMassInertiaProperties (unsigned int bitVector);
Входной параметр:
bitVector    - определяет размерность длины, размерность массы.
Возвращаемое значение:
- указатель на интерфейс ksIMassInertiaParam или IMassInertiaParam.
```
Примечания:
Варианты значений для задания значений bitVector находятся в интервале [ST_MIX_MM..ST_MIX_KG]
Пример:
```vb
(метры|кг - ST_MIX_M|ST_MIX_KG).
```


## MultiBodyParts - Признак того, что компонент состоит из нескольких частей

Тип данных: BOOL
Значения свойства:
| TRUE | - компонент состоит из нескольких частей, |
| --- | --- |
| FALSE | - компонент не состоит из нескольких частей. |
Синтаксис Automation:
```
MultiBodyParts = iBody.MultiBodyParts    Получить свойство (* )
MultiBodyParts = iBody.GetMultiBodyParts()    Получить свойство (**)
```
Примечания:
Свойство позволяет узнать состоит ли компонент их нескольких частей.
В результате работы свойства можно получить компонент (деталь), состоящую из нескольких частей. С точки зрения конструктора, деталь должна представлять нечто целое. Частей быть не должно. Следовательно, нужно отыскать в компоненте операции, порождающие несколько частей, и выключить из расчета не нужные, чтобы образовалось целое тело.
