Основы САПР (CAD,CAM,CAE) - (Кунву Ли)(2004) (951262), страница 95
Текст из файла (страница 95)
Есор *1оор: 5игтасе *вил(асе: /* Идентификатор грани */ /* Указатель на оболочку */ /* Указатель на следуоцую грань */ /* Указатель на иольцо */ /я указа~ель на геометрические данные *! 5«гис« 5пО !сор ( тл« 1б: Гасе *Гасе: Есор *лех«: Ебйе *ебйе; тл« *«уре . ). /* Идентификатор кольца */ /* Указатель на грань */ /* Указатель на следующее кольцо */ !* указа~ель на ребро */ !* Тип кольца */ Приложение Б Реализация структуры данных крыльевых ребер Б листинге Б.( показана структура данных крыльевых ребер, используемая в 5(ч)Е)МОЮ. Структура данных реализована на языке С.
,' ЛистинГ Б.д.. Реализация структуры данных крыльевых ребер в 5(ч()МОЕ) «уребет 5«гис« впи Ьобу Вобу; «уребе( 5«гис« впи вйе!1 5пе11: «УРебет 5«гис« вли Тасе Гасе: «уребет 5«гис« зпи 1оср Есор: «уребе( 5«гис« впи о)се Ебйе; «уребеу 5«гис« впи чег«ех уег«ех: «уребе( 5«гис« вли виг(асе 5игтасе; «уребе( 5«гис« вли сигче Силке: «уребет 5«гис« впи ротс« Ротс«: 5«ГОС«ьлц Ебйе зл« тб: /* Идентификатор ребра */ Еоор *1ег« 1сор; /* Указатель на левое кольцо +/ Еоср "г1ОП« !оор: l* Указатель на правое кольцо */ Еское *1ег« аоя; /* Указатель на левую руку (левое ребра против часовой стрелки) */ Ебйе *1е(« 1ед: /* Указатель на левую ногу (левое ребро по часовой стрелке) я/ ебйе *гтсь« агш; /* указатель на правую руку (правое ребро против часовой стрелки) */ Ебйе *стоп« 1е(к / Указатель на правую ногу (гравое ребро по часовой стрелке) и/ я«а11 чег«ех; /* Указатель на хвостовую вершину (предыдущая вершина) */ уег«ех япеаб чег«ех.
/* Указатель на головную вершину (следуоцая вершина) */ *СОГЧЕ; /* Указатель на геонетрические данные */ ): иеь кеь МЕЬ кет щ Ч) Рис. В.1. Действие оператора МЕЧЧЬВ (КЕЧЧЬВ) Рис. В.э. Действие оператора МЕ( (КЕИ ИЕ1 (В. Щ. Ч1. Ч2. $Е1. $$2] кеь (в. аь). ач). ачг, е), ьг) Приложение В Операторы Эйлера 6.1. Операторы Эйлера, используемые в бйОМ00 В.1.1. Мв(уЫ и КЕМИН вЂ” создать (уничтожить) ребро, две вершины, внешнее кольцо и оболочку Оператор МЕЧЧЬ8 вызывается для создания оболочки при первоначальном создании объема илп при добавлении пустоты к существующему объему. В реальности МЕИРА.8 просто выделяет место в памяти под оболочку, объявляя о ее создании. Он также создает две вершины, ребро между этими вершинами и внешнее кольцо, обходящее вершины в обоих направлениях.
Это кольцо будет использоваться в качестве начального элемента, который превратится в реальную оболочку по ходу операции моделирования. Прн созланни внешнего кольца создается также грань. Однако геометрическая информация о грани при создании ее оператором МЕЧИ.8 не добавляется, поскольку это всего лишь абстрактная грань, с помощью которой вылеляется требуемая память'. Необходимая геометрическая информация появится, когда начальное ребро по ходу операции моделирования превратится в замкнутую цепочку, содержащую в себе область. Описание изменения топологии, произведенного оператором МЕЧЧ 8„иллюстрируется схематической диаграммой на рис. В.1.
Периферийное кольцо Е1 представляет собой цепочку, проходящую по маршруту Ч1-Ч2-Ч1 и не содержащую в себе площади. Площадь появится в ней по ходу моделирования, и соответствующая грань получит необходимую геометрическую информацию. Входные и выходные аргументы оператора МЕЧЧ 8 могут быть описаны следующим образом: иечче5 (В, ае1 ач1 ачг, аь), $51 х1 11 л х2 ч2 72) Выделение места е памяти для тоислсгическсгс элемента. В Этаи ВЫрежсиям ЭЛЕМЕНтм; Псрсд Кптпрмг)цт Стпат СВМВВЛ'($'„-яэяяКйся ЭЫХОдз ными элементами, генерируемыми оператором МЕЧЧЕ8, а остальные элементы являются входными. Поэтому данное выражение можно интерпретировать так, что на объеме В создаются новое ребро Е1, новые вершины У1 н Ч2 в точках (х1; у1, е1) и (х2, у2, е2), новое внешнее кольцо Е1 и новая оболочка 81.
Тот же способ, записи мы булем использовать лля различения входных и выходных аргументов в лругнх операторах Эйлера. Соответственно, обратный оператор КЕЧЧ 8 может быль описан следукицим образом: КЕЧЧ)5 (В. Е1. Ч1. У2. щ, 51. $Х1. $11. $71, $Х2. $12. $72) Обратные операторы весьма полезны для реализации функции Откат, или Олтмена (ИЫо), которая отменяет ранее выполненную операцию моделирования.
': Именно поэтому большинство систем твердотельного моделирования одновременно реализуют и прямые, и обратные операторы. В.1.2. МЕЕ и КЕŠ— создать (уничтожить) ребро и внешнее кольцо Оператор МЕ1. добавляет ребро Е1, соединяющее вершины Ч1 и Ч2 в кольце (.1.::. (рис. В.2). В результате применения оператора МЕ1 исходное кольцо 1.1 делж-':,'; ся на два новых кольца ( 1 и Е2 Исходное кольцо, которое подвергается делению, ':, может быть внешним кольцом (рис. В.2, а) или кольцом отверстия (рис. В2, 6).т:: ... Но просто добавить ребро и кольцо мало: оператор МЕ(.
должен обновлять са':;.,'.; единения ребер в вершинах Ч) и Ч2 и связи ребро-кольцо, чтобы отразить разде- ':, ление исходного кольца 11 на два новых кольца. Входные и выходные аргументы операторов МЕ1. и КЕ(. могут быть описаны сле- дующим образом (8 по-прежнему обозначает объем): В.1.2. ие1е и кеее-'. создать (уничтд)де(деть) ребро и вершину Оператор МЕЧ создает ребро Е1, проходящее от вершины Ч! кольца Е1 до заданной точки (х, у, г), н добавляет это ребро к кольцу К! (рис.
В.З). Разумеется, в заданной точке создается также новая вершина ч2. Ребро Е1 может быль добавлено к внешнему кольцу (рис. В.З, а) или к кольцу отверстия (рис. В.З, 6). МЕЧ КЕЧ Ч! Ч1 МЕЧ КЕЧ б Рис. В.З. Действие оператора МЕЧ (КЕЧ) Как и в случае оператора МЕЕ, необходимо обновить связь ребра в вершине Ч1, чтобы новое ребро Е1 было включено в кольцо Е! (то есть ребро Е1 будет фигурировать дважды в списке ребер, как соединительные ребра, описанные в разделе 5.3.2, когда из обновленной информации о связях будет получен список ребер кольца Е! ). Входные и выходные аргументы операторов МЕЧ и КЕЧ могут быть описаны следующим образом (В по-прежнему обозначает объем): МЕЧ (В. О, У1.
ЬЕ1, И2. Х, Н. 2) КЕЧ (В. Ы1. ВУ). Е1. Ч2. ЬХ. И. ВЕ) Оператор КЕЧ является обратным по отношению к МЕЧ. на языке 'С йа'основе- структуры:крыльевых ребер (лавтийг"Б.1), Выполнение шагов процедуры в листинге В.! четко демонстрирует, как реализуютея зти операторы Эйлера.
Другие операторы Эйлера могут быть реализовайы аналогично. мчв кче Рис. В.а. действие оператора Ь<ЧЕ (КЧЕ) Листинг В.1. Реализация оператора ИЧЕ МНЕ (В. Е1. НК Е2. х. у, г) Всх)у *В; Ебде *Е1, Негах ' Ч1: Ебде **Е2: бооЫе х. у. г. ( (*Н1) - вт!)ос(а!герт(уеггех)): (>Е2) - пе!)ос(югеот(Ебде)): (+Е2)->та!1 чеггех - *Ч1: <*Е2)->Пеаб чеггех - Е1->Пеаб чеггех: (*Е2)->г!дьс !ед - Е1: (*Е2)->!е<г !ед - Е1: (>Е2)- пдп< агв - Е1->пдьг апп: <*Е2)->)е<г агв = Е1->)етг апп: (*Е2)->пои 1оор - Е1->попс )оор: (*Е2)->)ек 1оор - Е1->)е<г 1оор: (*У1)->абдо = *Е2: (*Л)-»ро!пг.х - х: <*Ч1)-»ро!пг.у - у: (*Л)->ро!пг.г - г: Е1->г!дог апп = Е1->)е<г агтп = *Е2, е1->ьеаб чегсех >ч): ) В.1.2.
И!<Е и КчŠ— создать (уничтожить) вершину и ребро Оператор МЧЕ разделяет ребро Е1, добавляя к нему вершину Ч1 в точке (х, у, г), и соответственно заменяет старое ребро Е1 двумя новыми Е1 и Е2 (рис. В.4). Поэтому входные и выходные аргументы операторов МЧЕ и КЧЕ могут быть описаны следующим образом (В по-прежнему обозначает объем): МУЕ <В Е1 И1. К<2. Х.
Н. 2) МНЕ (В, ВЕ1. Ч1. Е2. ВХ. И, Ы) Оператор КЧЕ можно интерпретировать как обратный по отношению к МЧЕ. Эффекты, показанные на рис. В.4, достигаются путем изменения одной вершины и соседних ребер Е1 и записью аналогичной информации для Е2. Подробности приведены в листинге В.Е, который демонстрирует реализацию оператора МЧЕ В.1.5. ИЕКН и КЕИН вЂ” создать (уничтомаеть) ребро и уничтожить (создать) кольцо отверстия Оператор МЕКН соединяет внешнее кольцо и кольцо его отверстия, добавляя.г ':-;. ребро, в результате чего получается одно внешнее кольцо (рис. В.5, а), либо со;:: ':, единяет два кольца отверстия в одно кольцо отверстия (рис.
В5, 6). Если гово..: ,' рить точнее, он соединяет вершину Ч! кольца Е! с вершиной Ч2 кольца Ч2, добан-».,:; ляя между ними ребро Е1, и изменяет кольцо Е! так, чтобы оно включало 12,.;;: ' Таким образом, входные и выходные аргументы операторов МЕКН и КЕМН могуГ' "'!-. быть описаны так: МЕКМ (В, Л. Ч2. 11, 12 Ы1) КЕММ (В. И1. И2, И). Й2.
Е1) Оператор КЕМН можно интерпретировать как обратный по отношению к МЕКК. -- ьяжя КРИН ивкв квмв УЕ в Рис. В.т. Действие оператора МРКН (КРМН) икки Рис. В.В. Действие оператора МЕКН (КЕМН) иззу кзеу Рис. В.В. действие оператора МЕЕЧ(К2ЕЧ) Ут рис. В.В. Результат после шага 1 В 1.6. МйЕЧ и К2ЕЧ вЂ” создать (уничтожить) ребро нулевой длины и вершину . Оператор М2ЕЧ разбивает вершину Ч1 на две новые вершины Ч1 и Ч2„добавляя ребро Е1 нулевой длины (рис. В.б). Вершина разбивается вертикально, а не горизонтально, поскольку новое ребро Е1 принадлежит заданным кольцам Е( и 12. Таким образом, вершина Ч( будет разбита горизонтально, если на входе будут заданы кольца ) 3 и 1.4 (см. рис. 5.31).
Входные и выходные аргументы операторов МЕЧ и КЕЕЧ могут быть описаны так: ИЕЕУ (В, Е). Е2. У1. ВЕ1. ЬУ2) ХЕЕН (В. Ы.1. ВЕ2. ВУ). Е1.И2) Оператор К2ЕЧ можно интерпретировать как обратный по отношению к М2ЕЧ. В.1.7. МРКН и КРИН вЂ” создать (уничтожить) внешнее кольцо и уничтожить (создать) кольцо отверстия Оператор МРКН преобразует кольцо отверстия во внешнее кольцо (рис. В.Т). Точ очнее, он преобразует кольцо отверстия 1! во внешнее кольцо. Кроме того, он дает на выходе кольцо 1.2, чтобы зафиксировать тот факт, что кольцо Е1 изначально было кольцом отверстия 12. Аналогичным образом, оператор КРМН преобразует внешнее колыю Е1 в кольцо отверстия, принадлежащее внешнему кольцу Е2. Исходя из этого. входные и выходные аргументы операторов МРКН и КРМН могут быть описаны так: ИРКН (В, Ы.