13 #ifndef eli_geom_surface_piecewise_hpp
14 #define eli_geom_surface_piecewise_hpp
21 #include "eli/code_eli.hpp"
36 template<
template<
typename,
unsigned short,
typename>
class surface__,
typename data__,
unsigned short dim__,
typename tol__ >
42 template<
template<
typename,
unsigned short,
typename>
class surface1__,
typename data1__,
unsigned short dim1__,
typename tol1__ >
53 template<
template<
typename,
unsigned short,
typename>
class surface__,
typename data__,
unsigned short dim__,
typename tol__=
eli::util::tolerance<data__> >
116 typename patch_collection_type::const_iterator scit, it;
117 for (scit=
patches.begin(), it=p.patches.begin(); scit!=
patches.end(); ++scit, ++it)
145 surface_type *
get_patch(
const index_type &ui,
const index_type &vi)
152 const surface_type *
get_patch(
const index_type &ui,
const index_type &vi)
const
183 printf(
"U parameter:\n");
185 printf(
"V parameter:\n");
199 void get_pmap_uv(std::vector<data_type> &upmap, std::vector<data_type> &vpmap)
const
205 void init_u(
const index_type &nsegu,
const data_type &du = 1,
const data_type &u0 = 0)
212 void init_v(
const index_type &nsegv,
const data_type &dv = 1,
const data_type &v0 = 0)
219 void init_uv(
const index_type &nsegu,
const index_type &nsegv,
const data_type &du = 1,
const data_type &dv = 1,
const data_type &u0 = 0,
const data_type &v0 = 0)
227 template<
typename it__>
228 void init_u(
const it__ &dus,
const it__ &due,
const data_type &u0 = 0)
235 template<
typename it__>
236 void init_v(
const it__ &dvs,
const it__ &dve,
const data_type &v0 = 0)
243 template<
typename it__>
244 void init_uv(
const it__ &dus,
const it__ &due,
const it__ &dvs,
const it__ &dve,
const data_type &u0 = 0,
const data_type &v0 = 0)
254 typename patch_collection_type::iterator uit;
255 typename patch_strip_type::iterator vit;
260 index_type d = vit->degree_u();
266 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
284 typename patch_collection_type::iterator uit;
285 typename patch_strip_type::iterator vit;
290 index_type d = vit->degree_v();
296 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
318 index_type ifirst, ilast, j;
319 typename surface_type::curve_type bc0, bc1;
321 ifirst =
ukey.
key.begin()->second;
322 ilast =
ukey.
key.rbegin()->second;
326 patches[ifirst][j].get_uconst_curve(bc0, 0);
327 patches[ilast][j].get_uconst_curve(bc1, 1);
341 index_type i, jfirst, jlast;
342 typename surface_type::curve_type bc0, bc1;
344 jfirst =
vkey.
key.begin()->second;
345 jlast =
vkey.
key.rbegin()->second;
349 patches[i][jfirst].get_vconst_curve(bc0, 0);
350 patches[i][jlast].get_vconst_curve(bc1, 1);
362 typename patch_collection_type::const_iterator uit;
363 typename patch_strip_type::const_iterator vit;
364 bounding_box_type bb_local;
371 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
373 vit->get_bounding_box(bb_local);
379 void rotate(
const rotation_matrix_type &rmat)
381 typename patch_collection_type::iterator uit;
382 typename patch_strip_type::iterator vit;
386 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
393 void rotate(
const rotation_matrix_type &rmat,
const point_type &rorig)
395 typename patch_collection_type::iterator uit;
396 typename patch_strip_type::iterator vit;
400 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
402 vit->rotate(rmat, rorig);
409 typename patch_collection_type::iterator uit;
410 typename patch_strip_type::iterator vit;
414 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
416 vit->translate(trans);
423 typename patch_collection_type::iterator uit;
424 typename patch_strip_type::iterator vit;
428 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
438 typename patch_collection_type::iterator uit;
439 typename patch_strip_type::iterator vit;
443 for (vit=(*uit).begin(); vit!=(*uit).end(); ++vit)
456 index_type nu_old(
nu), nv_old(
nv);
461 for (index_type i=0; i<
nu; ++i)
463 for (index_type j=0; j<
nv; ++j)
465 patches[i][j]=old_patches[j][i];
487 error_code get(surface_type &surf,
const index_type &ui,
const index_type &vi)
const
490 return get(surf, du, dv, ui, vi);
493 error_code get(surface_type &surf, data_type &du, data_type &dv,
const index_type &ui,
const index_type &vi)
const
499 typename keymap_type::const_iterator uit, vit;
509 error_code set(
const surface_type &surf,
const index_type &ui,
const index_type &vi)
515 typename keymap_type::const_iterator uit, vit;
530 typename surface_type::curve_type bc0, bc1;
532 typename keymap_type::const_iterator uit, vit;
535 surface_type s =
patches[uk][vk];
539 surf.get_uconst_curve(bc0, 0);
540 s.get_uconst_curve(bc1, 0);
548 surf.get_uconst_curve(bc0, 1);
549 s.get_uconst_curve(bc1, 1);
557 surf.get_vconst_curve(bc0, 0);
558 s.get_vconst_curve(bc1, 0);
566 surf.get_vconst_curve(bc0, 1);
567 s.get_vconst_curve(bc1, 1);
585 typename keymap_type::iterator uit, vit;
586 data_type uu(0), vv(0);
589 find_patch(uk, vk, uit, vit, uu, vv, u_in, vmin);
592 if ((uk == -1) || (vk == -1))
597 if (tol.approximately_equal(uu, 0))
599 if (tol.approximately_equal(uu, 1))
602 return split_u(uk, uit, u_in, uu);
608 typename keymap_type::iterator uit, vit;
609 data_type uu(0), vv(0);
612 find_patch(uk, vk, uit, vit, uu, vv, umin, v_in);
615 if ((uk == -1) || (vk == -1))
620 if (tol.approximately_equal(vv, 0))
622 if (tol.approximately_equal(vv, 1))
625 return split_v(vk, vit, v_in, vv);
630 typename keymap_type::iterator uit, vit;
637 index_type uk = uit->second;
638 index_type vk = vit->second;
640 surface_type s =
patches[uk][vk];
645 data_type d = s.eqp_distance_bound(sc);
650 data_type u_in = uit->first +
static_cast<data_type
>(0.5) * delta_u;
659 d = s.eqp_distance_bound(sc);
665 for (index_type uk=0; uk<
nu; ++uk)
667 for (index_type vk=0; vk<
nv; ++vk)
676 typename keymap_type::iterator uit, vit;
683 index_type uk = uit->second;
684 index_type vk = vit->second;
686 surface_type s =
patches[uk][vk];
691 data_type d = s.eqp_distance_bound(sc);
696 data_type v_in = vit->first +
static_cast<data_type
>(0.5) * delta_v;
705 d = s.eqp_distance_bound(sc);
711 for (index_type uk=0; uk<
nu; ++uk)
713 for (index_type vk=0; vk<
nv; ++vk)
729 typename keymap_type::const_iterator uit, vit;
730 data_type uu(0), vv(0);
733 find_patch(uk, vk, uit, vit, uu, vv, u, vmin);
735 assert ((uk != -1) && (vk != -1));
740 for( index_type i=0; i<
nv; i++)
746 surface_type s=
patches[uk][vk];
750 s.get_uconst_curve(c, uu);
759 typename keymap_type::const_iterator uit, vit;
760 data_type uu(0), vv(0);
763 find_patch(uk, vk, uit, vit, uu, vv, umin, v);
765 assert ((uk != -1) && (vk != -1));
770 for( index_type i=0; i<
nu; i++)
776 surface_type s=
patches[uk][vk];
780 s.get_vconst_curve(c, vv);
788 index_type
nu,
nv, iu, iv;
790 piecewise_curve_type c;
791 std::vector<data_type> pmap, ldis, ldis_out;
799 auto comp = [&tol](
const data_type &x1,
const data_type &x2)->
bool
801 return tol.approximately_less_than(x1, x2);
809 for (iv=0; iv<
nv; ++iv)
816 std::set_union(uconst.begin(), uconst.end(), ldis.begin(), ldis.end(), std::back_inserter(ldis_out), comp);
817 std::swap(uconst, ldis_out);
826 for (iu=0; iu<
nu; ++iu)
833 std::set_union(vconst.begin(), vconst.end(), ldis.begin(), ldis.end(), std::back_inserter(ldis_out), comp);
834 std::swap(vconst, ldis_out);
844 index_type
nu,
nv, iu, iv;
846 piecewise_curve_type c;
847 std::vector<data_type> pmap, ldis, ldis_out;
855 auto comp = [&tol](
const data_type &x1,
const data_type &x2)->
bool
857 return tol.approximately_less_than(x1, x2);
865 for (iv=0; iv<
nv; ++iv)
872 std::set_union(uconst.begin(), uconst.end(), ldis.begin(), ldis.end(), std::back_inserter(ldis_out), comp);
873 std::swap(uconst, ldis_out);
882 for (iu=0; iu<
nu; ++iu)
889 std::set_union(vconst.begin(), vconst.end(), ldis.begin(), ldis.end(), std::back_inserter(ldis_out), comp);
890 std::swap(vconst, ldis_out);
897 point_type
f(
const data_type &u,
const data_type &v)
const
901 data_type uu(0), vv(0);
905 assert((uk != -1) && (vk != -1));
907 return patches[uk][vk].f(uu, vv);
910 point_type
f_u(
const data_type &u,
const data_type &v)
const
914 typename keymap_type::const_iterator uit, vit;
915 data_type uu(0), vv(0);
919 assert((uk != -1) && (vk != -1));
923 return patches[uk][vk].f_u(uu, vv)/delta_u;
926 point_type
f_v(
const data_type &u,
const data_type &v)
const
930 typename keymap_type::const_iterator uit, vit;
931 data_type uu(0), vv(0);
935 assert((uk != -1) && (vk != -1));
939 return patches[uk][vk].f_v(uu, vv)/delta_v;
942 point_type
f_uu(
const data_type &u,
const data_type &v)
const
946 typename keymap_type::const_iterator uit, vit;
947 data_type uu(0), vv(0);
951 assert((uk != -1) && (vk != -1));
955 return patches[uk][vk].f_uu(uu, vv)/(delta_u*delta_u);
958 point_type
f_uv(
const data_type &u,
const data_type &v)
const
962 typename keymap_type::const_iterator uit, vit;
963 data_type uu(0), vv(0);
967 assert((uk != -1) && (vk != -1));
972 return patches[uk][vk].f_uv(uu, vv)/(delta_u*delta_v);
975 point_type
f_vv(
const data_type &u,
const data_type &v)
const
979 typename keymap_type::const_iterator uit, vit;
980 data_type uu(0), vv(0);
984 assert((uk != -1) && (vk != -1));
988 return patches[uk][vk].f_vv(uu, vv)/(delta_v*delta_v);
991 point_type
f_uuu(
const data_type &u,
const data_type &v)
const
995 typename keymap_type::const_iterator uit, vit;
996 data_type uu(0), vv(0);
1000 assert((uk != -1) && (vk != -1));
1004 return patches[uk][vk].f_uuu(uu, vv)/(delta_u*delta_u*delta_u);
1007 point_type
f_uuv(
const data_type &u,
const data_type &v)
const
1011 typename keymap_type::const_iterator uit, vit;
1012 data_type uu(0), vv(0);
1016 assert((uk != -1) && (vk != -1));
1021 return patches[uk][vk].f_uuv(uu, vv)/(delta_u*delta_u*delta_v);
1024 point_type
f_uvv(
const data_type &u,
const data_type &v)
const
1028 typename keymap_type::const_iterator uit, vit;
1029 data_type uu(0), vv(0);
1033 assert((uk != -1) && (vk != -1));
1038 return patches[uk][vk].f_uvv(uu, vv)/(delta_u*delta_v*delta_v);
1041 point_type
f_vvv(
const data_type &u,
const data_type &v)
const
1045 typename keymap_type::const_iterator uit, vit;
1046 data_type uu(0), vv(0);
1050 assert((uk != -1) && (vk != -1));
1055 return patches[uk][vk].f_vvv(uu, vv)/(delta_v*delta_v*delta_v);
1058 point_type
normal(
const data_type &u,
const data_type &v)
const
1062 data_type uu(0), vv(0);
1066 assert((uk != -1) && (vk != -1));
1068 return patches[uk][vk].normal(uu, vv);
1089 template<
template<
typename,
unsigned short,
typename>
class surface1__,
typename data1__,
unsigned short dim1__,
typename tol1__ >
1139 return key.begin()->first;
1153 if(pmin_in != key.begin()->first)
1155 data_type p = pmin_in;
1156 keymap_type shiftkey;
1157 for (
typename keymap_type::iterator it=key.begin(); it!=key.end(); ++it)
1161 shiftkey.insert(shiftkey.end(), std::make_pair(p, it->second));
1175 void init(
const index_type &nseg,
const data_type &dp = 1,
const data_type &p0 = 0)
1182 void append(
const index_type &nseg,
const data_type &dp = 1)
1184 typename keymap_type::iterator itguess = key.end();
1185 index_type j = key.size();
1187 for(index_type i = 0; i < nseg; ++i)
1189 itguess = key.insert(itguess, std::make_pair(p, j));
1196 template<
typename it__>
1197 void init(
const it__ &dps,
const it__ &dpe,
const data_type &p0 = 0)
1204 template<
typename it__>
1205 void append(
const it__ &dps,
const it__ &dpe)
1207 typename keymap_type::iterator itguess = key.end();
1208 index_type j = key.size();
1210 for(it__ dp = dps; dp != dpe; ++dp)
1212 itguess = key.insert(itguess, std::make_pair(p, j));
1221 printf(
"Parameter report:\n");
1222 typename keymap_type::iterator it;
1226 for (it=key.begin(); it!=key.end(); ++it)
1228 printf(
" seg: %d \t p: %f \t pk %d\n", i, it->first, it->second);
1231 printf(
" pmax: %f\n", pmax);
1232 printf(
"End report\n");
1239 typename keymap_type::const_iterator it;
1240 for (it=key.cbegin(); it!=key.cend(); ++it)
1242 pmap.push_back( it->first );
1244 pmap.push_back( pmax );
1250 typename keymap_type::iterator itr;
1251 typename keymap_type::iterator itrguess = rkey.begin();
1255 for (
typename keymap_type::reverse_iterator it=key.rbegin(); it!=key.rend(); ++it)
1257 itr = rkey.insert(itrguess, std::make_pair(p, it->second));
1273 assert (it != key.end());
1275 typename keymap_type::iterator itnext = it;
1280 if(itnext != key.end())
1281 delta_p = itnext->first - it->first;
1283 delta_p = pmax - it->first;
1290 assert (it != key.end());
1292 typename keymap_type::const_iterator itnext = it;
1297 if(itnext != key.end())
1298 delta_p = itnext->first - it->first;
1300 delta_p = pmax - it->first;
1307 assert (it != key.rend());
1311 if(it != key.rbegin())
1313 typename keymap_type::reverse_iterator itprev = it;
1315 delta_p = itprev->first - it->first;
1319 delta_p = pmax - it->first;
1325 data_type
get_delta_parm(
const typename keymap_type::const_reverse_iterator &it)
const
1327 assert (it != key.rend());
1331 if(it != key.rbegin())
1333 typename keymap_type::const_reverse_iterator itprev = it;
1335 delta_p = itprev->first - it->first;
1339 delta_p = pmax - it->first;
1345 void find_segment(index_type &ikey,
typename keymap_type::const_iterator &it,
const index_type &index)
const
1347 if(index >= (
int) key.size() || index < 0)
1356 for (i=0, it=key.begin(); i<index; ++i, ++it) {}
1361 void find_segment(index_type &ikey,
typename keymap_type::iterator &it,
const index_type &index)
const
1363 if(index >= (
int) key.size() || index < 0)
1372 for (i=0, it=key.begin(); i<index; ++i, ++it) {}
1377 void find_segment(index_type &ikey,
typename keymap_type::iterator &it, data_type &pp,
const data_type &p_in)
1398 it=key.upper_bound(p_in);
1401 if(it != key.begin())
1407 if(tol.approximately_equal(p_in, it->first))
1409 pp=
static_cast<data_type
>(0);
1416 if(tol.approximately_equal(p_in, it->first + delta_p))
1418 pp=
static_cast<data_type
>(1);
1423 pp=(p_in-it->first)/delta_p;
1426 if (pp>static_cast<data_type>(1))
1427 pp=static_cast<data_type>(1);
1428 if (pp<static_cast<data_type>(0))
1429 pp=static_cast<data_type>(0);
1432 void find_segment(index_type &ikey,
typename keymap_type::const_iterator &it, data_type &pp,
const data_type &p_in)
const
1453 it=key.upper_bound(p_in);
1456 if(it != key.begin())
1462 if(tol.approximately_equal(p_in, it->first))
1464 pp=
static_cast<data_type
>(0);
1471 if(tol.approximately_equal(p_in, it->first + delta_p))
1473 pp=
static_cast<data_type
>(1);
1478 pp=(p_in-it->first)/delta_p;
1481 if (pp>static_cast<data_type>(1))
1482 pp=static_cast<data_type>(1);
1483 if (pp<static_cast<data_type>(0))
1484 pp=static_cast<data_type>(0);
1521 if ((nu_in<=0) || (nv_in<=0))
1524 patches.resize(nu_in);
1528 for(index_type i = 0; i < nu_in; i++)
1529 patches[i].resize(nv_in);
1534 error_code split_u(
const index_type &uk,
const typename keymap_type::iterator &uit,
const data_type &u_in,
const data_type &uu)
1537 assert(!tol.approximately_equal(uu, 0));
1538 assert(!tol.approximately_equal(uu, 1));
1543 ukey.
key.insert(uit, std::make_pair(u_in, ukr));
1548 for (vk=0; vk<
nv; ++vk)
1550 surface_type s = patches[uk][vk];
1551 s.split_u(patches[uk][vk], patches[ukr][vk], uu);
1557 error_code split_v(
const index_type &vk,
const typename keymap_type::iterator &vit,
const data_type &v_in,
const data_type &vv)
1560 assert(!tol.approximately_equal(vv, 0));
1561 assert(!tol.approximately_equal(vv, 1));
1566 vkey.
key.insert(vit, std::make_pair(v_in, vkr));
1571 for (uk=0; uk<
nu; ++uk)
1573 surface_type s = patches[uk][vk];
1574 s.split_v(patches[uk][vk], patches[uk][vkr], vv);
1582 typename keymap_type::iterator &uit,
typename keymap_type::iterator &vit,
1583 const index_type & ui,
const index_type &vi)
1589 void find_patch(
typename keymap_type::iterator &uit,
typename keymap_type::iterator &vit,
1590 const index_type & ui,
const index_type &vi)
1597 typename keymap_type::const_iterator &uit,
typename keymap_type::const_iterator &vit,
1598 const index_type & ui,
const index_type &vi)
const
1604 void find_patch(
typename keymap_type::const_iterator &uit,
typename keymap_type::const_iterator &vit,
1605 const index_type & ui,
const index_type &vi)
const
1612 const index_type & ui,
const index_type &vi)
const
1614 typename keymap_type::const_iterator uit, vit;
1620 typename keymap_type::iterator &uit,
typename keymap_type::iterator &vit,
1621 data_type &uu, data_type &vv,
1622 const data_type &u_in,
const data_type &v_in)
1628 void find_patch(
typename keymap_type::iterator &uit,
typename keymap_type::iterator &vit,
1629 data_type &uu, data_type &vv,
1630 const data_type &u_in,
const data_type &v_in)
1633 find_patch(uk, vk, uit, vit, uu, vv, u_in, v_in);
1637 typename keymap_type::const_iterator &uit,
typename keymap_type::const_iterator &vit,
1638 data_type &uu, data_type &vv,
1639 const data_type &u_in,
const data_type &v_in)
const
1645 void find_patch(
typename keymap_type::const_iterator &uit,
typename keymap_type::const_iterator &vit,
1646 data_type &uu, data_type &vv,
1647 const data_type &u_in,
const data_type &v_in)
const
1650 find_patch(uk, vk, uit, vit, uu, vv, u_in, v_in);
1654 data_type &uu, data_type &vv,
1655 const data_type &u_in,
const data_type &v_in)
const
1657 typename keymap_type::const_iterator uit, vit;
1658 find_patch(uk, vk, uit, vit, uu, vv, u_in, v_in);
void to_cubic(const data_type &ttol)
Definition: piecewise.hpp:720
piecewise(const piecewise< surface__, data_type, dim__, tol__ > &p)
Definition: piecewise.hpp:82
surface_type::point_type point_type
Definition: piecewise.hpp:59
point_type f_uuv(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:1007
void find_patch(index_type &uk, index_type &vk, typename keymap_type::const_iterator &uit, typename keymap_type::const_iterator &vit, const index_type &ui, const index_type &vi) const
Definition: piecewise.hpp:1596
Definition: piecewise.hpp:1099
unsigned short dimension_type
Definition: piecewise.hpp:67
data_type get_pmin() const
Definition: piecewise.hpp:1136
data_type pmax
Definition: piecewise.hpp:1102
void rotate(const rotation_matrix_type &rmat, const point_type &rorig)
Definition: piecewise.hpp:393
curve::piecewise< curve1__, data1__, dim1__, tol1__ >::data_type minimum_distance(typename curve::piecewise< curve1__, data1__, dim1__, tol1__ >::data_type &t, const curve::piecewise< curve1__, data1__, dim1__, tol1__ > &pc, const typename curve::piecewise< curve1__, data1__, dim1__, tol1__ >::point_type &pt)
void resize_store(const index_type &nu_in, const index_type &nv_in)
Definition: piecewise.hpp:1519
parameter_key()
Definition: piecewise.hpp:1104
Definition: piecewise.hpp:75
surface_type * get_patch(const index_type &ui, const index_type &vi)
Definition: piecewise.hpp:145
void set_v0(const data_type &v0_in)
Definition: piecewise.hpp:137
Definition: piecewise.hpp:72
data_type get_delta_parm(const typename keymap_type::reverse_iterator &it) const
Definition: piecewise.hpp:1305
void reverse_u()
Definition: piecewise.hpp:421
void degree_v(index_type &mind, index_type &maxd)
Definition: piecewise.hpp:282
void find_segment(index_type &ikey, typename keymap_type::iterator &it, data_type &pp, const data_type &p_in)
Definition: piecewise.hpp:1377
bool check_v_continuity(const surface_type &, const surface_type &, const eli::geom::general::continuity &) const
Definition: piecewise.hpp:1511
void find_segment(index_type &ikey, typename keymap_type::const_iterator &it, data_type &pp, const data_type &p_in) const
Definition: piecewise.hpp:1432
void find_patch(index_type &uk, index_type &vk, typename keymap_type::iterator &uit, typename keymap_type::iterator &vit, const index_type &ui, const index_type &vi)
Definition: piecewise.hpp:1581
void init_v(const it__ &dvs, const it__ &dve, const data_type &v0=0)
Definition: piecewise.hpp:236
void find_segment(index_type &ikey, typename keymap_type::iterator &it, const index_type &index) const
Definition: piecewise.hpp:1361
void translate(const point_type &trans)
Definition: piecewise.hpp:407
static dimension_type dimension()
Definition: piecewise.hpp:131
bool check_continuity(const eli::geom::general::continuity &) const
Definition: piecewise.hpp:1499
~parameter_key()
Definition: piecewise.hpp:1106
void init_v(const index_type &nsegv, const data_type &dv=1, const data_type &v0=0)
Definition: piecewise.hpp:212
void find_patch(index_type &uk, index_type &vk, typename keymap_type::const_iterator &uit, typename keymap_type::const_iterator &vit, data_type &uu, data_type &vv, const data_type &u_in, const data_type &v_in) const
Definition: piecewise.hpp:1636
piecewise & operator=(const piecewise< surface__, data_type, dim__ > &p)
Definition: piecewise.hpp:86
bool closed_v() const
Definition: piecewise.hpp:339
data__ data_type
Definition: piecewise.hpp:66
void get_pmap_v(std::vector< data_type > &pmap) const
Definition: piecewise.hpp:194
Definition: piecewise.hpp:73
void find_segment(index_type &ikey, typename keymap_type::const_iterator &it, const index_type &index) const
Definition: piecewise.hpp:1345
bool open_v() const
Definition: piecewise.hpp:335
surface_type * get_patch_unordered(const index_type &uk, const index_type &vk)
Definition: piecewise.hpp:159
error_code push_back(const curve_type &curve, const data_type &dt=1.0)
Definition: piecewise.hpp:688
point_type f_u(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:910
data_type get_u0() const
Definition: piecewise.hpp:133
void get_parameter_max(data_type &umax, data_type &vmax) const
Definition: piecewise.hpp:175
void set_u0(const data_type &u0_in)
Definition: piecewise.hpp:134
void get_uconst_curve(piecewise_curve_type &pwc, const data_type &u) const
Definition: piecewise.hpp:726
Definition: piecewise.hpp:74
point_type f(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:897
void set_pmax(const data_type &pmax_in)
Definition: piecewise.hpp:1144
surface_type::curve_type curve_type
Definition: piecewise.hpp:63
const surface_type * get_patch_unordered(const index_type &uk, const index_type &vk) const
Definition: piecewise.hpp:164
data_type get_umax() const
Definition: piecewise.hpp:139
index_type number_v_patches() const
Definition: piecewise.hpp:143
void to_cubic_v(const data_type &ttol)
Definition: piecewise.hpp:674
Definition: piecewise.hpp:76
Definition: piecewise.hpp:37
point_type f_uuu(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:991
void reverse_v()
Definition: piecewise.hpp:436
point_type f_vv(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:975
point_type f_vvv(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:1041
index_type nv
Definition: piecewise.hpp:1496
data_type get_delta_parm(const typename keymap_type::iterator &it) const
Definition: piecewise.hpp:1271
error_code replace(const surface_type &surf, const index_type &ui, const index_type &vi)
Definition: piecewise.hpp:524
void append(const index_type &nseg, const data_type &dp=1)
Definition: piecewise.hpp:1182
bool open_u() const
Definition: piecewise.hpp:312
Definition: continuity.hpp:27
error_code split_u(const index_type &uk, const typename keymap_type::iterator &uit, const data_type &u_in, const data_type &uu)
Definition: piecewise.hpp:1534
error_code split_u(const data_type &u_in)
Definition: piecewise.hpp:582
void find_interior_C0_edges(std::vector< data_type > &uconst, std::vector< data_type > &vconst) const
Definition: piecewise.hpp:842
void find_patch(typename keymap_type::iterator &uit, typename keymap_type::iterator &vit, const index_type &ui, const index_type &vi)
Definition: piecewise.hpp:1589
tol__ tolerance_type
Definition: piecewise.hpp:68
void init(const index_type &nseg, const data_type &dp=1, const data_type &p0=0)
Definition: piecewise.hpp:1175
Definition: tolerance.hpp:26
void find_interior_feature_edges(std::vector< data_type > &uconst, std::vector< data_type > &vconst, const data_type &angle_tol) const
Definition: piecewise.hpp:786
void init_u(const it__ &dus, const it__ &due, const data_type &u0=0)
Definition: piecewise.hpp:228
data_type get_delta_parm(const typename keymap_type::const_iterator &it) const
Definition: piecewise.hpp:1288
error_code split_v(const data_type &v_in)
Definition: piecewise.hpp:605
Definition: continuity.hpp:33
void clear()
Definition: piecewise.hpp:478
void rotate(const rotation_matrix_type &rmat)
Definition: piecewise.hpp:379
void swap_uv()
Definition: piecewise.hpp:451
parameter_key ukey
Definition: piecewise.hpp:1495
std::vector< patch_strip_type > patch_collection_type
Definition: piecewise.hpp:1490
error_code
Definition: piecewise.hpp:69
std::vector< surface_type > patch_strip_type
Definition: piecewise.hpp:1489
void get_pmap_u(std::vector< data_type > &pmap) const
Definition: piecewise.hpp:189
point_type f_uu(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:942
data_type get_v0() const
Definition: piecewise.hpp:136
void find_patch(typename keymap_type::iterator &uit, typename keymap_type::iterator &vit, data_type &uu, data_type &vv, const data_type &u_in, const data_type &v_in)
Definition: piecewise.hpp:1628
data_type get_pmax() const
Definition: piecewise.hpp:1131
void init_u(const index_type &nsegu, const data_type &du=1, const data_type &u0=0)
Definition: piecewise.hpp:205
data_type get_delta_parm(const typename keymap_type::const_reverse_iterator &it) const
Definition: piecewise.hpp:1325
bool check_u_continuity(const surface_type &, const surface_type &, const eli::geom::general::continuity &) const
Definition: piecewise.hpp:1505
void get_parameter_min(data_type &umin, data_type &vmin) const
Definition: piecewise.hpp:169
point_type f_uv(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:958
void clear()
Definition: piecewise.hpp:1125
surface_type::index_type index_type
Definition: piecewise.hpp:58
std::map< data_type, index_type > keymap_type
Definition: piecewise.hpp:1097
bool operator!=(const parameter_key &pk) const
Definition: piecewise.hpp:1120
void to_cubic_u(const data_type &ttol)
Definition: piecewise.hpp:628
Definition: piecewise.hpp:77
void clear()
Definition: piecewise.hpp:599
void get_pmap(std::vector< data_type > &pmap) const
Definition: piecewise.hpp:1235
index_type number_u_patches() const
Definition: piecewise.hpp:142
void init(const it__ &dps, const it__ &dpe, const data_type &p0=0)
Definition: piecewise.hpp:1197
~piecewise()
Definition: piecewise.hpp:84
void find_patch(index_type &uk, index_type &vk, const index_type &ui, const index_type &vi) const
Definition: piecewise.hpp:1611
void find_patch(typename keymap_type::const_iterator &uit, typename keymap_type::const_iterator &vit, data_type &uu, data_type &vv, const data_type &u_in, const data_type &v_in) const
Definition: piecewise.hpp:1645
Definition: piecewise.hpp:71
bool closed_u() const
Definition: piecewise.hpp:316
parameter_key(const parameter_key &pk)
Definition: piecewise.hpp:1105
bool operator==(const piecewise< surface__, data_type, dim__ > &p) const
Definition: piecewise.hpp:100
point_type normal(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:1058
bool operator!=(const piecewise< surface__, data_type, dim__ > &p) const
Definition: piecewise.hpp:126
point_type f_uvv(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:1024
surface_type::bounding_box_type bounding_box_type
Definition: piecewise.hpp:62
surface_type::rotation_matrix_type rotation_matrix_type
Definition: piecewise.hpp:61
surface_type::control_point_type control_point_type
Definition: piecewise.hpp:60
eli::geom::curve::piecewise< eli::geom::curve::bezier, data__, dim__, tol__ > piecewise_curve_type
Definition: piecewise.hpp:64
keymap_type key
Definition: piecewise.hpp:1101
continuity
Definition: continuity.hpp:24
bool equivalent_curves(const bezier< data__, dim__, tol__ > &c0, const bezier< data__, dim__, tol__ > &c1)
Definition: equivalent_curves.hpp:27
void init_uv(const index_type &nsegu, const index_type &nsegv, const data_type &du=1, const data_type &dv=1, const data_type &u0=0, const data_type &v0=0)
Definition: piecewise.hpp:219
void set_t0(const data_type &t0_in)
Definition: piecewise.hpp:340
void get_vconst_curve(piecewise_curve_type &pwc, const data_type &v) const
Definition: piecewise.hpp:756
error_code split_v(const index_type &vk, const typename keymap_type::iterator &vit, const data_type &v_in, const data_type &vv)
Definition: piecewise.hpp:1557
void set_pmin(const data_type &pmin_in)
Definition: piecewise.hpp:1149
data_type get_vmax() const
Definition: piecewise.hpp:140
void append(const it__ &dps, const it__ &dpe)
Definition: piecewise.hpp:1205
patch_collection_type patches
Definition: piecewise.hpp:1492
void find_patch(index_type &uk, index_type &vk, data_type &uu, data_type &vv, const data_type &u_in, const data_type &v_in) const
Definition: piecewise.hpp:1653
const surface_type * get_patch(const index_type &ui, const index_type &vi) const
Definition: piecewise.hpp:152
void get_pmap_uv(std::vector< data_type > &upmap, std::vector< data_type > &vpmap) const
Definition: piecewise.hpp:199
void find_discontinuities(eli::geom::general::continuity cont, std::vector< data_type > &tdisc) const
Definition: piecewise.hpp:1676
void find_patch(typename keymap_type::const_iterator &uit, typename keymap_type::const_iterator &vit, const index_type &ui, const index_type &vi) const
Definition: piecewise.hpp:1604
void get_bounding_box(bounding_box_type &bb) const
Definition: piecewise.hpp:360
surface__< data__, dim__, tol__ > surface_type
Definition: piecewise.hpp:57
error_code set(const surface_type &surf, const index_type &ui, const index_type &vi)
Definition: piecewise.hpp:509
parameter_key vkey
Definition: piecewise.hpp:1495
void reverse_keymap()
Definition: piecewise.hpp:1247
void find_patch(index_type &uk, index_type &vk, typename keymap_type::iterator &uit, typename keymap_type::iterator &vit, data_type &uu, data_type &vv, const data_type &u_in, const data_type &v_in)
Definition: piecewise.hpp:1619
void parameter_report() const
Definition: piecewise.hpp:1219
void init_uv(const it__ &dus, const it__ &due, const it__ &dvs, const it__ &dve, const data_type &u0=0, const data_type &v0=0)
Definition: piecewise.hpp:244
bool operator==(const parameter_key &pk) const
Definition: piecewise.hpp:1108
void degree_u(index_type &mind, index_type &maxd)
Definition: piecewise.hpp:252
void parameter_report()
Definition: piecewise.hpp:181
point_type f_v(const data_type &u, const data_type &v) const
Definition: piecewise.hpp:926
piecewise()
Definition: piecewise.hpp:81
index_type nu
Definition: piecewise.hpp:1496