Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GMSAPR

.pdf
Скачиваний:
11
Добавлен:
16.03.2016
Размер:
9.01 Mб
Скачать

11

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

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

1.3 3D моделирование

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

Математический аппарат объемного моделирования сегодня достаточен для создания эффективных инструментов инженера. Да и массовые технические средства сегодня достигли уровня, необходимого для поддержки трехмерной математики (появились аппаратные графические акселераторы). Программное обеспечение предоставляет удобные библиотеки для программирования трехмерной графики, самыми известными из которых являются Microsoft DirectX и кроссплатформенная OpenGL.

Как и в случае плоских CAD-систем, объёмное моделирование развивалось в двух направлениях. Первое — поверхностное моделирование, второе — твердотельное.

В поверхностном моделировании основными инструментами являются поверхности, а базовыми операциями моделирования на их основе — продление, обрезка и соединение. Таким образом, конструктору предлагается описать изделие семейством поверхностей.

12

При твердотельном способе основными инструментами являются тела, ограниченные поверхностями, а главными операциями — булевы объединение, дополнение, пересечение. В этом случае конструктор должен представить изделие семейством простых (шар, тор, цилиндр, пирамида и т.п.) и более сложных тел.

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

1.4Заключение

Вданной главе мы узнали: что такое САПР и для чего они предназначены, какие дают преимущества по сравнению с «классическим» проектированием. Рассмотрели особенности 2D и 3D видов моделирования, выяснили, зачем используюстя сплайны, и какой требуется математический аппарат.

Более подробную информацию о САПР – системах и геометрическому моделированию можно получить из журнала «САПР и графика». Кроме того, в нём можно найти различные обзоры и аналитические статьи, посвящённые автоматизации проектирования (и не только). Существует так же множество других специализированных источников — журналов, книг и Интернетпубликаций.

13

2 Обзор инструментальных средств

Прежде чем приступать к реализации того или иного метода геометрического моделирования необходимо определиться с инструментарием и технологиями, которые дадут возможность справиться с поставленной задачей максимально легко и быстро. В связи с этим, необходимо знать — какие инструменты и технологии можно привлечь для решения той или иной задачи.

Вданной главе рассматриваются:

Особенности программирования под операционную систему Microsoft Windows, особенности 64-разрядной платформы;

Среда разработки Microsoft Visual Studio 2005 .NET как удобный и мощный инструмент создания программного обеспечения, платформа .NET Framework (читается как «дот нэт фрэймвок») и язык С# («си шарп»);

Графическое ядро Windows: GDI, GDI+ и аппаратно-независимая графика;

Графические библиотеки с поддержкой аппаратной акселерации

DirextX и OpenGL.

При выборе используемых технологий нужно взвешивать множество факторов, таких как срок актуальности проекта, поддержки кроссплатформенности, срок разработки и имеющиеся ресурсы, характер пользовательской аудитории, скорость вычислений, объём дискового пространства (или оперативной памяти), необходимых для работы и т.п. И чем больше проект, тем больше приходится задуматься над всеми преимуществами и недостатками существующих подходов. И особенно в области САПР и геометрического моделирования.

Один из основных параметров геометрического моделирования — скорость обсчёта данных визуализации, поэтому программисты как только не ухитряются, увеличивая заветный параметр FPS (Frames per second

14

количество кадров в секунду — мера скорости алгоритмов визуализации). Если при выполнении курсовых проектов необходимо вычислять какие-то графические данные (для визуализации), обязательно нужно учесть параметр FPS и принять все меры по оптимизации. Однако, необходимо помнить, что гораздо проще сделать правильную программу быстрой, чем быструю правильной.

2.1 Особенности программирования под ОС Windows

Любая прикладная программа взаимодействует с Windows через

Application Programming Interface (API). API содержит несколько сотен функций, которые реализуют все необходимые системные действия, такие как выделение памяти, создание окон, вывод на экран и многое другое. Функции API содержатся в библиотеках динамической загрузки (Dynamic Link Libraries (DLL)), которые загружаются в память только в тот момент, когда к ним происходит обращение.

Рассмотрим некоторые аспекты создания программ под ОС Windows более подробно.

2.1.1 Память, многозадачность и файлы, проецируемые в память

Пожалуй, основными отличиями операционных систем Win32 от их предшественниц является вытесняющая многозадачность и возможность прямой адресации до 4 Гбайт.

Вытесняющая многозадачность означает, что операционная система сама решает, какой из программ предоставить в распоряжение процессор. Каждая программа, отработав некоторое время, автоматически выгружается системой, и управление передается другой задаче. Подобная организация позволяет, вопервых, создать иллюзию одновременного выполнения нескольких программ, а во-вторых, не допускает возможности полного захвата ресурсов компьютера

15

какой-нибудь сбойной задачей и таким образом защищает систему от "зависания" (однако на практике это почему-то не всегда так).

