C3D Kernel  104065
Открытые члены | Защищенные члены
Класс MbContourWithBreaks

Контур c разрывами. Подробнее...

Граф наследования:MbContourWithBreaks:
Inheritance graph
[см. легенду]
Граф связей класса MbContourWithBreaks:
Collaboration graph
[см. легенду]

Полный список членов класса

Открытые члены

 MbContourWithBreaks ()
 Создание пустого контура.
 MbContourWithBreaks (const MbContour &cnt)
 Копирующий конструктор.
 VISITING_CLASS (MbContourWithBreaks)
Общие функции геометрического объекта.
virtual MbePlaneType IsA () const
 Получить тип объекта.
virtual void Transform (const MbMatrix &matr, MbRegTransform *ireg=NULL, const MbSurface *newSurface=NULL)
 Преобразовать согласно матрице.
virtual void Move (const MbVector &to, MbRegTransform *=NULL, const MbSurface *newSurface=NULL)
 Сдвинуть вдоль вектора.
virtual void Rotate (const MbCartPoint &pnt, const MbDirection &angle, MbRegTransform *=NULL, const MbSurface *newSurface=NULL)
 Повернуть вокруг точки.
virtual MbPlaneItemDuplicate (MbRegDuplicate *=NULL) const
 Создать копию.
Функции доступа к данным: разрывы.
size_t GetBreaksCount () const
 Число разрывов.
MbBreakGetBreak (size_t i) const
 Разрыв по номеру.
MbRect1D GetBreaksRange (size_t i) const
 Разрыв по номеру в параметрах контура.
Функции доступа к данным: видимые участки.
size_t GetVisibleCount () const
 Количество видимых частей.
const MbContourGetVisibleContour (size_t i) const
 Видимая часть по номеру.
Функции доступа к данным: невидимые участки.
MbContourGetInvisibleContour (size_t i) const
 Невидимая часть по номеру разрыва.
Работа с разрывами: добавление.
bool AddBreak (const MbCartPoint &point1, const MbCartPoint &point2, const MbCartPoint &point3, bool invertBreak=false)
 Добавить разрыв между точками.
bool AddBreak (double t1, double t2, double t3, bool invertBreak=false)
 Добавить разрыв между параметрами контура.
bool AddBreak (const MbRect1D &range)
 Добавить разрыв по интервалу параметров контура.
Работа с разрывами: удаление.
bool DeleteBreaks ()
 Удалить разрывы.
bool DeleteBreakAtNumber (size_t breakIndex, bool rebuild=false)
 Удалить разрыв по номеру разрыва.
bool DeleteBreakAtParam (double t)
 Удалить разрыв по параметру на контуре.
void DeleteBreaksAtBaseNumber (size_t baseNumber, bool delTracingBreaks, bool delEquidBreaks, bool delInLineSeg=true)
 Удалить разрывы на сегментах с соответствующим базовым номером.
Удаление разрывов и видимых частей малой метрической длины.
bool DeleteSmallBreaks (double length)
 Удалить разрывы малой метрической длины.
bool DeleteSmallVisContours (double length)
 Удалить видимые части малой метрической длины.
Работа с разрывами
bool GetBreakAtPoint (const MbCartPoint &p, double rad, size_t &index) const
 Номер разрыва, край которого попал в окрестность точки.
bool GetBreaksInRect (const MbRect &rect, SArray< size_t > &breaksNumbers) const
 Номера разрывов, которые хотя бы одним краем попадают в область.
bool GetBreaksInRect (const MbContour &contour, SArray< size_t > &breaksNumbers) const
 Номера разрывов, которые хотя бы одним краем попадают в область.
bool HitToBreaks (const MbCartPoint &p) const
 Определить попадает ли точка в любой из разрывов.
bool IsRectInBreak (const MbRect1D &rect)
 Находится ли интервал параметров на разрыве.
void RebuildBreaks (SArray< size_t > &oldBaseNumbers)
 Обновить невидимые и видимые контуры.
void RebuildBreaks ()
 Обновить невидимые и видимые контуры.
