#include <iostream>
#include <string>
#include <algorithm>
using namespace gismo;
void printKnotVector(
const gsKnotVector<>& kv,
const std::string& name);
std::vector<real_t> makeVectorOfKnots();
void print(const real_t& el);
int main(
int argc,
char* argv[])
{
gsCmdLine cmd(
"Tutorial on gsKnotVector class.");
try { cmd.getValues(argc,argv); } catch (int rv) { return rv; }
gsInfo << "------------- Constructions -----------------------------\n";
printKnotVector(kv0, "kv0");
printKnotVector(kv1, "kv1");
printKnotVector(kv2, "kv2");
real_t a = 1.0;
real_t b = 3.0;
unsigned interior = 4;
unsigned multEnd = 3;
printKnotVector(kv3, "kv3");
std::vector<real_t> knots = makeVectorOfKnots();
printKnotVector(kv4, "kv4");
printKnotVector(kv5, "kv5");
printKnotVector(kv6, "kv6");
printKnotVector(kv7, "kv7");
gsInfo << "\n\n"
<< "------------- Looping over knots -----------------------\n"
<< "kv7: \n";
{
gsInfo << *it << " ";
}
gsInfo << "\n\n";
{
gsInfo << *it << " ";
}
gsInfo << "\n\n\n";
gsInfo << "------------- Some properties -----------------------\n"
<< "kv7: \n\n";
printKnotVector(kv7);
gsInfo <<
"kv7.size(): " << kv7.
size() <<
"\n\n"
<<
"kv7.findspan(1.5): " << kv7.
iFind(1.5) - kv7.
begin() <<
"\n\n"
<<
"kv7.findspan(2): " << kv7.
iFind(2) - kv7.
begin() <<
"\n\n"
<<
"kv7.has(2): " << kv7.
has(2) <<
"\n\n"
<<
"kv7.has(2.1): " << kv7.
has(2.1) <<
"\n\n"
<<
"kv7.isUniform(): " << kv7.
isUniform() <<
"\n\n"
<<
"kv7.numKnotSpans(): " << kv7.
uSize() - 1 <<
"\n\n"
<<
"kv7.isOpen(): " << kv7.
isOpen() <<
"\n\n"
<<
"kv7.multiplicity(1): " << kv7.
multiplicity(1) <<
"\n\n\n";
gsInfo << "------------- Some operations -----------------------\n";
printKnotVector(kv6, "kv6");
std::vector<real_t> unique = kv6.
unique();
gsInfo << "\nUnique knots: \n";
std::for_each(unique.begin(), unique.end(), print);
gsInfo << "\n\nGreville points: \n" << greville << "\n\n";
gsInfo << "Multiplicities: ";
std::for_each(mult.begin(), mult.end(), print);
gsInfo << "\n\n";
printKnotVector(kv6, "kv6");
gsInfo << "kv6.uniformRefine()\n";
printKnotVector(kv6);
gsInfo << "kv6.degreeElevate()\n";
printKnotVector(kv6);
gsInfo << "For other capabilites of gsKnotVector look at "
"src/gsNurbs/gsKnotVector.h\n" << "\n";
return 0;
}
void print(const real_t& el)
{
gsInfo << el << " ";
}
const std::string& name)
{
gsInfo << name << ":\n";
gsInfo << "\n" << "\n";
}
{
for (gsKnotVector<>::const_iterator it = kv.
begin(); it != kv.
end(); it++)
{
gsInfo << *it << " ";
}
gsInfo << "\n\n";
}
std::vector<real_t> makeVectorOfKnots()
{
std::vector<real_t> knots;
knots.push_back(0);
knots.push_back(0.1);
knots.push_back(0.5);
knots.push_back(0.6);
knots.push_back(0.9);
knots.push_back(1);
return knots;
}