Вторая особенность Win32 — 32-разрядная адресация в полностью виртуальном адресном пространстве, то есть любое приложение1, независимо от того, сколько их одновременно выполняется, может распоряжаться 4 Гигабайтами памяти. Причем, они не могут случайно повредить данные друг друга, так как каждому приложению выделяется свое адресное пространство. Получив в свое распоряжение столь большой ресурс памяти, программисты смогли наконец-то вздохнуть свободно.

Кроме перечисленных особенностей Win32, можно отметить также следующие:

поддержка многозадачности на уровне процессов и потоков;

возможность синхронизации потоков;

существование файлов, проецируемых в память;

наличие механизмов обмена данными между процессами.

ВWin32 процессом (process) называется каждая выполняющаяся

программа. Каждый процесс имеет как минимум один поток выполнения. Термин поток (thread) можно определить как логическое направление выполнения программы. Потоки выполняются одновременно с точки зрения пользователя, что предоставляет большие возможности для программиста. Например, при наличии длительных операций в программе их выделяют в отдельный поток, чтобы не блокировался пользовательский интерфейс (GUI – Graphical User Interface — система средств для взаимодействия пользователя с компьютером, основанная на представлении всех доступных пользователю системных объектов и функций в виде графических компонентов экрана: окон, значков, меню, кнопок, списков и т.п.). Если программу-процесс сравнить с рекой, то потоки можно сравнить с ее рукавами. Река может разделиться на несколько потоков-рукавов, которые

1 Приложение - от английского слова Application, в сфере ПО является синонимом слову «программа».

16

будут течь параллельно друг другу. Все потоки, принадлежащие одному процессу, выполняются в одном адресном пространстве и имеют общие с этим процессом исполняемый код, ресурсы и глобальные переменные.

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

(semaphores), исключающие (mutex) семафоры, события (event), критические секции (critical section).

Каждый процесс в Win32 имеет возможность прямой адресации до 4 Гбайт. Однако, если предоставлять каждому выполняемому приложению по 4 Гбайт, то тут никакой оперативной памяти не хватит, да и это не имеет смысла. Поэтому программы работают с виртуальными адресами, которые отличаются от физических адресов памяти. Для того чтобы предоставить в распоряжение программ такой большой объем памяти, Windows использует специальный механизм подкачки памяти с жесткого диска (swap files). Этот механизм называется страничной организацией памяти (paging). При такой организации логическое адресное пространство каждого процесса разбито на отдельные блоки, называемые страницами. Страницы могут располагаться как в оперативной памяти, так и на жестком диске. Операционная система оптимизирует выделение оперативной памяти таким образом, чтобы процессы могли получить быстрый доступ к часто используемым данным. Диспетчер виртуальной памяти отслеживает давно не используемые страницы памяти и отправляет их в файл подкачки на диск.

17

Видимо, похожий механизм управления памятью используется при создании файлов, проецируемых в память (memory-mapped files), называемых еще отображаемыми файлами. Проецируемый файл как бы отображает файл на диске в диапазон адресов в памяти. Это позволяет выполнять операции с файлом прямо точно так же, как если бы работа осуществлялась в памяти. Операционная система сама организует обмен данных между памятью и диском. Использование файлов, проецируемых в память, позволяет значительно упростить работу с файлами, а также дает возможность разделять данные между процессами. Разделение данных происходит следующим образом: два или более процессов создают в своей виртуальной памяти проекции одной и той же физической области памяти — объекта "проецируемый файл". Когда один процесс записывает данные в свою "проекцию" файла, изменения немедленно отражаются и в "проекциях", созданных в других процессах. Для организации такого взаимодействия все процессы должны использовать одинаковое имя для объекта файла, проецируемого в память.

Одно из основных преимуществ файлов, проецируемых в память, состоит в том, что программист может работать с объемами данных, значительно превышающих объем оперативной памяти. В этом случае он как бы «скользит» окном проекции по файлу, проецируя в память только нужный участок.

В Windows каждый процесс имеет свое адресное пространство, поэтому одновременно выполняемые приложения не могут случайно повредить данные друг друга. Однако, часто возникают задачи обмена информацией между процессами. Для этой цели в Win32 предусмотрены специальные способы, позволяющие приложениям получать совместный доступ к каким-либо данным. И все эти способы основаны на механизме проецирования файлов, описанном выше.

Один из способов заключается в создании почтового ящика (mailslot) — специальной структуры в памяти, имитирующей обычный файл на жестком диске. Приложения могут помещать данные в "ящик" и считывать их из

18 "ящика". Когда все приложения, работающие с ящиком, завершаются,

"почтовый" ящик и данные, находящиеся в нем, удаляются из памяти.