void TransformMultlinesBreaks (const MbMatrix &matr)
 Преобразование в соответствии с матрицей.
double GetLocalBreaksParam (const MbBreaksPart &brPart, size_t &segNumber) const
 Параметр привязки части разрыва.
Работа с разрывами: изменение разрыва.
void SetBreakFixedPoint (const MbCartPoint &newPoint, MbBreaksPart &part)
 Фиксировать точку.
void SetBreakFixedVar (double newFixedVar, MbBreaksPart &part)
 Фиксировать переменную.
Работа с разрывами: отслеживание разрыва
size_t GetBaseNumbersCount () const
 Количество номеров сегментов базового контура
void GetBaseNumbers (SArray< size_t > &baseNumbers) const
 Номера сегментов базового контура.
size_t GetBaseNumber (size_t i) const
 Номер сегмента базового контура.
void AddBaseSegNumber (size_t number)
 Добавить номер базового сегмента.
void AddBaseSegNumberAtBegin (size_t number)
 Добавить номер базового сегмента.
void InsertLastSegNumber (size_t lastInd)
 Вставить номер после lastInd.
void DeleteBaseSegNumber (size_t ind)
 Удалить элемент по индексу.
void ClearBaseSegNumbers ()
 Очистить массив с номерами базовых сегментов.
void ChangeBreaksSegNumbers (size_t begBaseNumber, ptrdiff_t deltaN)
 Изменить номера сегментов в разрывах.
void ChangeBreaksAtClosed (bool newClosed)
 Изменить разрывы соотвестсвенно замкнутости.
void MoveBreaksSegNumbers (ptrdiff_t deltaN)
 Изменить номера сегментов частей разрывов.
bool IsTrasingBreaksPart (const MbBreaksPart &part, size_t &vertNumber) const
 Находится ли часть разрыва этого контура на сегменте обхода вершин.
void SwapBreaksAndBaseNumbers (MbContourWithBreaks &other)
 Поменяться разрывами.
void AddContoursBreaks (const MbContourWithBreaks &other)
 Добавить разрывы контура.
void ChangeBaseNumbers (const MbContourWithBreaks &other)
 Заменить номера базовых сегментов.

Защищенные члены

 MbContourWithBreaks (const MbContourWithBreaks &, MbRegDuplicate *)

Подробное описание

Контур c разрывами.
Для использования в мультилинии MbMultiline.
Содержит разрывы MbBreak, видимые части - контуры MbContour.
При использовании в мультилинии каждуй раз при перестроении контура в нем обновляется список номеров по количеству сегментов контура. Каждый номер показывает номер сегмента базовой кривой мультилинии, которому соответствует этот сегмент контура.
Если сегмент контура является эквидистантой сегмента базовой кривой, то ему соответствует номер этого сегмента.
Если контур является сегментом обхода вершины мультилинии, то ему соответствует номер, соответствующий предыдущему сегменту контура.
Разрывы в контуре не могут накладываться друг на друга. Если в результате перестроения один разрыв наложился на другой, то они объединяются.


Конструктор(ы)

MbContourWithBreaks::MbContourWithBreaks ( )

Создание пустого контура без сегментов.


Методы

virtual void MbContourWithBreaks::Transform ( const MbMatrix matr,
MbRegTransform iReg = NULL,
const MbSurface newSurface = NULL 
) [virtual]

Преобразовать исходный объект согласно матрице c использованием регистратора. Если объект содержит ссылки на другие геометрические объекты, то вложенные объекты так же преобразуются согласно матрице. Регистратор служит для предотвращения многократного преобразования объекта. Допустимо использовать функцию без регистратора, если надо преобразовать одиночный объект. Если надо преобразовать набор взаимосвязанных объектов, необходимо использовать регистратор для предотвращения повторного преобразования вложенных объектов, поскольку не исключена ситуация, когда несколько объектов из набора содержат ссылки на один или несколько общих объектов, подлежащих трансформации.

