﻿•--------------------------------------------------------------•
| It is important to read the following remarks, otherwise the |
| provided test applications may throw run-time exceptions!    | 
•--------------------------------------------------------------•

Folders •Example_0x• (x = 1,2,3,4,5) contain the source of Qt-
based applications that illustrate some of the possibilities of 
the proposed function library.

Although our library does not depend on the internal libraries 
of the •Qt Software Development Kit• (Qt SDK), the five 
examples provided in the current folder are based on Qt-widgets 
in order to handle the graphical user interface (GUI) of the 
cross-platform test applications.

The main parts of the source codes of the 5 test applications 
are also described in •Chapter 3• of the •User Manual• without 
assuming Qt-based software development. (The •User Manual• can 
be found in the folder •../../Doc•.) Therefore, if you do not
want to install the •Qt SDK 5.4+•, you can skip the testing of
these applications, and -- based on the •User Manual• -- 
you can write your own test programs, but in this case the GUI 
must be implemented by you. (In order to fully understand the
source of the provided test applications, please study the 
corresponding parts of the •User Manual•.)

Screenshots •png/Example_0x[_a|_b|_c|_d|_e|_f].png• (x = 1,2,3,
4,5) illustrate both the output and the GUI of our applications.
After successful compilation and considering the remarks below, 
the user should be able to reproduce these screenshots.

-------------------
System requirements
-------------------
We assume that the user has:
- a •multi-core CPU•; and
- a •graphics adapter• managed by a driver that supports at 
  least •OpenGL 3.0•.

For efficiency or run-time measurements run/test the •release• 
builds of the provided test applications.

---------------------------------------
Building the provided test applications
---------------------------------------
We also assume that users have already installed:
- a compiler that supports at least •OpenMP 2.0• and which 
  is compatible at least with the •C++ 11• standard;
- the •OpenGL Extension Wrangler• (GLEW) library; 
- the community edition of the •Qt Software Development Kit• 
  (Qt SDK 5.4+);
- both the debug and release builds (and their common include 
  files) of our function library.

To install the latest •Qt SDK•, the library •GLEW• and the 
debug/release build of our function library, please read the 
platform-specific instructions in the file 

  •../01_Library/readme.txt•.

-----------
At run-time
-----------
All test applications try to load vertex/fragment shaders 
(*.vert/*.frag) or 3-dimensional model files (*.off) stored 
in the folders 

  ../00_Dependencies/Shaders 

and 

  ../00_Dependencies/Models,

respectively. On Macintosh platforms, it may happen that all
shader- and model-related relative paths that appear in the 
files 

  Examples_0x/GUI/GLWidget.cpp, x = 1,2,3,4,5

must be defined differently, i.e., one should store these
files in the folder .app/Contents/Resources in the application 
bundles that are generated by the •Qt Creator• after successful 
builds. (Under Unix/Linux and Windows platforms the specified
relative paths should be working correctly.)

---------------------------------
Short description of the examples
---------------------------------

------------
•Example_01•
------------
Illustrates the creation of different types of EC space objects,
differentiates and renders the unique normalized B-bases of the
constructed spaces.

------------
•Example_02•
------------
Generates different types of B-curves, and performs order elevation
division on them.

------------
•Example_03•
------------
Illustrates the B-representation (i.e., the control point
exact description) of several arcs of a logarithmic spiral given 
in traditional parametric form. Note that this exponential-
trigonometric curve can be approximated but cannot be exactly 
described by means of the standard (rational) Bézier and 
non-uniform B-spline curve modeling tools.

------------
•Example_04•
------------
Randomly generates a B-surface by using different types of 
normalized B-bases in directions u and v, then performs order 
elevation and subdivision on it.

------------
•Example_05•
------------
Illustrates the B-representation (i.e., the control point based
exact description) of several patches of an exponential-trigonometric
transcendental surface given in traditional parametric form that 
can be approximated but cannot be exactly represented by the 
standard (rational) Bézier and non-uniform B-spline surface 
modeling tools.