Другой способ заключается в организации коммуникационной магистрали — канала (pipe), соединяющего процессы. Приложение, имеющее доступ к каналу с одного его "конца", может связаться с приложением, имеющим доступ к каналу с другого его "конца" и передать ему данные. Канал может предоставлять приложениям односторонний или двусторонний доступ. При одностороннем доступе одно приложение может записывать данные в канал, а другое считывать; при двустороннем — оба приложения могут выполнять операции чтения/записи. Существует возможность организовать канал, коммутирующий сразу несколько процессов.

2.1.2 64-разрядная архитектура

В последнее время всё большее распространение получают 64-разрядные платформы. Приложение, оптимизированное для выполнения на 64-разрядной платформе, имеет преимущества в скорости работы по сравнению с 32-битным приложением.

Вообще, Win64-код объединяет в себе основные возможности 32-разрядного кода, а также включает изменения, связанные с повышением разрядности. В распоряжении программиста оказываются:

64-разрядные указатели;

64-разрядные типы данных;

32-разрядные типы данных;

интерфейс Win64 API.

Следует обратить внимание, что 32-разрядные типы данных не исчезли при повышении разрядности платформы (как было с 16-разрядными типами данных при переходе к Win32). Это связано с тем, что даже в 64-разрядных приложениях в большинстве случаев переменные не требуют объема памяти в 8 байт, поэтому использование 64-разрядных типов в таких случаях оказалось бы

19

крайне неэффективным. Операционной системе пришлось бы дописывать нули в старшие разряды, чтобы увеличить размер данных до 8 байт (такие данные к тому же очень неудобно считывать). А это привело бы к снижению производительности и перерасходу памяти.

Иная участь постигла 32-разрядные указатели: они полностью исчезли. Дело в том, что использование 32-разрядных указателей накладывает ограничение на объём адресуемой памяти. Например, одним из главных преимуществ плоской модели памяти (она является основной для программирования 32-разрядных приложений для платформы NT), использующей 32-разрядные указатели, является возможность создания сегментов объёмом до 4 Гбайт. Новые 64-разрядные указатели обеспечивают возможность адресации до 16 Терабайт (1 Тбайт = 1024 Гбайт) памяти.

Функции в Win64 API претерпели относительно незначительные изменения. Названия некоторых из них были изменены так, чтобы отразить принадлежность к 64-разрядной платформе. В большинстве случаев изменениям подверглись лишь типы параметров, являющихся аргументами вызова функций. Все остальные преимущества (возможность отказаться от использования файлов подкачки и т. д.) связаны либо с увеличившимся объемом адресации, либо с новыми типами данных.

Если бы 32-разрядные приложения работали в 64-разрядной среде так же эффективно, как в «родной», не было бы никакого смысла создавать 64разрядный компилятор. Однако, производительность 32-разрядных приложений при работе на 64-разрядной платформе существенно снижается. Это связано с тем, что для запуска 32-разрядного приложения операционной системе приходится выполнять ряд подготовительных действий: увеличивать все 32-разрядные указатели до размера в 8 байт, преобразовывать вызовы APIфункций, заменять типы 32-разрядных данных на 64-разрядные.

Здесь следует остановиться и подробнее рассмотреть вопрос о преобразовании данных. Win64 допускает использование и 32-, и 64-разрядных данных. Поэтому, когда операционная система встречает 32-разрядные данные

20

в 32-разрядном приложении, она должна ответить на вопрос: «Преобразовать ли эти данные в 64-разрядные или оставить, как есть?» Делается это для того, чтобы оптимизировать работу приложения. Если операционная система встретит 32-разрядные данные в 64-разрядном приложении, то не обратит на них внимания, так как платформа Win64 допускает использование 32разрядных типов данных. Преобразование 32-разрядных данных в 64разрядные осуществляется точно так же, как и преобразование 32-разрядных указателей, — дописыванием нулей в старшие разряды. Очевидно, что на выполнение всех этих операций тратится масса системных ресурсов, и, как результат, производительность снижается. Это особенно заметно при работе 32-разрядных драйверов на 64-разрядной платформе. В связи с тем, что драйверы являются связующим звеном между оборудованием и операционной системой, именно они используются наиболее интенсивно.

Для того, чтобы перенести уже разработанные под Win32 программы под платформу Win64), необходимо провести следующие модификации (у программистов вместо термина «перенести», как правило, используется термин

портировать:

заменить "старые" типы новыми в тех случаях, когда это необходимо;

заменить все 32-разрядные указатели на 64-разрядные (иначе Win64

будет во время выполнения программы (Runtime), так сказать, «на лету», расширять указатели и программа потеряет в производительности);

заменить всех API-функций Win32 их 64-разрядными эквивалентами.

Для создания кросс-платформенных приложений (это предпочтительней первого варианта, так как программы будут работать оптимизировано на различных платформах, в данном случае как на Win32, так и на Win64) следует выполнить следующие действия:

воспользоваться макросами, определяющими платформу;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]