Аргументы:
[in]matr- Матрица преобразования.
[in]iReg- Регистратор.
[in]surface- Новая базовая поверхность объекта при условии, что matr - матрица преобразования из старой поверхности в новую. Для трансформации проекционной кривой. Не учитывается, если поверхность плоская.

Переопределяет метод предка MbContour.

virtual void MbContourWithBreaks::Move ( const MbVector to,
MbRegTransform iReg = NULL,
const MbSurface newSurface = NULL 
) [virtual]

Сдвинуть геометрический объект вдоль вектора с использованием регистратора. Если объект содержит ссылки на другие геометрические объекты, то к вложенным объектам так же применяется операция сдвига. Регистратор служит для предотвращения многократного преобразования объекта. Допустимо использовать функцию без регистратора, если надо преобразовать одиночный объект. Если надо преобразовать набор взаимосвязанных объектов, необходимо использовать регистратор для предотвращения повторного преобразования вложенных объектов, поскольку не исключена ситуация, когда несколько объектов из набора содержат ссылки на один или несколько общих объектов, подлежащих сдвигу.

Аргументы:
[in]to- Вектор сдвига.
[in]iReg- Регистратор.
[in]surface- Новая базовая поверхность объекта при условии, что matr - матрица преобразования из старой поверхности в новую. Для трансформации проекционной кривой. Не учитывается, если поверхность плоская.

Переопределяет метод предка MbContour.

virtual void MbContourWithBreaks::Rotate ( const MbCartPoint pnt,
const MbDirection angle,
MbRegTransform iReg = NULL,
const MbSurface newSurface = NULL 
) [virtual]

Повернуть объект вокруг точки на заданный угол с использованием регистратора. Если объект содержит ссылки на другие геометрические объекты, то к вложенным объектам так же применяется операция поворота. Регистратор служит для предотвращения многократного преобразования объекта. Допустимо использовать функцию без регистратора, если надо преобразовать одиночный объект. Если надо преобразовать набор взаимосвязанных объектов, необходимо использовать регистратор для предотвращения повторного преобразования вложенных объектов, поскольку не исключена ситуация, когда несколько объектов из набора содержат ссылки на один или несколько общих объектов, подлежащих повороту.

Аргументы:
[in]pnt- Неподвижная точка.
[in]angle- Угол поворота.
[in]iReg- Регистратор.
[in]surface- Новая базовая поверхность объекта при условии, что matr - матрица преобразования из старой поверхности в новую. Для трансформации проекционной кривой. Не учитывается, если поверхность плоская.

Переопределяет метод предка MbContour.

virtual MbPlaneItem& MbContourWithBreaks::Duplicate ( MbRegDuplicate iReg = NULL) const [virtual]

Создать копию объекта с использованием регистратора. Регистратор используется для предотвращения многократного копирования объекта. Если объект содержит ссылки на другие объекты, то вложенные объекты так же копируются. Допустимо не передавать регистратор в функцию. Тогда будет создана новая копия объекта. При копировании одиночного объекта или набора не связанных между собой объектов допустимо не использовать регистратор. Регистратор необходимо использовать, если надо последовательно копировать несколько взаимосвязанных объектов. Возможно, что связь объектов обусловлена наличием в них ссылок на общие объекты. Тогда, при копировании без использования регистратора, можно получить набор копий, содержащих ссылки на разные копии одного и того же вложенного объекта, что ведет к потере связи между копиями.

Аргументы:
[in]iReg- Регистратор.
Возвращает:
Копия объекта.

Переопределяет метод предка MbContour.

MbBreak* MbContourWithBreaks::GetBreak ( size_t  i) const [inline]

Разрыв по номеру.
Номер не проверяется на корректность.

Аргументы:
[in]i- Номер разрыва, должен быть меньше количества разрывов.
Возвращает:
Указатель на разрыв.
MbRect1D MbContourWithBreaks::GetBreaksRange ( size_t  i) const

Разрыв по номеру в параметрах контура.
Номер проверяется на корректность. В случае, если номер больше числа сегментов результат - вывернутая область.

