--- 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() Получить свойство (**) ``` Примечания: Свойство позволяет узнать состоит ли компонент их нескольких частей. В результате работы свойства можно получить компонент (деталь), состоящую из нескольких частей. С точки зрения конструктора, деталь должна представлять нечто целое. Частей быть не должно. Следовательно, нужно отыскать в компоненте операции, порождающие несколько частей, и выключить из расчета не нужные, чтобы образовалось целое тело.