Аргументы:
[in]i- Номер разрыва, должен быть меньше количества разрывов.
Возвращает:
Интервал разрыва в параметрах контура.
size_t MbContourWithBreaks::GetVisibleCount ( ) const [inline]

Количество видимых частей.
Если в контуре нет разрывов, то возвращает 0.

Возвращает:
Число видимых частей.
const MbContour* MbContourWithBreaks::GetVisibleContour ( size_t  i) const [inline]

Видимая часть по номеру.
Номер не проверяется на корректность.

Аргументы:
[in]i- Номер видимой части, должен быть меньше количества видимых частей.
Возвращает:
Указатель не контур - видимую часть.
MbContour* MbContourWithBreaks::GetInvisibleContour ( size_t  i) const

Невидимая часть по номеру разрыва.
Номер проверяется на корректность. В случае, если номер не меньше числа разрывов, функция вернет NULL.
После использования полученный контур нужно удалить.

Аргументы:
[in]i- Номер разрыва, должен быть меньше количества видимых частей.
Возвращает:
Указатель не контур - видимую часть.
bool MbContourWithBreaks::AddBreak ( const MbCartPoint point1,
const MbCartPoint point2,
const MbCartPoint point3,
bool  invertBreak = false 
)

Добавить разрыв между точками.

Аргументы:
[in]point1- Первая граница разрыва.
[in]point2- Вторая граница разрыва.
[in]point3- Точка, которая показывает удаляемую часть замкнутого контура,
в случае разомкнутого контура она игнорируется.
[in]invertBreak- Признак добавления разрыва на противоположную часть контура.
Возвращает:
true, если разрыв был добавлен.
bool MbContourWithBreaks::AddBreak ( double  t1,
double  t2,
double  t3,
bool  invertBreak = false 
)

Добавить разрыв между параметрами контура.

Аргументы:
[in]t1- Первая граница разрыва.
[in]t2- Вторая граница разрыва.
[in]t3- Параметр, который показывает удаляемую часть замкнутого контура,
в случае разомкнутого контура он игнорируется.
[in]invertBreak- Признак добавления разрыва на противоположную часть контура.
Возвращает:
true, если разрыв был добавлен.
bool MbContourWithBreaks::AddBreak ( const MbRect1D range)

Добавить разрыв по интервалу параметров контура.

Аргументы:
[in]range- Интервал параметров контура,
если range.zmin больше range.zmax, то результат работы функции будет корректным только в случае замкнутого контура - добавится разрыв, проходящий через начало контура.
Возвращает:
true, если разрыв был добавлен.
bool MbContourWithBreaks::DeleteBreaks ( )

Удалить все разрывы.

Возвращает:
true, если хотя бы один разрыв был удален. Удалить разрывы.
bool MbContourWithBreaks::DeleteBreakAtNumber ( size_t  breakIndex,
bool  rebuild = false 
)

Удалить разрыв по номеру разрыва.

Аргументы:
[in]breakIndex- Номер разрыва,
проверяется на корректность.
[in]rebuild- Нужно ли перестроить контур после удаления разрыва.
Если контур не перестраивать, видимые части контура не будут соответствовать разрывам.
Перестроить контур можно отдельно вызовом RebuildBreaks.
Возвращает:
true, если разрыв был удален.
bool MbContourWithBreaks::DeleteBreakAtParam ( double  t)

Удалить разрыв по параметру на контуре.

Возвращает:
true, если разрыв был удален
void MbContourWithBreaks::DeleteBreaksAtBaseNumber ( size_t  baseNumber,
bool  delTracingBreaks,
bool  delEquidBreaks,
bool  delInLineSeg = true 
)

Удалить разрывы на сегментах с соответствующим базовым номером.
Разрывы удаляться, если в контуре заполнены базовые номера сегментов. Номера заполняются при перестроении мультилинии, содержащей контур.
Если сегменту контура соответствует одна из частей разрыва, то весь разрыв будет удален.

Аргументы:
[in]baseNumber- Номер сегмента базовой кривой.
[in]delTracingBreaks- Нужно ли удалять разрывы с сегментоа, соответствующих обходу вершины мультилинии.
[in]delEquidBreaks- Нужно ли удалять разрывы с сегментов, соответствующих эквидистантам.
[in]delInLineSeg- Удалять ли разрывы с прямолинейных сегментов.
bool MbContourWithBreaks::DeleteSmallBreaks ( double  length)

Удалить разрывы малой метрической длины.
В случае успеха видимые контуры перестраиваются соответственно разрывам.

Аргументы:
[in]length- Минимальная длина невидимой части.
Возвращает:
true, если хотя бы один разрыв был удален.
bool MbContourWithBreaks::DeleteSmallVisContours ( double  length)

Удалить видимые части малой метрической длины.
Соответствует объединению близких разрывов в один. В случае успеха видимые контуры перестраиваются соответственно разрывам.

Аргументы:
[in]length- Минимальная длина видимой части.
Возвращает:
true, если разрывы были изменены.
bool MbContourWithBreaks::GetBreakAtPoint ( const MbCartPoint p,
double  rad,
size_t &  index 
) const

Номер разрыва, край которого попал в окрестность точки.

Аргументы:
[in]p- Точка.
[in]rad- Радиус окрестности точки для поиска разрыва.
[out]index- Номер разрыва.
Возвращает:
true, если разрыв найден.
bool MbContourWithBreaks::GetBreaksInRect ( const MbRect rect,
SArray< size_t > &  breaksNumbers 
) const

Номера разрывов, которые хотя бы одним краем попадают в область.

Аргументы:
[in]rect- Область поиска.
[out]breaksNumbers- Номера разрывов.
Возвращает:
true, если хотя бы один разрыв найден.
bool MbContourWithBreaks::GetBreaksInRect ( const MbContour contour,
SArray< size_t > &  breaksNumbers 
) const

Номера разрывов, которые хотя бы одним краем попадают в область, заданную контуром.

Аргументы:
[in]contour- Контур должен быть замкнутым и иметь правильное направление.
[out]breaksNumbers- Номера разрывов.
Возвращает:
true, если хотя бы один разрыв найден.
bool MbContourWithBreaks::HitToBreaks ( const MbCartPoint p) const

Определить попадает ли точка в любой из разрывов.

Аргументы:
[in]p- Точка для проверки.
Возвращает:
true, если точка попадает в любой из разрывов.
bool MbContourWithBreaks::IsRectInBreak ( const MbRect1D rect)

Находится ли интервал параметров на разрыве.

Аргументы:
[in]rect- Интервал для проверки.
Возвращает:
true, если интервал полностью находится на разрыве или совпадает с ним.
void MbContourWithBreaks::RebuildBreaks ( SArray< size_t > &  oldBaseNumbers)

Обновить невидимые и видимые контуры соответственно базовой кривой мультилинии.
После перестроения разрывы должны соответствовать сегментам базовой кривой мультилинии.

Аргументы:
[in]oldBaseNumbers- Старые номера базовых сегментов,
должны быть запомнены до изменения мультилинии.
void MbContourWithBreaks::RebuildBreaks ( )

Обновить невидимые и видимые контуры соответственно разрывам.

void MbContourWithBreaks::TransformMultlinesBreaks ( const MbMatrix matr)

Преобразование в соответствии с матрицей.
Используется для преобразования мультилинии. Преобразует длину и расстояние от фиксированной точки прямолинейного разрыва, а так же фиксированную точку.

Аргументы:
[in]matr- Матрица преобразования.
double MbContourWithBreaks::GetLocalBreaksParam ( const MbBreaksPart brPart,
size_t &  segNumber 
) const

Посчитать параметр привязки части разрыва в зависимости от типа сегмента контура.

Аргументы:
[in]brPart- Часть разрыва этого контура.
[out]segNumber- Номер сегмента контура.
Возвращает:
Параметр центра разрыва на сегменте контура.
void MbContourWithBreaks::SetBreakFixedPoint ( const MbCartPoint newPoint,
MbBreaksPart part 
)

Поставить фиксированную точку части разрыва.

Аргументы:
[in]newPoint- Новая фиксированная точка.
[out]part- Часть разрыва контура для изменения.
void MbContourWithBreaks::SetBreakFixedVar ( double  newFixedVar,
MbBreaksPart part 
)

Поставить фиксированную переменную части разрыва.

Аргументы:
[in]newFixedVar- Новая фиксированная переменная.
[out]part- Часть разрыва контура для изменения.
size_t MbContourWithBreaks::GetBaseNumber ( size_t  i) const

Номер сегмента базового контура.
Номер сегмента будет найден, если массив номеров не пуст и корректно насчитан, то есть число номеров совпадает с числом сегментов контура

Аргументы:
[in]i- Индекс номера.
Возвращает:
Номер сегмента из массива номеров.
void MbContourWithBreaks::AddBaseSegNumber ( size_t  number)

Добавить номер сегмента базового контура в конец массива.

Аргументы:
[in]number- Номер для добавления.
void MbContourWithBreaks::AddBaseSegNumberAtBegin ( size_t  number)

Добавить номер сегмента базового контура в начало массива.

Аргументы:
[in]number- Номер для добавления.
void MbContourWithBreaks::InsertLastSegNumber ( size_t  lastInd)

Вставить после элемента номер lastInd номер, соответствующий lastInd.

Аргументы:
[in]lastInd- Индекс номера.
void MbContourWithBreaks::DeleteBaseSegNumber ( size_t  ind)

Удалить номер базового сегмента по индексу.

Аргументы:
[in]ind- Индекс номера.
void MbContourWithBreaks::ChangeBreaksSegNumbers ( size_t  begBaseNumber,
ptrdiff_t  deltaN 
)

Изменить номера сегментов в разрывах.
Заданному номеру базового сегмента соответствует сегмент - эквидистанта на контуре. Для всех разрывов: если хотя бы часть разрыва находится на этом сегменте, у всех его частей номер сегмента будет изменен.

Аргументы:
[in]begBaseNumber- Номер базового сегмента.
[in]deltaN- Величина изменение номера сегмента частей разрывов.
void MbContourWithBreaks::ChangeBreaksAtClosed ( bool  newClosed)

Изменить разрывы соотвестсвенно замкнутости.
При изменении признака замкнутости контура нужно изменить разрывы соответственно новому значению замкнутости.
Если контур стал разомкнутым - разрыв, находящийся на первом и последнем сегменте одновременно, делится на 2 части.
Если контур стал замкнутым - разрывы, первый из который примыкает к левому краю первого сегмента контура, а второй из которых примыкает к правому краю последнего сегмента контура, объединяется в один.

Аргументы:
[in]newClosed- Новый признак замкнутости контура.
void MbContourWithBreaks::MoveBreaksSegNumbers ( ptrdiff_t  deltaN)

Изменить номера сегментов частей разрывов.

Аргументы:
[in]deltaN- Величина изменения.
bool MbContourWithBreaks::IsTrasingBreaksPart ( const MbBreaksPart part,
size_t &  vertNumber 
) const

Находится ли часть разрыва этого контура на сегменте обхода вершин.

Аргументы:
[in]part- Часть разрыва этого контура.
[out]vertNumber- В случае успеха вернет номер вершины.
Возвращает:
true, если часть разрыва находится на сегменте обхода вершины.
void MbContourWithBreaks::SwapBreaksAndBaseNumbers ( MbContourWithBreaks other)

Поменяться разрывами.

Аргументы:
[in]other- Контур с разрывами для обмена.
void MbContourWithBreaks::AddContoursBreaks ( const MbContourWithBreaks other)

Добавить разрывы контура.

Аргументы:
[in]other- Контур с разрывами для добавления разрывов.
void MbContourWithBreaks::ChangeBaseNumbers ( const MbContourWithBreaks other)

Заменить номера базовых сегментов.

Аргументы:
[in]other- Контур с новыми номерами.

Объявления и описания членов класса находятся в файле:
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Друзья Макросы