diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 389ec69e16..25482b6ff9 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -48,6 +48,7 @@ The Axom project release numbers follow [Semantic Versioning](http://semver.org/ - Sina fortran `sina_write_document` now accepts a third argument that preserves records in memory so they can be written to another file (otherwise they're released from memory as soon as they're written) - Primal: In Bezier and NURBS classes, accessors for arrays of control points, weights and knots are now returned by (const) reference instead of returning a copy by value. +- The `axom::bump::clipping::ClipField` and `axom::mir::EquiZAlgorithm` classes were enhanced so they can clip polygons up to 8 sides. - De-virtualized `axom::Array` methods to improve performance. This change may break code which utilizes `axom::Array` or `sidre::Array/MCArray` in a polymorphic manner, for example by overriding `Array::updateNumElements()` or `Array::dynamicRealloc()`. diff --git a/data b/data index 0bb8a9b8ec..89fb79f99b 160000 --- a/data +++ b/data @@ -1 +1 @@ -Subproject commit 0bb8a9b8eccf4992709dcc4205a69734fe9cbf99 +Subproject commit 89fb79f99b989fe05b14148bca2dcbc9287cd9bc diff --git a/src/axom/bump/CMakeLists.txt b/src/axom/bump/CMakeLists.txt index 420e59e4db..920a9d4219 100644 --- a/src/axom/bump/CMakeLists.txt +++ b/src/axom/bump/CMakeLists.txt @@ -85,6 +85,10 @@ set(bump_headers set(bump_sources clipping/ClipCasesHex.cpp + clipping/ClipCasesPoly5.cpp + clipping/ClipCasesPoly6.cpp + clipping/ClipCasesPoly7.cpp + clipping/ClipCasesPoly8.cpp clipping/ClipCasesPyr.cpp clipping/ClipCasesQua.cpp clipping/ClipCasesTet.cpp diff --git a/src/axom/bump/MergeMeshes.hpp b/src/axom/bump/MergeMeshes.hpp index eb0ca81e3c..dedb2e7fe2 100644 --- a/src/axom/bump/MergeMeshes.hpp +++ b/src/axom/bump/MergeMeshes.hpp @@ -482,7 +482,7 @@ class MergeMeshes { // Check the shape types. std::map shape_map = buildShapeMap(inputs); - if(shape_map.find("polyhedral") != shape_map.end()) + if(shape_map.find(views::PolyhedronTraits::name()) != shape_map.end()) { // At least one input was polyhedral. Force all polyhedral output. mergeTopologiesPolyhedral(inputs, n_options, output); @@ -516,10 +516,10 @@ class MergeMeshes // If there are polygon shapes then assume that the rest of the shapes // are 2D and should be promoted to polygons. - if(shape_map.find("polygonal") != shape_map.end() && shape_map.size() > 1) + if(shape_map.find(views::PolygonTraits::name()) != shape_map.end() && shape_map.size() > 1) { shape_map.clear(); - shape_map["polygonal"] = axom::bump::views::shapeNameToID("polygonal"); + shape_map[views::PolygonTraits::name()] = views::PolygonTraits::id(); } conduit::Node *n_newTopoPtr = nullptr; @@ -527,7 +527,6 @@ class MergeMeshes for(axom::IndexType i = 0; i < n; i++) { const conduit::Node &n_srcTopo = getTopology(inputs[i]); - const std::string srcShape = n_srcTopo.fetch_existing("elements/shape").as_string(); const conduit::Node &n_srcConn = n_srcTopo.fetch_existing("elements/connectivity"); const conduit::Node &n_srcSizes = n_srcTopo.fetch_existing("elements/sizes"); @@ -703,28 +702,28 @@ class MergeMeshes views::IndexNode_to_ArrayView(n_elem_conn, [&](auto connView) { using ConnectivityType = typename decltype(connView)::value_type; - if(shape == "tet") + if(shape == views::TetTraits::name()) { using TetShape = views::TetShape; auto topologyView = views::make_unstructured_single_shape_topology::view(n_srcTopo); makePolyhedralMesh(topologyView, n_srcTopo, n_phTopo); } - else if(shape == "pyramid") + else if(shape == views::PyramidTraits::name()) { using PyramidShape = views::PyramidShape; auto topologyView = views::make_unstructured_single_shape_topology::view(n_srcTopo); makePolyhedralMesh(topologyView, n_srcTopo, n_phTopo); } - else if(shape == "wedge") + else if(shape == views::WedgeTraits::name()) { using WedgeShape = views::WedgeShape; auto topologyView = views::make_unstructured_single_shape_topology::view(n_srcTopo); makePolyhedralMesh(topologyView, n_srcTopo, n_phTopo); } - else if(shape == "hex") + else if(shape == views::HexTraits::name()) { using HexShape = views::HexShape; auto topologyView = diff --git a/src/axom/bump/clipping/ClipCases.h b/src/axom/bump/clipping/ClipCases.h index cdbf5c981b..6cf31860b8 100644 --- a/src/axom/bump/clipping/ClipCases.h +++ b/src/axom/bump/clipping/ClipCases.h @@ -9,6 +9,7 @@ // NOTE: The values for EA-EL and N0-N3 were reduced. // NOTE: We're using AXOM_BUMP_EXPORT instead of VISIT_VTK_LIGHT_API throughout. // NOTE: All #define were changed to constexpr variables to avoid symbol collisions. +// NOTE: We added ST_POLY5 through ST_POLY8. // clang-format off #include "axom/export/bump.h" @@ -81,9 +82,13 @@ constexpr unsigned char ST_WDG = 102; constexpr unsigned char ST_HEX = 103; constexpr unsigned char ST_TRI = 104; constexpr unsigned char ST_QUA = 105; -constexpr unsigned char ST_VTX = 106; -constexpr unsigned char ST_LIN = 107; -constexpr unsigned char ST_PNT = 108; +constexpr unsigned char ST_POLY5 = 106; +constexpr unsigned char ST_POLY6 = 107; +constexpr unsigned char ST_POLY7 = 108; +constexpr unsigned char ST_POLY8 = 109; +constexpr unsigned char ST_VTX = 110; +constexpr unsigned char ST_LIN = 111; +constexpr unsigned char ST_PNT = 112; // Colors constexpr unsigned char COLOR0 = 120; @@ -168,6 +173,10 @@ constexpr unsigned char ST_MAX = (ST_PNT + 1); extern AXOM_BUMP_EXPORT const size_t clipShapesTriSize; extern AXOM_BUMP_EXPORT const size_t clipShapesQuaSize; +extern AXOM_BUMP_EXPORT const size_t clipShapesPoly5Size; +extern AXOM_BUMP_EXPORT const size_t clipShapesPoly6Size; +extern AXOM_BUMP_EXPORT const size_t clipShapesPoly7Size; +extern AXOM_BUMP_EXPORT const size_t clipShapesPoly8Size; extern AXOM_BUMP_EXPORT const size_t clipShapesTetSize; extern AXOM_BUMP_EXPORT const size_t clipShapesPyrSize; extern AXOM_BUMP_EXPORT const size_t clipShapesWdgSize; diff --git a/src/axom/bump/clipping/ClipCasesPoly5.cpp b/src/axom/bump/clipping/ClipCasesPoly5.cpp new file mode 100644 index 0000000000..af3d4ed68c --- /dev/null +++ b/src/axom/bump/clipping/ClipCasesPoly5.cpp @@ -0,0 +1,139 @@ +// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and +// other Axom Project Developers. See the top-level LICENSE file for details. +// +// SPDX-License-Identifier: (BSD-3-Clause) +#include "ClipCases.h" + +namespace axom +{ +namespace bump +{ +namespace clipping +{ +namespace tables +{ + +int numClipCasesPoly5 = 32; + +int numClipShapesPoly5[] = {1, 2, 2, 2, 2, 3, 2, 2, 2, 3, 3, 3, 2, 3, 2, 2, + 2, 2, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2, 2, 2, 1}; + +int startClipShapesPoly5[] = {0, 7, 20, 33, 46, 59, 78, 91, 104, 117, 136, + 155, 174, 187, 206, 219, 232, 245, 258, 277, 290, 309, + 328, 347, 360, 373, 386, 405, 418, 431, 444, 457}; + +// clang-format off +unsigned char clipShapesPoly5[] = { + // Case #0 + ST_POLY5, COLOR0, P0, P1, P2, P3, P4, + // Case #1 + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_TRI, COLOR1, P0, EA, EE, + // Case #2 + ST_POLY6, COLOR0, P0, EA, EB, P2, P3, P4, + ST_TRI, COLOR1, EA, P1, EB, + // Case #3 + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_QUA, COLOR1, P0, P1, EB, EE, + // Case #4 + ST_POLY6, COLOR0, P0, P1, EB, EC, P3, P4, + ST_TRI, COLOR1, EB, P2, EC, + // Case #5 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, EE, + // Case #6 + ST_POLY5, COLOR0, P0, EA, EC, P3, P4, + ST_QUA, COLOR1, EA, P1, P2, EC, + // Case #7 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY5, COLOR1, P0, P1, P2, EC, EE, + // Case #8 + ST_POLY6, COLOR0, P0, P1, P2, EC, ED, P4, + ST_TRI, COLOR1, EC, P3, ED, + // Case #9 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P0, EA, EC, P3, ED, EE, + // Case #10 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P0, EA, ED, P4, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, ED, + // Case #11 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY7, COLOR1, P0, P1, EB, EC, P3, ED, EE, + // Case #12 + ST_POLY5, COLOR0, P0, P1, EB, ED, P4, + ST_QUA, COLOR1, EB, P2, P3, ED, + // Case #13 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY7, COLOR1, P0, EA, EB, P2, P3, ED, EE, + // Case #14 + ST_QUA, COLOR0, P0, EA, ED, P4, + ST_POLY5, COLOR1, EA, P1, P2, P3, ED, + // Case #15 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, EE, + // Case #16 + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EE, + ST_TRI, COLOR1, ED, P4, EE, + // Case #17 + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_QUA, COLOR1, P0, EA, ED, P4, + // Case #18 + ST_TRI, COLOR0, P0, EA, EE, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, EA, P1, EB, ED, P4, EE, + // Case #19 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY5, COLOR1, P0, P1, EB, ED, P4, + // Case #20 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, P1, EB, EE, + ST_POLY6, COLOR1, EB, P2, EC, ED, P4, EE, + // Case #21 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY7, COLOR1, P0, EA, EB, P2, EC, ED, P4, + // Case #22 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, P0, EA, EE, + ST_POLY7, COLOR1, EA, P1, P2, EC, ED, P4, EE, + // Case #23 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P4, + // Case #24 + ST_POLY5, COLOR0, P0, P1, P2, EC, EE, + ST_QUA, COLOR1, EC, P3, P4, EE, + // Case #25 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY5, COLOR1, P0, EA, EC, P3, P4, + // Case #26 + ST_TRI, COLOR0, P0, EA, EE, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY7, COLOR1, EA, P1, EB, EC, P3, P4, EE, + // Case #27 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, P4, + // Case #28 + ST_QUA, COLOR0, P0, P1, EB, EE, + ST_POLY5, COLOR1, EB, P2, P3, P4, EE, + // Case #29 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P0, EA, EB, P2, P3, P4, + // Case #30 + ST_TRI, COLOR0, P0, EA, EE, + ST_POLY6, COLOR1, EA, P1, P2, P3, P4, EE, + // Case #31 + ST_POLY5, COLOR1, P0, P1, P2, P3, P4 +}; +// clang-format on + +const size_t clipShapesPoly5Size = sizeof(clipShapesPoly5) / sizeof(unsigned char); + +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom diff --git a/src/axom/bump/clipping/ClipCasesPoly6.cpp b/src/axom/bump/clipping/ClipCasesPoly6.cpp new file mode 100644 index 0000000000..248c477829 --- /dev/null +++ b/src/axom/bump/clipping/ClipCasesPoly6.cpp @@ -0,0 +1,264 @@ +// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and +// other Axom Project Developers. See the top-level LICENSE file for details. +// +// SPDX-License-Identifier: (BSD-3-Clause) +#include "ClipCases.h" + +namespace axom +{ +namespace bump +{ +namespace clipping +{ +namespace tables +{ + +int numClipCasesPoly6 = 64; + +int numClipShapesPoly6[] = {1, 2, 2, 2, 2, 3, 2, 2, 2, 3, 3, 3, 2, 3, 2, 2, 2, 3, 3, 3, 3, 5, + 3, 3, 2, 3, 3, 3, 2, 3, 2, 2, 2, 2, 3, 2, 3, 3, 3, 2, 3, 3, 5, 3, + 3, 3, 3, 2, 2, 2, 3, 2, 3, 3, 3, 2, 2, 2, 3, 2, 2, 2, 2, 1}; + +int startClipShapesPoly6[] = {0, 8, 22, 36, 50, 64, 84, 98, 112, 126, 146, 166, 186, + 200, 220, 234, 248, 262, 282, 302, 322, 342, 372, 392, 412, 426, + 446, 466, 486, 500, 520, 534, 548, 562, 576, 596, 610, 630, 650, + 670, 684, 704, 724, 754, 774, 794, 814, 834, 848, 862, 876, 896, + 910, 930, 950, 970, 984, 998, 1012, 1032, 1046, 1060, 1074, 1088}; + +// clang-format off +unsigned char clipShapesPoly6[] = { + // Case #0 + ST_POLY6, COLOR0, P0, P1, P2, P3, P4, P5, + // Case #1 + ST_POLY7, COLOR0, EA, P1, P2, P3, P4, P5, EF, + ST_TRI, COLOR1, P0, EA, EF, + // Case #2 + ST_POLY7, COLOR0, P0, EA, EB, P2, P3, P4, P5, + ST_TRI, COLOR1, EA, P1, EB, + // Case #3 + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, EF, + ST_QUA, COLOR1, P0, P1, EB, EF, + // Case #4 + ST_POLY7, COLOR0, P0, P1, EB, EC, P3, P4, P5, + ST_TRI, COLOR1, EB, P2, EC, + // Case #5 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, EF, + // Case #6 + ST_POLY6, COLOR0, P0, EA, EC, P3, P4, P5, + ST_QUA, COLOR1, EA, P1, P2, EC, + // Case #7 + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY5, COLOR1, P0, P1, P2, EC, EF, + // Case #8 + ST_POLY7, COLOR0, P0, P1, P2, EC, ED, P4, P5, + ST_TRI, COLOR1, EC, P3, ED, + // Case #9 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, EA, EC, P3, ED, EF, + // Case #10 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR0, P0, EA, ED, P4, P5, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, ED, + // Case #11 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY7, COLOR1, P0, P1, EB, EC, P3, ED, EF, + // Case #12 + ST_POLY6, COLOR0, P0, P1, EB, ED, P4, P5, + ST_QUA, COLOR1, EB, P2, P3, ED, + // Case #13 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY7, COLOR1, P0, EA, EB, P2, P3, ED, EF, + // Case #14 + ST_POLY5, COLOR0, P0, EA, ED, P4, P5, + ST_POLY5, COLOR1, EA, P1, P2, P3, ED, + // Case #15 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, EF, + // Case #16 + ST_POLY7, COLOR0, P0, P1, P2, P3, ED, EE, P5, + ST_TRI, COLOR1, ED, P4, EE, + // Case #17 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY6, COLOR1, P0, EA, ED, P4, EE, EF, + // Case #18 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, P0, EA, EE, P5, + ST_POLY6, COLOR1, EA, P1, EB, ED, P4, EE, + // Case #19 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY7, COLOR1, P0, P1, EB, ED, P4, EE, EF, + // Case #20 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR0, P0, P1, EB, EE, P5, + ST_POLY6, COLOR1, EB, P2, EC, ED, P4, EE, + // Case #21 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, ED, + ST_POLY5, COLOR1, P0, ED, P4, EE, EF, + // Case #22 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, EA, EE, P5, + ST_POLY7, COLOR1, EA, P1, P2, EC, ED, P4, EE, + // Case #23 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY8, COLOR1, P0, P1, P2, EC, ED, P4, EE, EF, + // Case #24 + ST_POLY6, COLOR0, P0, P1, P2, EC, EE, P5, + ST_QUA, COLOR1, EC, P3, P4, EE, + // Case #25 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY7, COLOR1, P0, EA, EC, P3, P4, EE, EF, + // Case #26 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P0, EA, EE, P5, + ST_POLY7, COLOR1, EA, P1, EB, EC, P3, P4, EE, + // Case #27 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY8, COLOR1, P0, P1, EB, EC, P3, P4, EE, EF, + // Case #28 + ST_POLY5, COLOR0, P0, P1, EB, EE, P5, + ST_POLY5, COLOR1, EB, P2, P3, P4, EE, + // Case #29 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY8, COLOR1, P0, EA, EB, P2, P3, P4, EE, EF, + // Case #30 + ST_QUA, COLOR0, P0, EA, EE, P5, + ST_POLY6, COLOR1, EA, P1, P2, P3, P4, EE, + // Case #31 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY7, COLOR1, P0, P1, P2, P3, P4, EE, EF, + // Case #32 + ST_POLY7, COLOR0, P0, P1, P2, P3, P4, EE, EF, + ST_TRI, COLOR1, EE, P5, EF, + // Case #33 + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_QUA, COLOR1, P0, EA, EE, P5, + // Case #34 + ST_TRI, COLOR0, P0, EA, EF, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY6, COLOR1, EA, P1, EB, EE, P5, EF, + // Case #35 + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY5, COLOR1, P0, P1, EB, EE, P5, + // Case #36 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, P0, P1, EB, EF, + ST_POLY6, COLOR1, EB, P2, EC, EE, P5, EF, + // Case #37 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY7, COLOR1, P0, EA, EB, P2, EC, EE, P5, + // Case #38 + ST_TRI, COLOR0, P0, EA, EF, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY7, COLOR1, EA, P1, P2, EC, EE, P5, EF, + // Case #39 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, P1, P2, EC, EE, P5, + // Case #40 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY5, COLOR0, P0, P1, P2, EC, EF, + ST_POLY6, COLOR1, EC, P3, ED, EE, P5, EF, + // Case #41 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY7, COLOR1, P0, EA, EC, P3, ED, EE, P5, + // Case #42 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, P0, EA, EF, + ST_POLY6, COLOR1, P1, EB, EC, P3, ED, EE, + ST_POLY5, COLOR1, EA, P1, EE, P5, EF, + // Case #43 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY8, COLOR1, P0, P1, EB, EC, P3, ED, EE, P5, + // Case #44 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, P1, EB, EF, + ST_POLY7, COLOR1, EB, P2, P3, ED, EE, P5, EF, + // Case #45 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY8, COLOR1, P0, EA, EB, P2, P3, ED, EE, P5, + // Case #46 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, P0, EA, EF, + ST_POLY8, COLOR1, EA, P1, P2, P3, ED, EE, P5, EF, + // Case #47 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY7, COLOR1, P0, P1, P2, P3, ED, EE, P5, + // Case #48 + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EF, + ST_QUA, COLOR1, ED, P4, P5, EF, + // Case #49 + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY5, COLOR1, P0, EA, ED, P4, P5, + // Case #50 + ST_TRI, COLOR0, P0, EA, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY7, COLOR1, EA, P1, EB, ED, P4, P5, EF, + // Case #51 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, P0, P1, EB, ED, P4, P5, + // Case #52 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, P1, EB, EF, + ST_POLY7, COLOR1, EB, P2, EC, ED, P4, P5, EF, + // Case #53 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY8, COLOR1, P0, EA, EB, P2, EC, ED, P4, P5, + // Case #54 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, P0, EA, EF, + ST_POLY8, COLOR1, EA, P1, P2, EC, ED, P4, P5, EF, + // Case #55 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY7, COLOR1, P0, P1, P2, EC, ED, P4, P5, + // Case #56 + ST_POLY5, COLOR0, P0, P1, P2, EC, EF, + ST_POLY5, COLOR1, EC, P3, P4, P5, EF, + // Case #57 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P0, EA, EC, P3, P4, P5, + // Case #58 + ST_TRI, COLOR0, P0, EA, EF, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY8, COLOR1, EA, P1, EB, EC, P3, P4, P5, EF, + // Case #59 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY7, COLOR1, P0, P1, EB, EC, P3, P4, P5, + // Case #60 + ST_QUA, COLOR0, P0, P1, EB, EF, + ST_POLY6, COLOR1, EB, P2, P3, P4, P5, EF, + // Case #61 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY7, COLOR1, P0, EA, EB, P2, P3, P4, P5, + // Case #62 + ST_TRI, COLOR0, P0, EA, EF, + ST_POLY7, COLOR1, EA, P1, P2, P3, P4, P5, EF, + // Case #63 + ST_POLY6, COLOR1, P0, P1, P2, P3, P4, P5 +}; +// clang-format on + +const size_t clipShapesPoly6Size = sizeof(clipShapesPoly6) / sizeof(unsigned char); + +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom diff --git a/src/axom/bump/clipping/ClipCasesPoly7.cpp b/src/axom/bump/clipping/ClipCasesPoly7.cpp new file mode 100644 index 0000000000..96069a387a --- /dev/null +++ b/src/axom/bump/clipping/ClipCasesPoly7.cpp @@ -0,0 +1,552 @@ +// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and +// other Axom Project Developers. See the top-level LICENSE file for details. +// +// SPDX-License-Identifier: (BSD-3-Clause) +#include "ClipCases.h" + +namespace axom +{ +namespace bump +{ +namespace clipping +{ +namespace tables +{ + +int numClipCasesPoly7 = 128; + +int numClipShapesPoly7[] = { + 1, 2, 2, 2, 2, 3, 2, 2, 2, 3, 3, 3, 2, 3, 2, 2, 2, 3, 3, 3, 3, 5, 3, 3, 2, 3, 3, 3, 2, 3, 2, 2, + 2, 3, 3, 3, 3, 5, 3, 3, 3, 5, 5, 5, 3, 5, 3, 4, 2, 3, 3, 3, 3, 5, 3, 4, 2, 3, 3, 4, 2, 4, 2, 2, + 2, 2, 3, 2, 3, 3, 3, 2, 3, 3, 5, 3, 3, 3, 3, 2, 3, 3, 5, 3, 5, 5, 5, 4, 3, 3, 5, 4, 3, 4, 4, 2, + 2, 2, 3, 2, 3, 3, 3, 2, 3, 3, 5, 4, 3, 4, 4, 2, 2, 2, 3, 2, 3, 4, 4, 2, 2, 2, 4, 2, 2, 2, 2, 1}; + +int startClipShapesPoly7[] = { + 0, 9, 24, 39, 54, 69, 90, 105, 120, 135, 156, 177, 198, 213, 234, 249, + 264, 279, 300, 321, 342, 363, 394, 415, 436, 451, 472, 493, 514, 529, 550, 565, + 580, 595, 616, 637, 658, 679, 710, 731, 752, 773, 804, 835, 866, 887, 918, 939, + 964, 979, 1000, 1021, 1042, 1063, 1094, 1115, 1140, 1155, 1176, 1197, 1222, 1237, 1262, 1277, + 1292, 1307, 1322, 1343, 1358, 1379, 1400, 1421, 1436, 1457, 1478, 1509, 1530, 1551, 1572, 1593, + 1608, 1629, 1650, 1681, 1702, 1733, 1764, 1795, 1820, 1841, 1862, 1893, 1918, 1939, 1964, 1989, + 2004, 2019, 2034, 2055, 2070, 2091, 2112, 2133, 2148, 2169, 2190, 2221, 2246, 2267, 2292, 2317, + 2332, 2347, 2362, 2383, 2398, 2419, 2444, 2469, 2484, 2499, 2514, 2539, 2554, 2569, 2584, 2599}; + +// clang-format off +unsigned char clipShapesPoly7[] = { + // Case #0 + ST_POLY7, COLOR0, P0, P1, P2, P3, P4, P5, P6, + // Case #1 + ST_POLY8, COLOR0, EA, P1, P2, P3, P4, P5, P6, EG, + ST_TRI, COLOR1, P0, EA, EG, + // Case #2 + ST_POLY8, COLOR0, P0, EA, EB, P2, P3, P4, P5, P6, + ST_TRI, COLOR1, EA, P1, EB, + // Case #3 + ST_POLY7, COLOR0, EB, P2, P3, P4, P5, P6, EG, + ST_QUA, COLOR1, P0, P1, EB, EG, + // Case #4 + ST_POLY8, COLOR0, P0, P1, EB, EC, P3, P4, P5, P6, + ST_TRI, COLOR1, EB, P2, EC, + // Case #5 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR0, EC, P3, P4, P5, P6, EG, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, EG, + // Case #6 + ST_POLY7, COLOR0, P0, EA, EC, P3, P4, P5, P6, + ST_QUA, COLOR1, EA, P1, P2, EC, + // Case #7 + ST_POLY6, COLOR0, EC, P3, P4, P5, P6, EG, + ST_POLY5, COLOR1, P0, P1, P2, EC, EG, + // Case #8 + ST_POLY8, COLOR0, P0, P1, P2, EC, ED, P4, P5, P6, + ST_TRI, COLOR1, EC, P3, ED, + // Case #9 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY6, COLOR1, P0, EA, EC, P3, ED, EG, + // Case #10 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR0, P0, EA, ED, P4, P5, P6, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, ED, + // Case #11 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY7, COLOR1, P0, P1, EB, EC, P3, ED, EG, + // Case #12 + ST_POLY7, COLOR0, P0, P1, EB, ED, P4, P5, P6, + ST_QUA, COLOR1, EB, P2, P3, ED, + // Case #13 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY7, COLOR1, P0, EA, EB, P2, P3, ED, EG, + // Case #14 + ST_POLY6, COLOR0, P0, EA, ED, P4, P5, P6, + ST_POLY5, COLOR1, EA, P1, P2, P3, ED, + // Case #15 + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, EG, + // Case #16 + ST_POLY8, COLOR0, P0, P1, P2, P3, ED, EE, P5, P6, + ST_TRI, COLOR1, ED, P4, EE, + // Case #17 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY6, COLOR1, P0, EA, ED, P4, EE, EG, + // Case #18 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY5, COLOR0, P0, EA, EE, P5, P6, + ST_POLY6, COLOR1, EA, P1, EB, ED, P4, EE, + // Case #19 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY7, COLOR1, P0, P1, EB, ED, P4, EE, EG, + // Case #20 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR0, P0, P1, EB, EE, P5, P6, + ST_POLY6, COLOR1, EB, P2, EC, ED, P4, EE, + // Case #21 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, ED, + ST_POLY5, COLOR1, P0, ED, P4, EE, EG, + // Case #22 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR0, P0, EA, EE, P5, P6, + ST_POLY7, COLOR1, EA, P1, P2, EC, ED, P4, EE, + // Case #23 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY8, COLOR1, P0, P1, P2, EC, ED, P4, EE, EG, + // Case #24 + ST_POLY7, COLOR0, P0, P1, P2, EC, EE, P5, P6, + ST_QUA, COLOR1, EC, P3, P4, EE, + // Case #25 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY7, COLOR1, P0, EA, EC, P3, P4, EE, EG, + // Case #26 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR0, P0, EA, EE, P5, P6, + ST_POLY7, COLOR1, EA, P1, EB, EC, P3, P4, EE, + // Case #27 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY8, COLOR1, P0, P1, EB, EC, P3, P4, EE, EG, + // Case #28 + ST_POLY6, COLOR0, P0, P1, EB, EE, P5, P6, + ST_POLY5, COLOR1, EB, P2, P3, P4, EE, + // Case #29 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY8, COLOR1, P0, EA, EB, P2, P3, P4, EE, EG, + // Case #30 + ST_POLY5, COLOR0, P0, EA, EE, P5, P6, + ST_POLY6, COLOR1, EA, P1, P2, P3, P4, EE, + // Case #31 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY7, COLOR1, P0, P1, P2, P3, P4, EE, EG, + // Case #32 + ST_POLY8, COLOR0, P0, P1, P2, P3, P4, EE, EF, P6, + ST_TRI, COLOR1, EE, P5, EF, + // Case #33 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, EE, P5, EF, EG, + // Case #34 + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY6, COLOR1, EA, P1, EB, EE, P5, EF, + // Case #35 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY7, COLOR1, P0, P1, EB, EE, P5, EF, EG, + // Case #36 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY5, COLOR0, P0, P1, EB, EF, P6, + ST_POLY6, COLOR1, EB, P2, EC, EE, P5, EF, + // Case #37 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, EB, P5, EF, EG, + ST_POLY5, COLOR1, EB, P2, EC, EE, P5, + // Case #38 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_POLY7, COLOR1, EA, P1, P2, EC, EE, P5, EF, + // Case #39 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY8, COLOR1, P0, P1, P2, EC, EE, P5, EF, EG, + // Case #40 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR0, P0, P1, P2, EC, EF, P6, + ST_POLY6, COLOR1, EC, P3, ED, EE, P5, EF, + // Case #41 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P3, ED, EE, P5, EF, EG, + ST_POLY5, COLOR1, P0, EA, EC, P3, EG, + // Case #42 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_POLY6, COLOR1, P1, EB, EC, P3, ED, EE, + ST_POLY5, COLOR1, EA, P1, EE, P5, EF, + // Case #43 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, ED, + ST_POLY6, COLOR1, P0, ED, EE, P5, EF, EG, + // Case #44 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY5, COLOR0, P0, P1, EB, EF, P6, + ST_POLY7, COLOR1, EB, P2, P3, ED, EE, P5, EF, + // Case #45 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, ED, EE, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P2, EF, EG, + // Case #46 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_POLY8, COLOR1, EA, P1, P2, P3, ED, EE, P5, EF, + // Case #47 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, EE, + ST_POLY5, COLOR1, P0, EE, P5, EF, EG, + // Case #48 + ST_POLY7, COLOR0, P0, P1, P2, P3, ED, EF, P6, + ST_QUA, COLOR1, ED, P4, P5, EF, + // Case #49 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY7, COLOR1, P0, EA, ED, P4, P5, EF, EG, + // Case #50 + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY7, COLOR1, EA, P1, EB, ED, P4, P5, EF, + // Case #51 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY8, COLOR1, P0, P1, EB, ED, P4, P5, EF, EG, + // Case #52 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR0, P0, P1, EB, EF, P6, + ST_POLY7, COLOR1, EB, P2, EC, ED, P4, P5, EF, + // Case #53 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, P0, EA, P4, P5, EF, EG, + ST_POLY6, COLOR1, EA, EB, P2, EC, ED, P4, + // Case #54 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_POLY8, COLOR1, EA, P1, P2, EC, ED, P4, P5, EF, + // Case #55 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P4, + ST_POLY5, COLOR1, P0, P4, P5, EF, EG, + // Case #56 + ST_POLY6, COLOR0, P0, P1, P2, EC, EF, P6, + ST_POLY5, COLOR1, EC, P3, P4, P5, EF, + // Case #57 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY8, COLOR1, P0, EA, EC, P3, P4, P5, EF, EG, + // Case #58 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_POLY8, COLOR1, EA, P1, EB, EC, P3, P4, P5, EF, + // Case #59 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P0, P3, P4, P5, EF, EG, + ST_POLY5, COLOR1, P0, P1, EB, EC, P3, + // Case #60 + ST_POLY5, COLOR0, P0, P1, EB, EF, P6, + ST_POLY6, COLOR1, EB, P2, P3, P4, P5, EF, + // Case #61 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, P4, P5, EF, EG, + ST_POLY5, COLOR1, P0, EA, EB, P2, EG, + // Case #62 + ST_QUA, COLOR0, P0, EA, EF, P6, + ST_POLY7, COLOR1, EA, P1, P2, P3, P4, P5, EF, + // Case #63 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY8, COLOR1, P0, P1, P2, P3, P4, P5, EF, EG, + // Case #64 + ST_POLY8, COLOR0, P0, P1, P2, P3, P4, P5, EF, EG, + ST_TRI, COLOR1, EF, P6, EG, + // Case #65 + ST_POLY7, COLOR0, EA, P1, P2, P3, P4, P5, EF, + ST_QUA, COLOR1, P0, EA, EF, P6, + // Case #66 + ST_TRI, COLOR0, P0, EA, EG, + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, EF, + ST_POLY6, COLOR1, EA, P1, EB, EF, P6, EG, + // Case #67 + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, EF, + ST_POLY5, COLOR1, P0, P1, EB, EF, P6, + // Case #68 + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY6, COLOR1, EB, P2, EC, EF, P6, EG, + // Case #69 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY7, COLOR1, P0, EA, EB, P2, EC, EF, P6, + // Case #70 + ST_TRI, COLOR0, P0, EA, EG, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY7, COLOR1, EA, P1, P2, EC, EF, P6, EG, + // Case #71 + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY6, COLOR1, P0, P1, P2, EC, EF, P6, + // Case #72 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY5, COLOR0, P0, P1, P2, EC, EG, + ST_POLY6, COLOR1, EC, P3, ED, EF, P6, EG, + // Case #73 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY7, COLOR1, P0, EA, EC, P3, ED, EF, P6, + // Case #74 + ST_TRI, COLOR0, P0, EA, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, EA, P1, EB, EC, P6, EG, + ST_POLY5, COLOR1, EC, P3, ED, EF, P6, + // Case #75 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY8, COLOR1, P0, P1, EB, EC, P3, ED, EF, P6, + // Case #76 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_POLY7, COLOR1, EB, P2, P3, ED, EF, P6, EG, + // Case #77 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY8, COLOR1, P0, EA, EB, P2, P3, ED, EF, P6, + // Case #78 + ST_TRI, COLOR0, P0, EA, EG, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY8, COLOR1, EA, P1, P2, P3, ED, EF, P6, EG, + // Case #79 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY7, COLOR1, P0, P1, P2, P3, ED, EF, P6, + // Case #80 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EG, + ST_POLY6, COLOR1, ED, P4, EE, EF, P6, EG, + // Case #81 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY7, COLOR1, P0, EA, ED, P4, EE, EF, P6, + // Case #82 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, P0, EA, EG, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, EA, P4, EE, EF, P6, EG, + ST_POLY5, COLOR1, EA, P1, EB, ED, P4, + // Case #83 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY8, COLOR1, P0, P1, EB, ED, P4, EE, EF, P6, + // Case #84 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_POLY6, COLOR1, P2, EC, ED, P4, EE, EF, + ST_POLY5, COLOR1, EB, P2, EF, P6, EG, + // Case #85 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, P6, + ST_POLY6, COLOR1, EC, ED, P4, EE, EF, P6, + // Case #86 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, P0, EA, EG, + ST_POLY6, COLOR1, P1, P2, EC, ED, P4, EE, + ST_POLY6, COLOR1, EA, P1, EE, EF, P6, EG, + // Case #87 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P6, + ST_POLY5, COLOR1, ED, P4, EE, EF, P6, + // Case #88 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY5, COLOR0, P0, P1, P2, EC, EG, + ST_POLY7, COLOR1, EC, P3, P4, EE, EF, P6, EG, + // Case #89 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY8, COLOR1, P0, EA, EC, P3, P4, EE, EF, P6, + // Case #90 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, P0, EA, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P3, P4, EE, EF, P6, EG, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, EG, + // Case #91 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, P6, + ST_POLY5, COLOR1, P3, P4, EE, EF, P6, + // Case #92 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_POLY8, COLOR1, EB, P2, P3, P4, EE, EF, P6, EG, + // Case #93 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, P4, EE, EF, P6, + ST_POLY5, COLOR1, P0, EA, EB, P2, P6, + // Case #94 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, P0, EA, EG, + ST_POLY6, COLOR1, P1, P2, P3, P4, EE, EF, + ST_POLY5, COLOR1, EA, P1, EF, P6, EG, + // Case #95 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY8, COLOR1, P0, P1, P2, P3, P4, EE, EF, P6, + // Case #96 + ST_POLY7, COLOR0, P0, P1, P2, P3, P4, EE, EG, + ST_QUA, COLOR1, EE, P5, P6, EG, + // Case #97 + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_POLY5, COLOR1, P0, EA, EE, P5, P6, + // Case #98 + ST_TRI, COLOR0, P0, EA, EG, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY7, COLOR1, EA, P1, EB, EE, P5, P6, EG, + // Case #99 + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY6, COLOR1, P0, P1, EB, EE, P5, P6, + // Case #100 + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY7, COLOR1, EB, P2, EC, EE, P5, P6, EG, + // Case #101 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY8, COLOR1, P0, EA, EB, P2, EC, EE, P5, P6, + // Case #102 + ST_TRI, COLOR0, P0, EA, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY8, COLOR1, EA, P1, P2, EC, EE, P5, P6, EG, + // Case #103 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY7, COLOR1, P0, P1, P2, EC, EE, P5, P6, + // Case #104 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY5, COLOR0, P0, P1, P2, EC, EG, + ST_POLY7, COLOR1, EC, P3, ED, EE, P5, P6, EG, + // Case #105 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY8, COLOR1, P0, EA, EC, P3, ED, EE, P5, P6, + // Case #106 + ST_TRI, COLOR0, P0, EA, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, EA, P1, EB, P5, P6, EG, + ST_POLY6, COLOR1, EB, EC, P3, ED, EE, P5, + // Case #107 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, P0, P1, EB, EC, P5, P6, + ST_POLY5, COLOR1, EC, P3, ED, EE, P5, + // Case #108 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_POLY8, COLOR1, EB, P2, P3, ED, EE, P5, P6, EG, + // Case #109 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, P0, EA, EB, P2, P5, P6, + ST_POLY5, COLOR1, P2, P3, ED, EE, P5, + // Case #110 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, P0, EA, EG, + ST_POLY6, COLOR1, P1, P2, P3, ED, EE, P5, + ST_POLY5, COLOR1, EA, P1, P5, P6, EG, + // Case #111 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY8, COLOR1, P0, P1, P2, P3, ED, EE, P5, P6, + // Case #112 + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EG, + ST_POLY5, COLOR1, ED, P4, P5, P6, EG, + // Case #113 + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY6, COLOR1, P0, EA, ED, P4, P5, P6, + // Case #114 + ST_TRI, COLOR0, P0, EA, EG, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY8, COLOR1, EA, P1, EB, ED, P4, P5, P6, EG, + // Case #115 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY7, COLOR1, P0, P1, EB, ED, P4, P5, P6, + // Case #116 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_POLY8, COLOR1, EB, P2, EC, ED, P4, P5, P6, EG, + // Case #117 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, P0, EA, EB, P4, P5, P6, + ST_POLY5, COLOR1, EB, P2, EC, ED, P4, + // Case #118 + ST_TRI, COLOR0, P0, EA, EG, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, EA, P1, P4, P5, P6, EG, + ST_POLY5, COLOR1, P1, P2, EC, ED, P4, + // Case #119 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY8, COLOR1, P0, P1, P2, EC, ED, P4, P5, P6, + // Case #120 + ST_POLY5, COLOR0, P0, P1, P2, EC, EG, + ST_POLY6, COLOR1, EC, P3, P4, P5, P6, EG, + // Case #121 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY7, COLOR1, P0, EA, EC, P3, P4, P5, P6, + // Case #122 + ST_TRI, COLOR0, P0, EA, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, EA, P3, P4, P5, P6, EG, + ST_POLY5, COLOR1, EA, P1, EB, EC, P3, + // Case #123 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY8, COLOR1, P0, P1, EB, EC, P3, P4, P5, P6, + // Case #124 + ST_QUA, COLOR0, P0, P1, EB, EG, + ST_POLY7, COLOR1, EB, P2, P3, P4, P5, P6, EG, + // Case #125 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY8, COLOR1, P0, EA, EB, P2, P3, P4, P5, P6, + // Case #126 + ST_TRI, COLOR0, P0, EA, EG, + ST_POLY8, COLOR1, EA, P1, P2, P3, P4, P5, P6, EG, + // Case #127 + ST_POLY7, COLOR1, P0, P1, P2, P3, P4, P5, P6 +}; +// clang-format on + +const size_t clipShapesPoly7Size = sizeof(clipShapesPoly7) / sizeof(unsigned char); + +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom diff --git a/src/axom/bump/clipping/ClipCasesPoly8.cpp b/src/axom/bump/clipping/ClipCasesPoly8.cpp new file mode 100644 index 0000000000..064ba4c531 --- /dev/null +++ b/src/axom/bump/clipping/ClipCasesPoly8.cpp @@ -0,0 +1,1206 @@ +// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and +// other Axom Project Developers. See the top-level LICENSE file for details. +// +// SPDX-License-Identifier: (BSD-3-Clause) +#include "ClipCases.h" + +namespace axom +{ +namespace bump +{ +namespace clipping +{ +namespace tables +{ + +int numClipCasesPoly8 = 256; + +int numClipShapesPoly8[] = { + 1, 3, 3, 2, 3, 3, 2, 2, 3, 3, 3, 3, 2, 3, 2, 2, 3, 3, 3, 3, 3, 5, 3, 3, 2, 3, 3, 3, 2, 3, 2, 2, + 3, 3, 3, 3, 3, 5, 3, 3, 3, 5, 5, 5, 3, 5, 3, 4, 2, 3, 3, 3, 3, 5, 3, 4, 2, 3, 3, 4, 2, 4, 2, 2, + 3, 3, 3, 3, 3, 5, 3, 3, 3, 5, 5, 5, 3, 5, 3, 4, 3, 5, 5, 5, 5, 6, 5, 5, 3, 5, 5, 5, 3, 5, 4, 4, + 2, 3, 3, 3, 3, 5, 3, 4, 3, 5, 5, 5, 3, 5, 4, 4, 2, 3, 3, 4, 3, 5, 4, 4, 2, 4, 4, 4, 2, 4, 2, 3, + 3, 2, 3, 2, 3, 3, 3, 2, 3, 3, 5, 3, 3, 3, 3, 2, 3, 3, 5, 3, 5, 5, 5, 4, 3, 3, 5, 4, 3, 4, 4, 2, + 3, 3, 5, 3, 5, 5, 5, 4, 5, 5, 6, 5, 5, 5, 5, 4, 3, 3, 5, 4, 5, 5, 5, 4, 3, 4, 5, 4, 4, 4, 4, 3, + 2, 2, 3, 2, 3, 3, 3, 2, 3, 3, 5, 4, 3, 4, 4, 2, 3, 3, 5, 4, 5, 5, 5, 4, 3, 4, 5, 4, 4, 4, 4, 3, + 2, 2, 3, 2, 3, 4, 4, 2, 3, 4, 5, 4, 4, 4, 4, 3, 2, 2, 4, 2, 4, 4, 4, 3, 2, 2, 4, 3, 2, 3, 3, 1}; + +int startClipShapesPoly8[] = { + 0, 10, 30, 50, 66, 86, 108, 124, 140, 160, 182, 204, 226, 242, 264, 280, + 296, 316, 338, 360, 382, 404, 436, 458, 480, 496, 518, 540, 562, 578, 600, 616, + 632, 652, 674, 696, 718, 740, 772, 794, 816, 838, 870, 902, 934, 956, 988, 1010, + 1036, 1052, 1074, 1096, 1118, 1140, 1172, 1194, 1220, 1236, 1258, 1280, 1306, 1322, 1348, 1364, + 1380, 1400, 1422, 1444, 1466, 1488, 1520, 1542, 1564, 1586, 1618, 1650, 1682, 1704, 1736, 1758, + 1784, 1806, 1838, 1870, 1902, 1934, 1972, 2004, 2036, 2058, 2090, 2122, 2154, 2176, 2208, 2234, + 2260, 2276, 2298, 2320, 2342, 2364, 2396, 2418, 2444, 2466, 2498, 2530, 2562, 2584, 2616, 2642, + 2668, 2684, 2706, 2728, 2754, 2776, 2808, 2834, 2860, 2876, 2902, 2928, 2954, 2970, 2996, 3012, + 3032, 3052, 3068, 3090, 3106, 3128, 3150, 3172, 3188, 3210, 3232, 3264, 3286, 3308, 3330, 3352, + 3368, 3390, 3412, 3444, 3466, 3498, 3530, 3562, 3588, 3610, 3632, 3664, 3690, 3712, 3738, 3764, + 3780, 3802, 3824, 3856, 3878, 3910, 3942, 3974, 4000, 4032, 4064, 4102, 4134, 4166, 4198, 4230, + 4256, 4278, 4300, 4332, 4358, 4390, 4422, 4454, 4480, 4502, 4528, 4560, 4586, 4612, 4638, 4664, + 4684, 4700, 4716, 4738, 4754, 4776, 4798, 4820, 4836, 4858, 4880, 4912, 4938, 4960, 4986, 5012, + 5028, 5050, 5072, 5104, 5130, 5162, 5194, 5226, 5252, 5274, 5300, 5332, 5358, 5384, 5410, 5436, + 5456, 5472, 5488, 5510, 5526, 5548, 5574, 5600, 5616, 5638, 5664, 5696, 5722, 5748, 5774, 5800, + 5820, 5836, 5852, 5878, 5894, 5920, 5946, 5972, 5992, 6008, 6024, 6050, 6070, 6086, 6106, 6126}; + +// clang-format off +unsigned char clipShapesPoly8[] = { + // Case #0 + ST_POLY8, COLOR0, P0, P1, P2, P3, P4, P5, P6, P7, + // Case #1 + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, P5, + ST_POLY5, COLOR0, EA, P5, P6, P7, EH, + ST_TRI, COLOR1, P0, EA, EH, + // Case #2 + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, P6, + ST_POLY5, COLOR0, P0, EA, EB, P6, P7, + ST_TRI, COLOR1, EA, P1, EB, + // Case #3 + ST_POLY8, COLOR0, EB, P2, P3, P4, P5, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, EH, + // Case #4 + ST_POLY6, COLOR0, EC, P3, P4, P5, P6, P7, + ST_POLY5, COLOR0, P0, P1, EB, EC, P7, + ST_TRI, COLOR1, EB, P2, EC, + // Case #5 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY7, COLOR0, EC, P3, P4, P5, P6, P7, EH, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, EH, + // Case #6 + ST_POLY8, COLOR0, P0, EA, EC, P3, P4, P5, P6, P7, + ST_QUA, COLOR1, EA, P1, P2, EC, + // Case #7 + ST_POLY7, COLOR0, EC, P3, P4, P5, P6, P7, EH, + ST_POLY5, COLOR1, P0, P1, P2, EC, EH, + // Case #8 + ST_POLY6, COLOR0, P0, ED, P4, P5, P6, P7, + ST_POLY5, COLOR0, P0, P1, P2, EC, ED, + ST_TRI, COLOR1, EC, P3, ED, + // Case #9 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR0, ED, P4, P5, P6, P7, EH, + ST_POLY6, COLOR1, P0, EA, EC, P3, ED, EH, + // Case #10 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY7, COLOR0, P0, EA, ED, P4, P5, P6, P7, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, ED, + // Case #11 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR0, ED, P4, P5, P6, P7, EH, + ST_POLY7, COLOR1, P0, P1, EB, EC, P3, ED, EH, + // Case #12 + ST_POLY8, COLOR0, P0, P1, EB, ED, P4, P5, P6, P7, + ST_QUA, COLOR1, EB, P2, P3, ED, + // Case #13 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR0, ED, P4, P5, P6, P7, EH, + ST_POLY7, COLOR1, P0, EA, EB, P2, P3, ED, EH, + // Case #14 + ST_POLY7, COLOR0, P0, EA, ED, P4, P5, P6, P7, + ST_POLY5, COLOR1, EA, P1, P2, P3, ED, + // Case #15 + ST_POLY6, COLOR0, ED, P4, P5, P6, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, EH, + // Case #16 + ST_POLY6, COLOR0, P0, P1, EE, P5, P6, P7, + ST_POLY5, COLOR0, P1, P2, P3, ED, EE, + ST_TRI, COLOR1, ED, P4, EE, + // Case #17 + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY6, COLOR1, P0, EA, ED, P4, EE, EH, + // Case #18 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR0, P0, EA, EE, P5, P6, P7, + ST_POLY6, COLOR1, EA, P1, EB, ED, P4, EE, + // Case #19 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY7, COLOR1, P0, P1, EB, ED, P4, EE, EH, + // Case #20 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY7, COLOR0, P0, P1, EB, EE, P5, P6, P7, + ST_POLY6, COLOR1, EB, P2, EC, ED, P4, EE, + // Case #21 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, ED, + ST_POLY5, COLOR1, P0, ED, P4, EE, EH, + // Case #22 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR0, P0, EA, EE, P5, P6, P7, + ST_POLY7, COLOR1, EA, P1, P2, EC, ED, P4, EE, + // Case #23 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY8, COLOR1, P0, P1, P2, EC, ED, P4, EE, EH, + // Case #24 + ST_POLY8, COLOR0, P0, P1, P2, EC, EE, P5, P6, P7, + ST_QUA, COLOR1, EC, P3, P4, EE, + // Case #25 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY7, COLOR1, P0, EA, EC, P3, P4, EE, EH, + // Case #26 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR0, P0, EA, EE, P5, P6, P7, + ST_POLY7, COLOR1, EA, P1, EB, EC, P3, P4, EE, + // Case #27 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY8, COLOR1, P0, P1, EB, EC, P3, P4, EE, EH, + // Case #28 + ST_POLY7, COLOR0, P0, P1, EB, EE, P5, P6, P7, + ST_POLY5, COLOR1, EB, P2, P3, P4, EE, + // Case #29 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY8, COLOR1, P0, EA, EB, P2, P3, P4, EE, EH, + // Case #30 + ST_POLY6, COLOR0, P0, EA, EE, P5, P6, P7, + ST_POLY6, COLOR1, EA, P1, P2, P3, P4, EE, + // Case #31 + ST_POLY5, COLOR0, EE, P5, P6, P7, EH, + ST_POLY7, COLOR1, P0, P1, P2, P3, P4, EE, EH, + // Case #32 + ST_POLY6, COLOR0, P0, P1, P2, EF, P6, P7, + ST_POLY5, COLOR0, P2, P3, P4, EE, EF, + ST_TRI, COLOR1, EE, P5, EF, + // Case #33 + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, EE, P5, EF, EH, + // Case #34 + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY6, COLOR1, EA, P1, EB, EE, P5, EF, + // Case #35 + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY7, COLOR1, P0, P1, EB, EE, P5, EF, EH, + // Case #36 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR0, P0, P1, EB, EF, P6, P7, + ST_POLY6, COLOR1, EB, P2, EC, EE, P5, EF, + // Case #37 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, EE, + ST_POLY5, COLOR1, P0, EE, P5, EF, EH, + // Case #38 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY7, COLOR1, EA, P1, P2, EC, EE, P5, EF, + // Case #39 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY8, COLOR1, P0, P1, P2, EC, EE, P5, EF, EH, + // Case #40 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY7, COLOR0, P0, P1, P2, EC, EF, P6, P7, + ST_POLY6, COLOR1, EC, P3, ED, EE, P5, EF, + // Case #41 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P3, ED, EE, P5, EF, EH, + ST_POLY5, COLOR1, P0, EA, EC, P3, EH, + // Case #42 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY6, COLOR1, P1, EB, EC, P3, ED, EE, + ST_POLY5, COLOR1, EA, P1, EE, P5, EF, + // Case #43 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, ED, + ST_POLY6, COLOR1, P0, ED, EE, P5, EF, EH, + // Case #44 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR0, P0, P1, EB, EF, P6, P7, + ST_POLY7, COLOR1, EB, P2, P3, ED, EE, P5, EF, + // Case #45 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, P0, EA, EB, P2, P3, ED, + ST_POLY6, COLOR1, P0, ED, EE, P5, EF, EH, + // Case #46 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY8, COLOR1, EA, P1, P2, P3, ED, EE, P5, EF, + // Case #47 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, EE, + ST_POLY5, COLOR1, P0, EE, P5, EF, EH, + // Case #48 + ST_POLY8, COLOR0, P0, P1, P2, P3, ED, EF, P6, P7, + ST_QUA, COLOR1, ED, P4, P5, EF, + // Case #49 + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY7, COLOR1, P0, EA, ED, P4, P5, EF, EH, + // Case #50 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY7, COLOR1, EA, P1, EB, ED, P4, P5, EF, + // Case #51 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY8, COLOR1, P0, P1, EB, ED, P4, P5, EF, EH, + // Case #52 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR0, P0, P1, EB, EF, P6, P7, + ST_POLY7, COLOR1, EB, P2, EC, ED, P4, P5, EF, + // Case #53 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, EB, P2, EC, ED, P4, P5, + ST_POLY6, COLOR1, P0, EA, EB, P5, EF, EH, + // Case #54 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY8, COLOR1, EA, P1, P2, EC, ED, P4, P5, EF, + // Case #55 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P4, + ST_POLY5, COLOR1, P0, P4, P5, EF, EH, + // Case #56 + ST_POLY7, COLOR0, P0, P1, P2, EC, EF, P6, P7, + ST_POLY5, COLOR1, EC, P3, P4, P5, EF, + // Case #57 + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY8, COLOR1, P0, EA, EC, P3, P4, P5, EF, EH, + // Case #58 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY8, COLOR1, EA, P1, EB, EC, P3, P4, P5, EF, + // Case #59 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, P1, EB, EC, P3, P4, P5, + ST_POLY5, COLOR1, P0, P1, P5, EF, EH, + // Case #60 + ST_POLY6, COLOR0, P0, P1, EB, EF, P6, P7, + ST_POLY6, COLOR1, EB, P2, P3, P4, P5, EF, + // Case #61 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY6, COLOR1, EA, EB, P2, P3, P4, P5, + ST_POLY5, COLOR1, P0, EA, P5, EF, EH, + // Case #62 + ST_POLY5, COLOR0, P0, EA, EF, P6, P7, + ST_POLY7, COLOR1, EA, P1, P2, P3, P4, P5, EF, + // Case #63 + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_POLY8, COLOR1, P0, P1, P2, P3, P4, P5, EF, EH, + // Case #64 + ST_POLY6, COLOR0, P0, P1, P2, P3, EG, P7, + ST_POLY5, COLOR0, P3, P4, P5, EF, EG, + ST_TRI, COLOR1, EF, P6, EG, + // Case #65 + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY7, COLOR0, EA, P1, P2, P3, P4, P5, EF, + ST_POLY6, COLOR1, P0, EA, EF, P6, EG, EH, + // Case #66 + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, EF, + ST_POLY6, COLOR1, EA, P1, EB, EF, P6, EG, + // Case #67 + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, EF, + ST_POLY7, COLOR1, P0, P1, EB, EF, P6, EG, EH, + // Case #68 + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY6, COLOR1, EB, P2, EC, EF, P6, EG, + // Case #69 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P6, EG, EH, + ST_POLY5, COLOR1, EB, P2, EC, EF, P6, + // Case #70 + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY7, COLOR1, EA, P1, P2, EC, EF, P6, EG, + // Case #71 + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY8, COLOR1, P0, P1, P2, EC, EF, P6, EG, EH, + // Case #72 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR0, P0, P1, P2, EC, EG, P7, + ST_POLY6, COLOR1, EC, P3, ED, EF, P6, EG, + // Case #73 + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, EA, EC, P6, EG, EH, + ST_POLY5, COLOR1, EC, P3, ED, EF, P6, + // Case #74 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, P1, EB, EC, P3, ED, EF, + ST_POLY5, COLOR1, EA, P1, EF, P6, EG, + // Case #75 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, P1, EB, P6, EG, EH, + ST_POLY6, COLOR1, EB, EC, P3, ED, EF, P6, + // Case #76 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY7, COLOR1, EB, P2, P3, ED, EF, P6, EG, + // Case #77 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P2, P3, EH, + ST_POLY6, COLOR1, P3, ED, EF, P6, EG, EH, + // Case #78 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY8, COLOR1, EA, P1, P2, P3, ED, EF, P6, EG, + // Case #79 + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, P1, P2, P3, EG, EH, + ST_POLY5, COLOR1, P3, ED, EF, P6, EG, + // Case #80 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY7, COLOR0, P0, P1, P2, P3, ED, EG, P7, + ST_POLY6, COLOR1, ED, P4, EE, EF, P6, EG, + // Case #81 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY6, COLOR1, P4, EE, EF, P6, EG, EH, + ST_POLY5, COLOR1, P0, EA, ED, P4, EH, + // Case #82 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, EA, P4, EE, EF, P6, EG, + ST_POLY5, COLOR1, EA, P1, EB, ED, P4, + // Case #83 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, P0, P1, EF, P6, EG, EH, + ST_POLY6, COLOR1, P1, EB, ED, P4, EE, EF, + // Case #84 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY6, COLOR1, P2, EC, ED, P4, EE, EF, + ST_POLY5, COLOR1, EB, P2, EF, P6, EG, + // Case #85 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, ED, + ST_POLY8, COLOR1, P0, ED, P4, EE, EF, P6, EG, EH, + // Case #86 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, P1, P2, EC, ED, P4, EE, + ST_POLY6, COLOR1, EA, P1, EE, EF, P6, EG, + // Case #87 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P4, + ST_POLY7, COLOR1, P0, P4, EE, EF, P6, EG, EH, + // Case #88 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR0, P0, P1, P2, EC, EG, P7, + ST_POLY7, COLOR1, EC, P3, P4, EE, EF, P6, EG, + // Case #89 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P3, P4, EE, EF, P6, EG, + ST_POLY6, COLOR1, P0, EA, EC, P3, EG, EH, + // Case #90 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, P1, EB, EC, P3, P4, EE, + ST_POLY6, COLOR1, EA, P1, EE, EF, P6, EG, + // Case #91 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, P4, + ST_POLY7, COLOR1, P0, P4, EE, EF, P6, EG, EH, + // Case #92 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY8, COLOR1, EB, P2, P3, P4, EE, EF, P6, EG, + // Case #93 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, P4, EE, EF, P6, + ST_POLY7, COLOR1, P0, EA, EB, P2, P6, EG, EH, + // Case #94 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, P1, P2, P3, P4, EE, EF, + ST_POLY5, COLOR1, EA, P1, EF, P6, EG, + // Case #95 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, P3, P4, EE, + ST_POLY6, COLOR1, P0, EE, EF, P6, EG, EH, + // Case #96 + ST_POLY8, COLOR0, P0, P1, P2, P3, P4, EE, EG, P7, + ST_QUA, COLOR1, EE, P5, P6, EG, + // Case #97 + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_POLY7, COLOR1, P0, EA, EE, P5, P6, EG, EH, + // Case #98 + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY7, COLOR1, EA, P1, EB, EE, P5, P6, EG, + // Case #99 + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY8, COLOR1, P0, P1, EB, EE, P5, P6, EG, EH, + // Case #100 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY7, COLOR1, EB, P2, EC, EE, P5, P6, EG, + // Case #101 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, P5, P6, EG, EH, + ST_POLY6, COLOR1, EA, EB, P2, EC, EE, P5, + // Case #102 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY8, COLOR1, EA, P1, P2, EC, EE, P5, P6, EG, + // Case #103 + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, P1, P2, P6, EG, EH, + ST_POLY5, COLOR1, P2, EC, EE, P5, P6, + // Case #104 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR0, P0, P1, P2, EC, EG, P7, + ST_POLY7, COLOR1, EC, P3, ED, EE, P5, P6, EG, + // Case #105 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P3, ED, EE, P5, P6, EG, + ST_POLY6, COLOR1, P0, EA, EC, P3, EG, EH, + // Case #106 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, EC, P3, ED, EE, P5, P6, + ST_POLY6, COLOR1, EA, P1, EB, EC, P6, EG, + // Case #107 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, P0, P1, P5, P6, EG, EH, + ST_POLY7, COLOR1, P1, EB, EC, P3, ED, EE, P5, + // Case #108 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY8, COLOR1, EB, P2, P3, ED, EE, P5, P6, EG, + // Case #109 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, ED, EE, P5, P6, + ST_POLY7, COLOR1, P0, EA, EB, P2, P6, EG, EH, + // Case #110 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, P1, P2, P3, ED, EE, P5, + ST_POLY5, COLOR1, EA, P1, P5, P6, EG, + // Case #111 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, EE, + ST_POLY6, COLOR1, P0, EE, P5, P6, EG, EH, + // Case #112 + ST_POLY7, COLOR0, P0, P1, P2, P3, ED, EG, P7, + ST_POLY5, COLOR1, ED, P4, P5, P6, EG, + // Case #113 + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY8, COLOR1, P0, EA, ED, P4, P5, P6, EG, EH, + // Case #114 + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY8, COLOR1, EA, P1, EB, ED, P4, P5, P6, EG, + // Case #115 + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, P0, P4, P5, P6, EG, EH, + ST_POLY5, COLOR1, P0, P1, EB, ED, P4, + // Case #116 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY8, COLOR1, EB, P2, EC, ED, P4, P5, P6, EG, + // Case #117 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, P0, P4, P5, P6, EG, EH, + ST_POLY7, COLOR1, P0, EA, EB, P2, EC, ED, P4, + // Case #118 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, P2, EC, ED, P4, P5, P6, + ST_POLY5, COLOR1, EA, P1, P2, P6, EG, + // Case #119 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P4, + ST_POLY6, COLOR1, P0, P4, P5, P6, EG, EH, + // Case #120 + ST_POLY6, COLOR0, P0, P1, P2, EC, EG, P7, + ST_POLY6, COLOR1, EC, P3, P4, P5, P6, EG, + // Case #121 + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P3, P4, P5, P6, EG, EH, + ST_POLY5, COLOR1, P0, EA, EC, P3, EH, + // Case #122 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY6, COLOR1, EB, EC, P3, P4, P5, P6, + ST_POLY5, COLOR1, EA, P1, EB, P6, EG, + // Case #123 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P3, P4, P5, P6, EG, EH, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, EH, + // Case #124 + ST_POLY5, COLOR0, P0, P1, EB, EG, P7, + ST_POLY7, COLOR1, EB, P2, P3, P4, P5, P6, EG, + // Case #125 + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, P4, P5, P6, EG, + ST_POLY6, COLOR1, P0, EA, EB, P2, EG, EH, + // Case #126 + ST_QUA, COLOR0, P0, EA, EG, P7, + ST_POLY8, COLOR1, EA, P1, P2, P3, P4, P5, P6, EG, + // Case #127 + ST_TRI, COLOR0, EG, P7, EH, + ST_POLY6, COLOR1, P0, P1, P2, P3, P4, P5, + ST_POLY5, COLOR1, P0, P5, P6, EG, EH, + // Case #128 + ST_POLY6, COLOR0, P0, P1, P2, P3, P4, EH, + ST_POLY5, COLOR0, P4, P5, P6, EG, EH, + ST_TRI, COLOR1, EG, P7, EH, + // Case #129 + ST_POLY8, COLOR0, EA, P1, P2, P3, P4, P5, P6, EG, + ST_QUA, COLOR1, P0, EA, EG, P7, + // Case #130 + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY7, COLOR0, EB, P2, P3, P4, P5, P6, EG, + ST_POLY6, COLOR1, EA, P1, EB, EG, P7, EH, + // Case #131 + ST_POLY7, COLOR0, EB, P2, P3, P4, P5, P6, EG, + ST_POLY5, COLOR1, P0, P1, EB, EG, P7, + // Case #132 + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR0, EC, P3, P4, P5, P6, EG, + ST_POLY6, COLOR1, EB, P2, EC, EG, P7, EH, + // Case #133 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR0, EC, P3, P4, P5, P6, EG, + ST_POLY7, COLOR1, P0, EA, EB, P2, EC, EG, P7, + // Case #134 + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR0, EC, P3, P4, P5, P6, EG, + ST_POLY7, COLOR1, EA, P1, P2, EC, EG, P7, EH, + // Case #135 + ST_POLY6, COLOR0, EC, P3, P4, P5, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, EC, EG, P7, + // Case #136 + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY6, COLOR1, EC, P3, ED, EG, P7, EH, + // Case #137 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY7, COLOR1, P0, EA, EC, P3, ED, EG, P7, + // Case #138 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY6, COLOR1, EA, P1, EB, EC, P7, EH, + ST_POLY5, COLOR1, EC, P3, ED, EG, P7, + // Case #139 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY8, COLOR1, P0, P1, EB, EC, P3, ED, EG, P7, + // Case #140 + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY7, COLOR1, EB, P2, P3, ED, EG, P7, EH, + // Case #141 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY8, COLOR1, P0, EA, EB, P2, P3, ED, EG, P7, + // Case #142 + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY8, COLOR1, EA, P1, P2, P3, ED, EG, P7, EH, + // Case #143 + ST_POLY5, COLOR0, ED, P4, P5, P6, EG, + ST_POLY7, COLOR1, P0, P1, P2, P3, ED, EG, P7, + // Case #144 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EH, + ST_POLY6, COLOR1, ED, P4, EE, EG, P7, EH, + // Case #145 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY7, COLOR1, P0, EA, ED, P4, EE, EG, P7, + // Case #146 + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, EA, P1, EB, ED, P7, EH, + ST_POLY5, COLOR1, ED, P4, EE, EG, P7, + // Case #147 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY8, COLOR1, P0, P1, EB, ED, P4, EE, EG, P7, + // Case #148 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, P2, EC, ED, P4, EE, EG, + ST_POLY5, COLOR1, EB, P2, EG, P7, EH, + // Case #149 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, P7, + ST_POLY6, COLOR1, EC, ED, P4, EE, EG, P7, + // Case #150 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, EA, P1, P2, EC, P7, EH, + ST_POLY6, COLOR1, EC, ED, P4, EE, EG, P7, + // Case #151 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P7, + ST_POLY5, COLOR1, ED, P4, EE, EG, P7, + // Case #152 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY7, COLOR1, EC, P3, P4, EE, EG, P7, EH, + // Case #153 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY8, COLOR1, P0, EA, EC, P3, P4, EE, EG, P7, + // Case #154 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, P4, + ST_POLY6, COLOR1, EA, P4, EE, EG, P7, EH, + // Case #155 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, P7, + ST_POLY5, COLOR1, P3, P4, EE, EG, P7, + // Case #156 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY8, COLOR1, EB, P2, P3, P4, EE, EG, P7, EH, + // Case #157 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, P0, EA, EB, P2, P3, P4, + ST_POLY5, COLOR1, P0, P4, EE, EG, P7, + // Case #158 + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY6, COLOR1, EA, P1, P2, P3, P4, EH, + ST_POLY5, COLOR1, P4, EE, EG, P7, EH, + // Case #159 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_POLY8, COLOR1, P0, P1, P2, P3, P4, EE, EG, P7, + // Case #160 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY7, COLOR0, P0, P1, P2, P3, P4, EE, EH, + ST_POLY6, COLOR1, EE, P5, EF, EG, P7, EH, + // Case #161 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_POLY7, COLOR1, P0, EA, EE, P5, EF, EG, P7, + // Case #162 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY6, COLOR1, EA, P5, EF, EG, P7, EH, + ST_POLY5, COLOR1, EA, P1, EB, EE, P5, + // Case #163 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY8, COLOR1, P0, P1, EB, EE, P5, EF, EG, P7, + // Case #164 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, EB, P5, EF, EG, P7, EH, + ST_POLY5, COLOR1, EB, P2, EC, EE, P5, + // Case #165 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, P5, EF, EG, P7, + ST_POLY6, COLOR1, EA, EB, P2, EC, EE, P5, + // Case #166 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, EA, P1, P2, EG, P7, EH, + ST_POLY6, COLOR1, P2, EC, EE, P5, EF, EG, + // Case #167 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, P1, P2, EF, EG, P7, + ST_POLY5, COLOR1, P2, EC, EE, P5, EF, + // Case #168 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY6, COLOR1, P3, ED, EE, P5, EF, EG, + ST_POLY5, COLOR1, EC, P3, EG, P7, EH, + // Case #169 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P0, EE, P5, EF, EG, P7, + ST_POLY6, COLOR1, P0, EA, EC, P3, ED, EE, + // Case #170 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR1, P1, EB, EC, P3, ED, EE, + ST_POLY8, COLOR1, EA, P1, EE, P5, EF, EG, P7, EH, + // Case #171 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, P7, + ST_POLY7, COLOR1, P3, ED, EE, P5, EF, EG, P7, + // Case #172 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, P2, P3, ED, EE, P5, EF, + ST_POLY6, COLOR1, EB, P2, EF, EG, P7, EH, + // Case #173 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, EA, EB, P2, P3, P7, + ST_POLY7, COLOR1, P3, ED, EE, P5, EF, EG, P7, + // Case #174 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR1, P1, P2, P3, ED, EE, P5, + ST_POLY7, COLOR1, EA, P1, P5, EF, EG, P7, EH, + // Case #175 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, P3, ED, P7, + ST_POLY6, COLOR1, ED, EE, P5, EF, EG, P7, + // Case #176 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EH, + ST_POLY7, COLOR1, ED, P4, P5, EF, EG, P7, EH, + // Case #177 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY8, COLOR1, P0, EA, ED, P4, P5, EF, EG, P7, + // Case #178 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, P4, P5, EF, EG, P7, EH, + ST_POLY6, COLOR1, EA, P1, EB, ED, P4, EH, + // Case #179 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, P0, P1, P5, EF, EG, P7, + ST_POLY5, COLOR1, P1, EB, ED, P4, P5, + // Case #180 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, P2, EC, ED, P4, P5, EF, + ST_POLY6, COLOR1, EB, P2, EF, EG, P7, EH, + // Case #181 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, P0, P4, P5, EF, EG, P7, + ST_POLY7, COLOR1, P0, EA, EB, P2, EC, ED, P4, + // Case #182 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR1, P1, P2, EC, ED, P4, P5, + ST_POLY7, COLOR1, EA, P1, P5, EF, EG, P7, EH, + // Case #183 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, EC, ED, P7, + ST_POLY6, COLOR1, ED, P4, P5, EF, EG, P7, + // Case #184 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY8, COLOR1, EC, P3, P4, P5, EF, EG, P7, EH, + // Case #185 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P3, P4, P5, EF, EG, P7, + ST_POLY5, COLOR1, P0, EA, EC, P3, P7, + // Case #186 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P3, P4, P5, EF, EG, P7, + ST_POLY7, COLOR1, EA, P1, EB, EC, P3, P7, EH, + // Case #187 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P3, P4, P5, EF, EG, P7, + ST_POLY6, COLOR1, P0, P1, EB, EC, P3, P7, + // Case #188 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, P2, P3, P4, P5, EF, EG, + ST_POLY5, COLOR1, EB, P2, EG, P7, EH, + // Case #189 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, P4, P5, EF, EG, + ST_POLY6, COLOR1, P0, EA, EB, P2, EG, P7, + // Case #190 + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR1, P1, P2, P3, P4, P5, EF, + ST_POLY6, COLOR1, EA, P1, EF, EG, P7, EH, + // Case #191 + ST_TRI, COLOR0, EF, P6, EG, + ST_POLY6, COLOR1, P0, P1, P2, P3, P4, P7, + ST_POLY5, COLOR1, P4, P5, EF, EG, P7, + // Case #192 + ST_POLY8, COLOR0, P0, P1, P2, P3, P4, P5, EF, EH, + ST_QUA, COLOR1, EF, P6, P7, EH, + // Case #193 + ST_POLY7, COLOR0, EA, P1, P2, P3, P4, P5, EF, + ST_POLY5, COLOR1, P0, EA, EF, P6, P7, + // Case #194 + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, EF, + ST_POLY7, COLOR1, EA, P1, EB, EF, P6, P7, EH, + // Case #195 + ST_POLY6, COLOR0, EB, P2, P3, P4, P5, EF, + ST_POLY6, COLOR1, P0, P1, EB, EF, P6, P7, + // Case #196 + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY7, COLOR1, EB, P2, EC, EF, P6, P7, EH, + // Case #197 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY8, COLOR1, P0, EA, EB, P2, EC, EF, P6, P7, + // Case #198 + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY8, COLOR1, EA, P1, P2, EC, EF, P6, P7, EH, + // Case #199 + ST_POLY5, COLOR0, EC, P3, P4, P5, EF, + ST_POLY7, COLOR1, P0, P1, P2, EC, EF, P6, P7, + // Case #200 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY7, COLOR1, EC, P3, ED, EF, P6, P7, EH, + // Case #201 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY8, COLOR1, P0, EA, EC, P3, ED, EF, P6, P7, + // Case #202 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, EA, P1, EB, P6, P7, EH, + ST_POLY6, COLOR1, EB, EC, P3, ED, EF, P6, + // Case #203 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, P1, EB, EC, P6, P7, + ST_POLY5, COLOR1, EC, P3, ED, EF, P6, + // Case #204 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY8, COLOR1, EB, P2, P3, ED, EF, P6, P7, EH, + // Case #205 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P2, P6, P7, + ST_POLY5, COLOR1, P2, P3, ED, EF, P6, + // Case #206 + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY6, COLOR1, EA, P1, P2, P3, P7, EH, + ST_POLY5, COLOR1, P3, ED, EF, P6, P7, + // Case #207 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_POLY8, COLOR1, P0, P1, P2, P3, ED, EF, P6, P7, + // Case #208 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EH, + ST_POLY7, COLOR1, ED, P4, EE, EF, P6, P7, EH, + // Case #209 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY8, COLOR1, P0, EA, ED, P4, EE, EF, P6, P7, + // Case #210 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, P4, EE, EF, P6, P7, EH, + ST_POLY6, COLOR1, EA, P1, EB, ED, P4, EH, + // Case #211 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, P0, P1, EE, EF, P6, P7, + ST_POLY5, COLOR1, P1, EB, ED, P4, EE, + // Case #212 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, ED, P4, EE, EF, P6, P7, + ST_POLY6, COLOR1, EB, P2, EC, ED, P7, EH, + // Case #213 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, EA, EB, P2, P6, P7, + ST_POLY7, COLOR1, P2, EC, ED, P4, EE, EF, P6, + // Case #214 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, EA, P1, P2, P6, P7, EH, + ST_POLY7, COLOR1, P2, EC, ED, P4, EE, EF, P6, + // Case #215 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, P1, P2, EC, P6, P7, + ST_POLY6, COLOR1, EC, ED, P4, EE, EF, P6, + // Case #216 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY8, COLOR1, EC, P3, P4, EE, EF, P6, P7, EH, + // Case #217 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P0, P4, EE, EF, P6, P7, + ST_POLY5, COLOR1, P0, EA, EC, P3, P4, + // Case #218 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P3, P4, EE, EF, P6, P7, + ST_POLY7, COLOR1, EA, P1, EB, EC, P3, P7, EH, + // Case #219 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, P1, EB, EC, P6, P7, + ST_POLY6, COLOR1, EC, P3, P4, EE, EF, P6, + // Case #220 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, P2, P3, P4, EE, EF, P6, + ST_POLY5, COLOR1, EB, P2, P6, P7, EH, + // Case #221 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, P4, EE, EF, P6, + ST_POLY6, COLOR1, P0, EA, EB, P2, P6, P7, + // Case #222 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR1, P1, P2, P3, P4, EE, EF, + ST_POLY6, COLOR1, EA, P1, EF, P6, P7, EH, + // Case #223 + ST_TRI, COLOR0, EE, P5, EF, + ST_POLY6, COLOR1, P0, P1, P2, P3, P6, P7, + ST_POLY5, COLOR1, P3, P4, EE, EF, P6, + // Case #224 + ST_POLY7, COLOR0, P0, P1, P2, P3, P4, EE, EH, + ST_POLY5, COLOR1, EE, P5, P6, P7, EH, + // Case #225 + ST_POLY6, COLOR0, EA, P1, P2, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, EE, P5, P6, P7, + // Case #226 + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY8, COLOR1, EA, P1, EB, EE, P5, P6, P7, EH, + // Case #227 + ST_POLY5, COLOR0, EB, P2, P3, P4, EE, + ST_POLY7, COLOR1, P0, P1, EB, EE, P5, P6, P7, + // Case #228 + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY8, COLOR1, EB, P2, EC, EE, P5, P6, P7, EH, + // Case #229 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, P0, EA, EB, P5, P6, P7, + ST_POLY5, COLOR1, EB, P2, EC, EE, P5, + // Case #230 + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY6, COLOR1, EA, P1, P5, P6, P7, EH, + ST_POLY5, COLOR1, P1, P2, EC, EE, P5, + // Case #231 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_POLY8, COLOR1, P0, P1, P2, EC, EE, P5, P6, P7, + // Case #232 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY8, COLOR1, EC, P3, ED, EE, P5, P6, P7, EH, + // Case #233 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY6, COLOR1, P0, ED, EE, P5, P6, P7, + ST_POLY5, COLOR1, P0, EA, EC, P3, ED, + // Case #234 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, EA, P1, P5, P6, P7, EH, + ST_POLY7, COLOR1, P1, EB, EC, P3, ED, EE, P5, + // Case #235 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, P0, P1, EB, P5, P6, P7, + ST_POLY6, COLOR1, EB, EC, P3, ED, EE, P5, + // Case #236 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, P3, ED, EE, P5, P6, P7, + ST_POLY5, COLOR1, EB, P2, P3, P7, EH, + // Case #237 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, P0, EA, EB, P5, P6, P7, + ST_POLY6, COLOR1, EB, P2, P3, ED, EE, P5, + // Case #238 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR1, P1, P2, P3, ED, EE, P5, + ST_POLY6, COLOR1, EA, P1, P5, P6, P7, EH, + // Case #239 + ST_TRI, COLOR0, ED, P4, EE, + ST_POLY6, COLOR1, P0, P1, P2, P5, P6, P7, + ST_POLY5, COLOR1, P2, P3, ED, EE, P5, + // Case #240 + ST_POLY6, COLOR0, P0, P1, P2, P3, ED, EH, + ST_POLY6, COLOR1, ED, P4, P5, P6, P7, EH, + // Case #241 + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_POLY7, COLOR1, P0, EA, ED, P4, P5, P6, P7, + // Case #242 + ST_TRI, COLOR0, P0, EA, EH, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY6, COLOR1, EA, P4, P5, P6, P7, EH, + ST_POLY5, COLOR1, EA, P1, EB, ED, P4, + // Case #243 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_POLY8, COLOR1, P0, P1, EB, ED, P4, P5, P6, P7, + // Case #244 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY6, COLOR1, EC, ED, P4, P5, P6, P7, + ST_POLY5, COLOR1, EB, P2, EC, P7, EH, + // Case #245 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, P0, EA, P4, P5, P6, P7, + ST_POLY6, COLOR1, EA, EB, P2, EC, ED, P4, + // Case #246 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, EA, P4, P5, P6, P7, EH, + ST_POLY6, COLOR1, EA, P1, P2, EC, ED, P4, + // Case #247 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY6, COLOR1, P0, P1, P4, P5, P6, P7, + ST_POLY5, COLOR1, P1, P2, EC, ED, P4, + // Case #248 + ST_POLY5, COLOR0, P0, P1, P2, EC, EH, + ST_POLY7, COLOR1, EC, P3, P4, P5, P6, P7, EH, + // Case #249 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_POLY8, COLOR1, P0, EA, EC, P3, P4, P5, P6, P7, + // Case #250 + ST_TRI, COLOR0, P0, EA, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P3, P4, P5, P6, P7, EH, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, EH, + // Case #251 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, P0, P3, P4, P5, P6, P7, + ST_POLY5, COLOR1, P0, P1, EB, EC, P3, + // Case #252 + ST_QUA, COLOR0, P0, P1, EB, EH, + ST_POLY8, COLOR1, EB, P2, P3, P4, P5, P6, P7, EH, + // Case #253 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P2, P3, P4, P5, P6, P7, + ST_POLY5, COLOR1, P0, EA, EB, P2, P7, + // Case #254 + ST_TRI, COLOR0, P0, EA, EH, + ST_POLY6, COLOR1, P1, P2, P3, P4, P5, P6, + ST_POLY5, COLOR1, EA, P1, P6, P7, EH, + // Case #255 + ST_POLY8, COLOR1, P0, P1, P2, P3, P4, P5, P6, P7 +}; +// clang-format on + +const size_t clipShapesPoly8Size = sizeof(clipShapesPoly8) / sizeof(unsigned char); + +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom diff --git a/src/axom/bump/clipping/ClipCasesQua.cpp b/src/axom/bump/clipping/ClipCasesQua.cpp index e83423f830..5bbc45aaf6 100644 --- a/src/axom/bump/clipping/ClipCasesQua.cpp +++ b/src/axom/bump/clipping/ClipCasesQua.cpp @@ -1,105 +1,80 @@ -// Copyright (c) Lawrence Livermore National Security, LLC and other VisIt -// Project developers. See the top-level LICENSE file for dates and other -// details. No copyright assignment is required to contribute to VisIt. - +// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and +// other Axom Project Developers. See the top-level LICENSE file for details. +// +// SPDX-License-Identifier: (BSD-3-Clause) #include "ClipCases.h" -//--------------------------------------------------------------------------- -// Axom modifications -// clang-format off -namespace axom { -namespace bump { -namespace clipping { -namespace tables { -//--------------------------------------------------------------------------- - -// Programmer: Jeremy Meredith -// Date : September 18, 2003 -// This file is meant to be read and created by a program other than a -// compiler. If you must modify it by hand, at least be nice to the -// parser and don't add anything else to this file or rearrange it. +namespace axom +{ +namespace bump +{ +namespace clipping +{ +namespace tables +{ int numClipCasesQua = 16; -int numClipShapesQua[16] = { - 1, 3, 3, 2, 3, 4, 2, 3, // cases 0 - 7 - 3, 2, 4, 3, 2, 3, 3, 1 // cases 8 - 15 -}; +int numClipShapesQua[] = {1, 2, 2, 2, 2, 3, 2, 2, 2, 2, 3, 2, 2, 2, 2, 1}; -int startClipShapesQua[16] = { - 0, 6, 22, 38, 50, 66, 88, 100, // cases 0 - 7 - 116, 132, 144, 166, 182, 194, 210, 226 // cases 8 - 15 -}; +int startClipShapesQua[] = {0, 6, 18, 30, 42, 54, 72, 84, 96, 108, 120, 138, 150, 162, 174, 186}; +// clang-format off unsigned char clipShapesQua[] = { - // Case #0: Unique case #1 - ST_QUA, COLOR0, P0, P1, P2, P3, - // Case #1: Unique case #2 - ST_QUA, COLOR0, ED, EA, P1, P3, - ST_TRI, COLOR0, P3, P1, P2, - ST_TRI, COLOR1, P0, EA, ED, - // Case #2: (cloned #1) - ST_QUA, COLOR0, EA, EB, P2, P0, - ST_TRI, COLOR0, P0, P2, P3, - ST_TRI, COLOR1, P1, EB, EA, - // Case #3: Unique case #3 - ST_QUA, COLOR0, ED, EB, P2, P3, - ST_QUA, COLOR1, P0, P1, EB, ED, - // Case #4: (cloned #1) - ST_QUA, COLOR0, EB, EC, P3, P1, - ST_TRI, COLOR0, P1, P3, P0, - ST_TRI, COLOR1, P2, EC, EB, - // Case #5: Unique case #4 - ST_TRI, COLOR0, ED, EC, P3, - ST_TRI, COLOR0, EB, EA, P1, - ST_QUA, COLOR1, P2, P0, EA, EB, - ST_QUA, COLOR1, P0, P2, EC, ED, - // Case #6: (cloned #3) - ST_QUA, COLOR0, EA, EC, P3, P0, - ST_QUA, COLOR1, P1, P2, EC, EA, - // Case #7: Unique case #5 - ST_TRI, COLOR0, ED, EC, P3, - ST_QUA, COLOR1, P0, P2, EC, ED, - ST_TRI, COLOR1, P1, P2, P0, - // Case #8: (cloned #1) - ST_QUA, COLOR0, EC, ED, P0, P2, - ST_TRI, COLOR0, P2, P0, P1, - ST_TRI, COLOR1, P3, ED, EC, - // Case #9: (cloned #3) - ST_QUA, COLOR0, EC, EA, P1, P2, - ST_QUA, COLOR1, P3, P0, EA, EC, - // Case #10: (cloned #5) - ST_TRI, COLOR0, EA, ED, P0, - ST_TRI, COLOR0, EC, EB, P2, - ST_QUA, COLOR1, P3, P1, EB, EC, - ST_QUA, COLOR1, P1, P3, ED, EA, - // Case #11: (cloned #7) - ST_TRI, COLOR0, EC, EB, P2, - ST_QUA, COLOR1, P3, P1, EB, EC, - ST_TRI, COLOR1, P0, P1, P3, - // Case #12: (cloned #3) - ST_QUA, COLOR0, EB, ED, P0, P1, - ST_QUA, COLOR1, P2, P3, ED, EB, - // Case #13: (cloned #7) - ST_TRI, COLOR0, EB, EA, P1, - ST_QUA, COLOR1, P2, P0, EA, EB, - ST_TRI, COLOR1, P3, P0, P2, - // Case #14: (cloned #7) - ST_TRI, COLOR0, EA, ED, P0, - ST_QUA, COLOR1, P1, P3, ED, EA, - ST_TRI, COLOR1, P2, P3, P1, - // Case #15: Unique case #6 - ST_QUA, COLOR1, P0, P1, P2, P3, - // Dummy - 0 + // Case #0 + ST_QUA, COLOR0, P0, P1, P2, P3, + // Case #1 + ST_POLY5, COLOR0, EA, P1, P2, P3, ED, + ST_TRI, COLOR1, P0, EA, ED, + // Case #2 + ST_POLY5, COLOR0, P0, EA, EB, P2, P3, + ST_TRI, COLOR1, EA, P1, EB, + // Case #3 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P0, P1, EB, ED, + // Case #4 + ST_POLY5, COLOR0, P0, P1, EB, EC, P3, + ST_TRI, COLOR1, EB, P2, EC, + // Case #5 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY6, COLOR1, P0, EA, EB, P2, EC, ED, + // Case #6 + ST_QUA, COLOR0, P0, EA, EC, P3, + ST_QUA, COLOR1, EA, P1, P2, EC, + // Case #7 + ST_TRI, COLOR0, EC, P3, ED, + ST_POLY5, COLOR1, P0, P1, P2, EC, ED, + // Case #8 + ST_POLY5, COLOR0, P0, P1, P2, EC, ED, + ST_TRI, COLOR1, EC, P3, ED, + // Case #9 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P0, EA, EC, P3, + // Case #10 + ST_TRI, COLOR0, P0, EA, ED, + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY6, COLOR1, EA, P1, EB, EC, P3, ED, + // Case #11 + ST_TRI, COLOR0, EB, P2, EC, + ST_POLY5, COLOR1, P0, P1, EB, EC, P3, + // Case #12 + ST_QUA, COLOR0, P0, P1, EB, ED, + ST_QUA, COLOR1, EB, P2, P3, ED, + // Case #13 + ST_TRI, COLOR0, EA, P1, EB, + ST_POLY5, COLOR1, P0, EA, EB, P2, P3, + // Case #14 + ST_TRI, COLOR0, P0, EA, ED, + ST_POLY5, COLOR1, EA, P1, P2, P3, ED, + // Case #15 + ST_QUA, COLOR1, P0, P1, P2, P3 }; +// clang-format on -//--------------------------------------------------------------------------- -// Axom modifications const size_t clipShapesQuaSize = sizeof(clipShapesQua) / sizeof(unsigned char); -} // namespace tables -} // namespace clipping -} // namespace bump -} // namespace axom -// clang-format on -//--------------------------------------------------------------------------- + +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom diff --git a/src/axom/bump/clipping/ClipField.hpp b/src/axom/bump/clipping/ClipField.hpp index 27929ca041..2f0e35a24d 100644 --- a/src/axom/bump/clipping/ClipField.hpp +++ b/src/axom/bump/clipping/ClipField.hpp @@ -56,7 +56,7 @@ namespace detail * \return The ShapeID value that matches the st_index, or 0 if there is no match. */ template -inline AXOM_HOST_DEVICE IntegerType ST_Index_to_ShapeID(IntegerType st_index) +AXOM_HOST_DEVICE inline constexpr IntegerType ST_Index_to_ShapeID(IntegerType st_index) { using namespace axom::bump::clipping::tables; IntegerType shapeID = 0; @@ -71,6 +71,12 @@ inline AXOM_HOST_DEVICE IntegerType ST_Index_to_ShapeID(IntegerType st_index) case ST_QUA: shapeID = views::Quad_ShapeID; break; + case ST_POLY5: + case ST_POLY6: + case ST_POLY7: + case ST_POLY8: + shapeID = views::Polygon_ShapeID; + break; case ST_TET: shapeID = views::Tet_ShapeID; break; @@ -90,10 +96,11 @@ inline AXOM_HOST_DEVICE IntegerType ST_Index_to_ShapeID(IntegerType st_index) /*! * \brief Returns a clip table index for the input shapeId. * \param shapeId A shapeID (e.g. Tet_ShapeID) + * \param numNodes The number of nodes in the shape. * \return The clip table index for the shape. */ AXOM_HOST_DEVICE -inline int getClipTableIndex(int shapeId) +inline constexpr int getClipTableIndex(int shapeId, axom::IndexType numNodes) { int index = 0; switch(shapeId) @@ -104,17 +111,40 @@ inline int getClipTableIndex(int shapeId) case views::Quad_ShapeID: index = 1; break; + case views::Polygon_ShapeID: + switch(numNodes) + { + case 3: + index = 0; + break; // triangle + case 4: + index = 1; + break; // quad + case 5: + index = 2; + break; // pentagon + case 6: + index = 3; + break; // hexagon + case 7: + index = 4; + break; // septagon + case 8: + index = 5; + break; // octagon + } + break; case views::Tet_ShapeID: - index = 2; + index = 6; break; case views::Pyramid_ShapeID: - index = 3; + index = 7; break; case views::Wedge_ShapeID: - index = 4; + index = 8; break; case views::Hex_ShapeID: - index = 5; + index = 9; break; } return index; @@ -142,46 +172,43 @@ inline bool shapeIsSelected(unsigned char color, int selection) } AXOM_HOST_DEVICE -constexpr IndexType maxPointForDimension(int dim) +constexpr IndexType maxPointForDimension(int dim, IndexType numPoints) { - return (dim == 3) - ? axom::bump::clipping::tables::P7 - : ((dim == 2) ? axom::bump::clipping::tables::P3 : axom::bump::clipping::tables::P1); + // 3D default + IndexType maxPoint = static_cast(axom::bump::clipping::tables::P7); + switch(dim) + { + case 2: + // We take the max since we might have a polygon. + maxPoint = + axom::utilities::max(static_cast(axom::bump::clipping::tables::P0) + numPoints - 1, + static_cast(axom::bump::clipping::tables::P3)); + break; + case 1: + maxPoint = static_cast(axom::bump::clipping::tables::P1); + break; + } + return maxPoint; } AXOM_HOST_DEVICE -constexpr IndexType maxEdgeForDimension(int dim) -{ - return (dim == 3) - ? axom::bump::clipping::tables::EL - : ((dim == 2) ? axom::bump::clipping::tables::ED : axom::bump::clipping::tables::EB); -} - -template -inline AXOM_HOST_DEVICE int unique_count(const IdType *values, int n) +constexpr IndexType maxEdgeForDimension(int dim, IndexType numPoints) { - IdType v[MAXSIZE]; - // Start off with one unique element - int nv = 1; - v[0] = values[0]; - // Scan the rest - for(int j = 1; j < n; j++) + // 3D default + IndexType maxEdge = static_cast(axom::bump::clipping::tables::EL); + switch(dim) { - int fi = -1; - for(int i = 0; i < nv; i++) - { - if(values[j] == v[i]) - { - fi = i; - break; - } - } - if(fi == -1) - { - v[nv++] = values[j]; - } + case 2: + // We take the max since we might have a polygon. + maxEdge = + axom::utilities::max(static_cast(axom::bump::clipping::tables::EA) + numPoints - 1, + static_cast(axom::bump::clipping::tables::ED)); + break; + case 1: + maxEdge = static_cast(axom::bump::clipping::tables::EA); + break; } - return nv; + return maxEdge; } //------------------------------------------------------------------------------ @@ -207,85 +234,49 @@ struct FragmentData }; //------------------------------------------------------------------------------ -#if defined(AXOM_CLIP_FILTER_DEGENERATES) -/*! - * \brief Replace data in the input Conduit node with a denser version using the mask. - * - * \tparam ExecSpace The execution space. - * \tparam DataView The type of data view that is operated on. - * - * \param n_src The Conduit node that contains the data. - * \param srcView A view that wraps the input Conduit data. - * \param newSize The new array size. - * \param maskView The mask for valid data elements. - * \param maskOffsetsView The offsets view to indicate where to write the new data. - */ -template -DataView filter(conduit::Node &n_src, - DataView srcView, - axom::IndexType newSize, - axom::ArrayView maskView, - axom::ArrayView maskOffsetsView) -{ - using value_type = typename DataView::value_type; - namespace utils = axom::bump::utilities; - - // Get the ID of a Conduit allocator that will allocate through Axom with device allocator allocatorID. - utils::ConduitAllocateThroughAxom c2a; - const int conduitAllocatorID = c2a.getConduitAllocatorID(); - - conduit::Node n_values; - n_values.set_allocator(conduitAllocatorID); - n_values.set(conduit::DataType(utils::cpp2conduit::id, newSize)); - auto valuesView = utils::make_array_view(n_values); - const auto nValues = maskView.size(); - axom::for_all( - nValues, - AXOM_LAMBDA(axom::IndexType index) { - if(maskView[index] > 0) - { - const auto destIndex = maskOffsetsView[index]; - valuesView[destIndex] = srcView[index]; - } - }); - - n_src.swap(n_values); - return utils::make_array_view(n_src); -} - -/// NOTE - Use partial specialization (instead of the cleaner "if constexpr") -/// for now to implement some 2D-specific behavior. - /*! - * \brief Base template for degenerate removal. + * \brief Base template for handling fragments when we make new connectivity. */ template -struct DegenerateHandler +struct FragmentOperations { /*! - * \brief Set the size for the current fragment. + * \brief Add the current fragment. * - * \param fragmentsView The number of fragments for the szIndex zone. + * \param fragment The current fragment to add. * \param connView The new connectivity. - * \param sizesView The new mesh sizes. - * \param szIndex The zone index currently being processed. - * \param nidsThisFragment The number of node ids in the current fragment. - * \param sizeIndex The write index for the sizes to output. - * \param outputIndex The write index for the offsets to output. + * \param size The size for the current fragment. + * \param offset The offset for the current fragment. + * \param shape The shape for the current fragment. + * \param color The color for the current fragment. + * \param point_2_new A map to determine the new node id from the current node id. + * \param[out] outputIndex The offset in the connView where we're writing fragment data. * - * \return True if the fragment is degenerate, false otherwise. + * \return True if the fragment was added, false otherwise. */ AXOM_HOST_DEVICE - static bool setSize(axom::ArrayView AXOM_UNUSED_PARAM(fragmentsView), - axom::ArrayView AXOM_UNUSED_PARAM(connView), - axom::ArrayView sizesView, - axom::IndexType AXOM_UNUSED_PARAM(szIndex), - int nIdsThisFragment, - int sizeIndex, - int &AXOM_UNUSED_PARAM(outputIndex)) + static bool addFragment(const axom::bump::clipping::TableView::TableDataView &fragment, + axom::ArrayView connView, + ConnectivityType &size, + ConnectivityType &offset, + ConnectivityType &shape, + int &color, + const ConnectivityType *point_2_new, + int &outputIndex) { - sizesView[sizeIndex] = nIdsThisFragment; - return false; + // Output the nodes used in this zone. + const int fragmentSize = fragment.size(); + const auto fragmentShape = fragment[0]; + offset = outputIndex; + for(int i = 2; i < fragmentSize; i++) + { + connView[outputIndex++] = point_2_new[fragment[i]]; + } + const auto nIdsThisFragment = fragmentSize - 2; + size = nIdsThisFragment; + shape = detail::ST_Index_to_ShapeID(fragmentShape); + color = fragment[1] - axom::bump::clipping::tables::COLOR0; + return true; } /*! @@ -332,56 +323,128 @@ struct DegenerateHandler } }; +#if defined(AXOM_CLIP_FILTER_DEGENERATES) /*! - * \brief Partial specialization that implements some degeneracy handling for 2D meshes. + * \brief Replace data in the input Conduit node with a denser version using the mask. + * + * \tparam ExecSpace The execution space. + * \tparam DataView The type of data view that is operated on. + * + * \param n_src The Conduit node that contains the data. + * \param srcView A view that wraps the input Conduit data. + * \param newSize The new array size. + * \param maskView The mask for valid data elements. + * \param maskOffsetsView The offsets view to indicate where to write the new data. + */ +template +DataView filter(conduit::Node &n_src, + DataView srcView, + axom::IndexType newSize, + axom::ArrayView maskView, + axom::ArrayView maskOffsetsView) +{ + using value_type = typename DataView::value_type; + namespace utils = axom::bump::utilities; + + // Get the ID of a Conduit allocator that will allocate through Axom with device allocator allocatorID. + utils::ConduitAllocateThroughAxom c2a; + const int conduitAllocatorID = c2a.getConduitAllocatorID(); + + conduit::Node n_values; + n_values.set_allocator(conduitAllocatorID); + n_values.set(conduit::DataType(utils::cpp2conduit::id, newSize)); + auto valuesView = utils::make_array_view(n_values); + const auto nValues = maskView.size(); + axom::for_all( + nValues, + AXOM_LAMBDA(axom::IndexType index) { + if(maskView[index] > 0) + { + const auto destIndex = maskOffsetsView[index]; + valuesView[destIndex] = srcView[index]; + } + }); + + n_src.swap(n_values); + return utils::make_array_view(n_src); +} + +/*! + * \brief Partial specialization that implements adding fragments for 2D meshes with + * some degeneracy handling. This specialization is only enabled for 2D meshes + * when AXOM_CLIP_FILTER_DEGENERATES is enabled. */ template -struct DegenerateHandler<2, ExecSpace, ConnectivityType> +struct FragmentOperations<2, ExecSpace, ConnectivityType> { using reduce_policy = typename axom::execution_space::reduce_policy; /*! - * \brief Set the size for the current fragment. + * \brief Add the current fragment. * - * \param fragmentsView The number of fragments for the szIndex zone. + * \param fragment The current fragment to add. * \param connView The new connectivity. - * \param sizesView The new mesh sizes. - * \param szIndex The zone index currently being processed. - * \param nidsThisFragment The number of node ids in the current fragment. - * \param sizeIndex The write index for the sizes to output. - * \param outputIndex The write index for the offsets to output. + * \param size The size for the current fragment. + * \param offset The offset for the current fragment. + * \param shape The shape for the current fragment. + * \param color The color for the current fragment. + * \param point_2_new A map to determine the new node id from the current node id. + * \param[out] outputIndex The offset in the connView where we're writing fragment data. * - * \return True if the fragment is degenerate, false otherwise. + * \return True if the fragment was added, false otherwise. */ AXOM_HOST_DEVICE - static bool setSize(axom::ArrayView fragmentsView, - axom::ArrayView connView, - axom::ArrayView sizesView, - axom::IndexType szIndex, - int nIdsThisFragment, - int sizeIndex, - int &outputIndex) + static bool addFragment(const axom::bump::clipping::TableView::TableDataView &fragment, + axom::ArrayView connView, + ConnectivityType &size, + ConnectivityType &offset, + ConnectivityType &shape, + int &color, + const ConnectivityType *point_2_new, + int &outputIndex) { - const int connStart = outputIndex - nIdsThisFragment; + constexpr int NotFound = -1; + // Output the nodes used in this zone. + const int fragmentSize = fragment.size(); + const auto fragmentShape = fragment[0]; + int nIdsThisFragment = 0; + for(int i = 2; i < fragmentSize; i++) + { + const auto nodeId = point_2_new[fragment[i]]; + // In a 2D shape, skip adding the node if we've added it before. + int foundIndex = NotFound; + for(int j = 0; j < nIdsThisFragment && foundIndex == NotFound; j++) + { + if(connView[outputIndex + j] == nodeId) + { + foundIndex = j; + } + } + if(foundIndex == NotFound) + { + connView[outputIndex + nIdsThisFragment] = nodeId; + nIdsThisFragment++; + } + } - // Check for degenerate - const int nUniqueIds = - detail::unique_count(connView.data() + connStart, nIdsThisFragment); - const bool thisFragmentDegenerate = nUniqueIds < (nIdsThisFragment - 1); + const bool added = nIdsThisFragment >= 3; + offset = outputIndex; - // Rewind the outputIndex so we don't emit it in the connectivity. - if(thisFragmentDegenerate) - { - outputIndex = connStart; + // If we're adding the fragment, record non-zero size. + size = added ? nIdsThisFragment : 0; - // There is one less fragment than we're expecting in the output. - fragmentsView[szIndex] -= 1; - } + // Determine the shape from the number of ids we admitted. + shape = detail::ST_Index_to_ShapeID(fragmentShape); + shape = (nIdsThisFragment == 3) ? static_cast(views::Tri_ShapeID) : shape; + shape = (nIdsThisFragment == 4) ? static_cast(views::Quad_ShapeID) : shape; + shape = (nIdsThisFragment > 4) ? static_cast(views::Polygon_ShapeID) : shape; + + color = fragment[1] - axom::bump::clipping::tables::COLOR0; - // Mark empty size. - sizesView[sizeIndex] = thisFragmentDegenerate ? 0 : nIdsThisFragment; + // Move the connectivity output index forward if we added the fragment. + outputIndex += added ? nIdsThisFragment : 0; - return thisFragmentDegenerate; + return added; } /*! @@ -824,7 +887,8 @@ class ClipField public: using BlendData = axom::bump::BlendData; using SliceData = axom::bump::SliceData; - using ClipTableViews = axom::StackArray; + static constexpr int TOTAL_ST_SHAPES = 10; + using ClipTableViews = axom::StackArray; using Intersector = IntersectPolicy; using BitSet = detail::BitSet; @@ -1193,15 +1257,19 @@ class ClipField AXOM_ANNOTATE_SCOPE("createClipTableViews"); if(dimension == -1 || dimension == 2) { - views[detail::getClipTableIndex(views::Tri_ShapeID)] = m_clipTables[ST_TRI].view(); - views[detail::getClipTableIndex(views::Quad_ShapeID)] = m_clipTables[ST_QUA].view(); + views[detail::getClipTableIndex(views::Tri_ShapeID, 3)] = m_clipTables[ST_TRI].view(); + views[detail::getClipTableIndex(views::Quad_ShapeID, 4)] = m_clipTables[ST_QUA].view(); + views[detail::getClipTableIndex(views::Polygon_ShapeID, 5)] = m_clipTables[ST_POLY5].view(); + views[detail::getClipTableIndex(views::Polygon_ShapeID, 6)] = m_clipTables[ST_POLY6].view(); + views[detail::getClipTableIndex(views::Polygon_ShapeID, 7)] = m_clipTables[ST_POLY7].view(); + views[detail::getClipTableIndex(views::Polygon_ShapeID, 8)] = m_clipTables[ST_POLY8].view(); } if(dimension == -1 || dimension == 3) { - views[detail::getClipTableIndex(views::Tet_ShapeID)] = m_clipTables[ST_TET].view(); - views[detail::getClipTableIndex(views::Pyramid_ShapeID)] = m_clipTables[ST_PYR].view(); - views[detail::getClipTableIndex(views::Wedge_ShapeID)] = m_clipTables[ST_WDG].view(); - views[detail::getClipTableIndex(views::Hex_ShapeID)] = m_clipTables[ST_HEX].view(); + views[detail::getClipTableIndex(views::Tet_ShapeID, 4)] = m_clipTables[ST_TET].view(); + views[detail::getClipTableIndex(views::Pyramid_ShapeID, 5)] = m_clipTables[ST_PYR].view(); + views[detail::getClipTableIndex(views::Wedge_ShapeID, 6)] = m_clipTables[ST_WDG].view(); + views[detail::getClipTableIndex(views::Hex_ShapeID, 8)] = m_clipTables[ST_HEX].view(); } } @@ -1253,7 +1321,7 @@ class ClipField zoneData.m_clipCasesView[szIndex] = clipcase; // Iterate over the shapes in this clip case to determine the number of blend groups. - const auto clipTableIndex = detail::getClipTableIndex(zone.id()); + const auto clipTableIndex = detail::getClipTableIndex(zone.id(), zone.numberOfNodes()); const auto &ctView = clipTableViews[clipTableIndex]; int thisBlendGroups = 0; // The number of blend groups produced in this case. @@ -1319,8 +1387,8 @@ class ClipField // Save the flags for the points that were used in this zone zoneData.m_pointsUsedView[szIndex] = ptused; - const auto PMAX = detail::maxPointForDimension(zone.dimension()); - const auto EMAX = detail::maxEdgeForDimension(zone.dimension()); + const auto PMAX = detail::maxPointForDimension(zone.dimension(), zone.numberOfNodes()); + const auto EMAX = detail::maxEdgeForDimension(zone.dimension(), zone.numberOfNodes()); #if defined(AXOM_REDUCE_BLEND_GROUPS) // NOTE: We are not going to emit blend groups for P0..P7 points. @@ -1524,7 +1592,7 @@ class ClipField const auto clipcase = zoneData.m_clipCasesView[szIndex]; // Iterate over the shapes in this clip case to determine the number of blend groups. - const auto clipTableIndex = detail::getClipTableIndex(zone.id()); + const auto clipTableIndex = detail::getClipTableIndex(zone.id(), zone.numberOfNodes()); const auto &ctView = clipTableViews[clipTableIndex]; // These are the points used in this zone's fragments. @@ -1581,7 +1649,7 @@ class ClipField #if !defined(AXOM_REDUCE_BLEND_GROUPS) // Add blend group for each original point that was used. // NOTE - this can add a lot of blend groups with 1 node. - const auto PMAX = detail::maxPointForDimension(zone.dimension()); + const auto PMAX = detail::maxPointForDimension(zone.dimension(), zone.numberOfNodes()); for(IndexType pid = P0; pid <= PMAX; pid++) { if(axom::utilities::bitIsSet(ptused, pid)) @@ -1593,7 +1661,7 @@ class ClipField } #endif // Add blend group for each edge point that was used. - const auto EMAX = detail::maxEdgeForDimension(zone.dimension()); + const auto EMAX = detail::maxEdgeForDimension(zone.dimension(), zone.numberOfNodes()); for(IndexType pid = EA; pid <= EMAX; pid++) { if(axom::utilities::bitIsSet(ptused, pid)) @@ -1661,6 +1729,8 @@ class ClipField { AXOM_ANNOTATE_SCOPE("makeTopology"); using namespace axom::bump::clipping::tables; + using FragmentOps = + detail::FragmentOperations; const auto selection = getSelection(opts); AXOM_ANNOTATE_BEGIN("allocation"); @@ -1770,8 +1840,8 @@ class ClipField } } - const BitSet PMAX = detail::maxPointForDimension(zone.dimension()); - const BitSet EMAX = detail::maxEdgeForDimension(zone.dimension()); + const BitSet PMAX = detail::maxPointForDimension(zone.dimension(), zone.numberOfNodes()); + const BitSet EMAX = detail::maxEdgeForDimension(zone.dimension(), zone.numberOfNodes()); #if defined(AXOM_REDUCE_BLEND_GROUPS) // For single nodes, we did not make a blend group. We look up the new // node id from nodeData.m_oldNodeToNewNodeView. @@ -1822,10 +1892,11 @@ class ClipField int sizeIndex = fragmentData.m_fragmentOffsetsView[szIndex]; #if defined(AXOM_CLIP_FILTER_DEGENERATES) bool degenerates = false; + int thisFragments = 0; #endif // Iterate over the selected fragments and emit connectivity for them. const auto clipcase = zoneData.m_clipCasesView[szIndex]; - const auto clipTableIndex = detail::getClipTableIndex(zone.id()); + const auto clipTableIndex = detail::getClipTableIndex(zone.id(), zone.numberOfNodes()); const auto ctView = clipTableViews[clipTableIndex]; auto it = ctView.begin(clipcase); const auto end = ctView.end(clipcase); @@ -1839,36 +1910,34 @@ class ClipField { if(detail::shapeIsSelected(fragment[1], selection)) { - // Output the nodes used in this zone. - const int fragmentSize = fragment.size(); - offsetsView[sizeIndex] = outputIndex; - for(int i = 2; i < fragmentSize; i++) - { - connView[outputIndex++] = point_2_new[fragment[i]]; - } - const auto nIdsThisFragment = fragmentSize - 2; + [[maybe_unused]] const bool addedFragment = + FragmentOps::addFragment(fragment, + connView, + sizesView[sizeIndex], + offsetsView[sizeIndex], + shapesView[sizeIndex], + colorView[sizeIndex], + point_2_new, + outputIndex); + sizeIndex++; + #if defined(AXOM_CLIP_FILTER_DEGENERATES) - // Set the output zone size, checking to see whether it is degenerate. - degenerates |= - detail::DegenerateHandler::setSize( - fragmentData.m_fragmentsView, - connView, - sizesView, - szIndex, - nIdsThisFragment, - sizeIndex, - outputIndex); -#else - sizesView[sizeIndex] = nIdsThisFragment; + thisFragments += addedFragment ? 1 : 0; + + // Record whether we have had any degenerates. + degenerates |= !addedFragment; #endif - shapesView[sizeIndex] = detail::ST_Index_to_ShapeID(fragmentShape); - colorView[sizeIndex] = fragment[1] - COLOR0; - sizeIndex++; } } } #if defined(AXOM_CLIP_FILTER_DEGENERATES) + // If there were degenerates then update the fragment count. + if(degenerates) + { + fragmentData.m_fragmentsView[szIndex] = thisFragments; + } + // Reduce overall whether there are degenerates. degenerates_reduce |= degenerates; #endif @@ -1894,16 +1963,15 @@ class ClipField // Filter out shapes that were marked as zero-size, adjusting connectivity and other arrays. if(degenerates_reduce.get()) { - detail::DegenerateHandler::filterZeroSizes( - fragmentData, - n_sizes, - n_offsets, - n_shapes, - n_color_values, - sizesView, - offsetsView, - shapesView, - colorView); + FragmentOps::filterZeroSizes(fragmentData, + n_sizes, + n_offsets, + n_shapes, + n_color_values, + sizesView, + offsetsView, + shapesView, + colorView); } #endif @@ -1932,13 +2000,7 @@ class ClipField #if defined(AXOM_CLIP_FILTER_DEGENERATES) // Handle some quad->tri degeneracies, depending on dimension. - shapesUsed = - detail::DegenerateHandler::quadtri( - shapesUsed, - connView, - sizesView, - offsetsView, - shapesView); + shapesUsed = FragmentOps::quadtri(shapesUsed, connView, sizesView, offsetsView, shapesView); #endif // Add shape information to the connectivity. @@ -1947,11 +2009,28 @@ class ClipField SLIC_ASSERT_MSG(shapeMap.empty() == false, "The shape map is empty!"); if(axom::utilities::popcount(static_cast(shapesUsed)) > 1) { - n_newTopo["elements/shape"] = "mixed"; - conduit::Node &n_shape_map = n_newTopo["elements/shape_map"]; + // Determine the dimensions for the shapes that were used. + std::set usedDimensions; for(auto it = shapeMap.cbegin(); it != shapeMap.cend(); it++) { - n_shape_map[it->first] = it->second; + usedDimensions.insert(views::shapeDimension(it->second)); + } + SLIC_ASSERT(usedDimensions.size() > 0); + const auto it = usedDimensions.begin(); + if(usedDimensions.size() == 1 && *it == 2) + { + // All were 2D. Promote to polygonal. + n_newTopo["elements/shape"] = views::PolygonTraits::name(); + n_newTopo["elements"].remove("shapes"); + } + else + { + n_newTopo["elements/shape"] = "mixed"; + conduit::Node &n_shape_map = n_newTopo["elements/shape_map"]; + for(auto it = shapeMap.cbegin(); it != shapeMap.cend(); it++) + { + n_shape_map[it->first] = it->second; + } } } else @@ -2180,26 +2259,32 @@ class ClipField { std::map sm; - if(axom::utilities::bitIsSet(shapes, views::Line_ShapeID)) sm["line"] = views::Line_ShapeID; + if(axom::utilities::bitIsSet(shapes, views::Line_ShapeID)) + sm[views::LineTraits::name()] = views::Line_ShapeID; - if(axom::utilities::bitIsSet(shapes, views::Tri_ShapeID)) sm["tri"] = views::Tri_ShapeID; + if(axom::utilities::bitIsSet(shapes, views::Tri_ShapeID)) + sm[views::TriTraits::name()] = views::Tri_ShapeID; - if(axom::utilities::bitIsSet(shapes, views::Quad_ShapeID)) sm["quad"] = views::Quad_ShapeID; + if(axom::utilities::bitIsSet(shapes, views::Quad_ShapeID)) + sm[views::QuadTraits::name()] = views::Quad_ShapeID; if(axom::utilities::bitIsSet(shapes, views::Polygon_ShapeID)) - sm["polygon"] = views::Polygon_ShapeID; + sm[views::PolygonTraits::name()] = views::Polygon_ShapeID; - if(axom::utilities::bitIsSet(shapes, views::Tet_ShapeID)) sm["tet"] = views::Tet_ShapeID; + if(axom::utilities::bitIsSet(shapes, views::Tet_ShapeID)) + sm[views::TetTraits::name()] = views::Tet_ShapeID; if(axom::utilities::bitIsSet(shapes, views::Pyramid_ShapeID)) - sm["pyramid"] = views::Pyramid_ShapeID; + sm[views::PyramidTraits::name()] = views::Pyramid_ShapeID; - if(axom::utilities::bitIsSet(shapes, views::Wedge_ShapeID)) sm["wedge"] = views::Wedge_ShapeID; + if(axom::utilities::bitIsSet(shapes, views::Wedge_ShapeID)) + sm[views::WedgeTraits::name()] = views::Wedge_ShapeID; - if(axom::utilities::bitIsSet(shapes, views::Hex_ShapeID)) sm["hex"] = views::Hex_ShapeID; + if(axom::utilities::bitIsSet(shapes, views::Hex_ShapeID)) + sm[views::HexTraits::name()] = views::Hex_ShapeID; if(axom::utilities::bitIsSet(shapes, views::Polyhedron_ShapeID)) - sm["polyhedron"] = views::Polyhedron_ShapeID; + sm[views::PolyhedronTraits::name()] = views::Polyhedron_ShapeID; return sm; } diff --git a/src/axom/bump/clipping/ClipTableManager.hpp b/src/axom/bump/clipping/ClipTableManager.hpp index 94097f7583..3ea1a92dba 100644 --- a/src/axom/bump/clipping/ClipTableManager.hpp +++ b/src/axom/bump/clipping/ClipTableManager.hpp @@ -124,12 +124,27 @@ class TableView case ST_PNT: os << "ST_PNT"; break; + case ST_LIN: + os << "ST_LIN"; + break; case ST_TRI: os << "ST_TRI"; break; case ST_QUA: os << "ST_QUA"; break; + case ST_POLY5: + os << "ST_POLY5"; + break; + case ST_POLY6: + os << "ST_POLY6"; + break; + case ST_POLY7: + os << "ST_POLY7"; + break; + case ST_POLY8: + os << "ST_POLY8"; + break; case ST_TET: os << "ST_TET"; break; @@ -231,12 +246,27 @@ class TableView case ST_PNT: retval = 4 + caseData[3]; break; + case ST_LIN: + retval = 2 + 2; + break; case ST_TRI: retval = 2 + 3; break; case ST_QUA: retval = 2 + 4; break; + case ST_POLY5: + retval = 2 + 5; + break; + case ST_POLY6: + retval = 2 + 6; + break; + case ST_POLY7: + retval = 2 + 7; + break; + case ST_POLY8: + retval = 2 + 8; + break; case ST_TET: retval = 2 + 4; break; @@ -437,7 +467,8 @@ class ClipTableManager std::vector s; if(dim == -1 || dim == 2) { - for(const auto value : std::vector {ST_TRI, ST_QUA}) + for(const auto value : + std::vector {ST_TRI, ST_QUA, ST_POLY5, ST_POLY6, ST_POLY7, ST_POLY8}) { s.push_back(value); } @@ -492,6 +523,38 @@ class ClipTableManager clipShapesQua, clipShapesQuaSize); } + else if(shape == ST_POLY5) + { + m_tables[index].load(numClipCasesPoly5, + numClipShapesPoly5, + startClipShapesPoly5, + clipShapesPoly5, + clipShapesPoly5Size); + } + else if(shape == ST_POLY6) + { + m_tables[index].load(numClipCasesPoly6, + numClipShapesPoly6, + startClipShapesPoly6, + clipShapesPoly6, + clipShapesPoly6Size); + } + else if(shape == ST_POLY7) + { + m_tables[index].load(numClipCasesPoly7, + numClipShapesPoly7, + startClipShapesPoly7, + clipShapesPoly7, + clipShapesPoly7Size); + } + else if(shape == ST_POLY8) + { + m_tables[index].load(numClipCasesPoly8, + numClipShapesPoly8, + startClipShapesPoly8, + clipShapesPoly8, + clipShapesPoly8Size); + } else if(shape == ST_TET) { m_tables[index].load(numClipCasesTet, diff --git a/src/axom/bump/clipping/split/ClipCasesPoly5.cpp b/src/axom/bump/clipping/split/ClipCasesPoly5.cpp new file mode 100644 index 0000000000..c00eaad2da --- /dev/null +++ b/src/axom/bump/clipping/split/ClipCasesPoly5.cpp @@ -0,0 +1,189 @@ +// Copyright (c) Lawrence Livermore National Security, LLC and other VisIt +// Project developers. See the top-level LICENSE file for dates and other +// details. No copyright assignment is required to contribute to VisIt. + +#include "ClipCases.h" +//--------------------------------------------------------------------------- +// Axom modifications +// clang-format off +namespace axom { +namespace bump { +namespace clipping { +namespace tables { +//--------------------------------------------------------------------------- + +// This file is meant to be read and created by a program other than a +// compiler. If you must modify it by hand, at least be nice to the +// parser and don't add anything else to this file or rearrange it. + +int numClipCasesPoly5 = 32; + +int numClipShapesPoly5[32] = { + 2, 3, 3, 3, 3, 4, 3, 3, // cases 0 - 7 + 3, 4, 4, 5, 3, 5, 3, 3, // cases 8 - 15 + 3, 3, 4, 3, 4, 5, 5, 3, // cases 16 - 23 + 3, 3, 5, 3, 3, 3, 3, 2 // cases 24 - 31 +}; + +int startClipShapesPoly5[32] = { + 0, 11, 28, 45, 62, 79, 102, 119, // cases 0 - 7 + 136, 153, 176, 199, 226, 243, 270, 287, // cases 8 - 15 + 304, 321, 338, 361, 378, 401, 428, 455, // cases 16 - 23 + 472, 489, 506, 533, 550, 567, 584, 601 // cases 24 - 31 +}; + +unsigned char clipShapesPoly5[] = { + // Case #0: Unique case #1 + ST_QUA, COLOR0, P0, P1, P2, P3, + ST_TRI, COLOR0, P0, P3, P4, + // Case #1: Unique case #2 + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, EE, + ST_TRI, COLOR1, P0, EA, EE, + // Case #2: (cloned #1) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P0, EA, + ST_TRI, COLOR1, P1, EB, EA, + // Case #3: Unique case #3 + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P0, P1, EB, EE, + // Case #4: (cloned #1) + ST_QUA, COLOR0, EC, P3, P4, P0, + ST_QUA, COLOR0, EC, P0, P1, EB, + ST_TRI, COLOR1, P2, EC, EB, + // Case #5: Unique case #4 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, EE, + // Case #6: (cloned #3) + ST_QUA, COLOR0, EC, P3, P4, P0, + ST_TRI, COLOR0, EC, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, EA, + // Case #7: Unique case #5 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_TRI, COLOR1, EC, EE, P0, + // Case #8: (cloned #1) + ST_QUA, COLOR0, ED, P4, P0, P1, + ST_QUA, COLOR0, ED, P1, P2, EC, + ST_TRI, COLOR1, P3, ED, EC, + // Case #9: (cloned #5) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #10: (cloned #5) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EA, + // Case #11: Unique case #6 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, ED, + ST_TRI, COLOR1, P0, ED, EE, + // Case #12: (cloned #3) + ST_QUA, COLOR0, ED, P4, P0, P1, + ST_TRI, COLOR0, ED, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EB, + // Case #13: (cloned #11) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P0, EA, + ST_TRI, COLOR1, P2, EA, EB, + // Case #14: (cloned #7) + ST_QUA, COLOR0, ED, P4, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_TRI, COLOR1, ED, EA, P1, + // Case #15: Unique case #7 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, ED, EE, + // Case #16: (cloned #1) + ST_QUA, COLOR0, EE, P0, P1, P2, + ST_QUA, COLOR0, EE, P2, P3, ED, + ST_TRI, COLOR1, P4, EE, ED, + // Case #17: (cloned #3) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P0, EA, ED, + // Case #18: (cloned #5) + ST_TRI, COLOR0, EE, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, EE, EA, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #19: (cloned #7) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P0, P1, EB, + ST_TRI, COLOR1, EB, ED, P4, + // Case #20: (cloned #5) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P0, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, EE, EB, + // Case #21: (cloned #11) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P0, EA, EB, + ST_QUA, COLOR1, P4, EB, P2, EC, + ST_TRI, COLOR1, P4, EC, ED, + // Case #22: (cloned #11) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, EE, + ST_TRI, COLOR1, P1, EE, EA, + // Case #23: (cloned #15) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P0, P1, P2, + ST_QUA, COLOR1, P4, P2, EC, ED, + // Case #24: (cloned #3) + ST_QUA, COLOR0, EE, P0, P1, P2, + ST_TRI, COLOR0, EE, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EC, + // Case #25: (cloned #7) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P0, EA, + ST_TRI, COLOR1, EA, EC, P3, + // Case #26: (cloned #11) + ST_TRI, COLOR0, EE, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EA, + ST_QUA, COLOR1, P3, EA, P1, EB, + ST_TRI, COLOR1, P3, EB, EC, + // Case #27: (cloned #15) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P0, P1, + ST_QUA, COLOR1, P3, P1, EB, EC, + // Case #28: (cloned #7) + ST_QUA, COLOR0, EE, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_TRI, COLOR1, EE, EB, P2, + // Case #29: (cloned #15) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #30: (cloned #15) + ST_TRI, COLOR0, EE, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, EE, EA, + // Case #31: Unique case #8 + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_TRI, COLOR1, P0, P3, P4, + // Dummy + 0 +}; + +//--------------------------------------------------------------------------- +// Axom modifications +const size_t clipShapesPoly5Size = sizeof(clipShapesPoly5) / sizeof(unsigned char); +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom +// clang-format on +//--------------------------------------------------------------------------- diff --git a/src/axom/bump/clipping/split/ClipCasesPoly6.cpp b/src/axom/bump/clipping/split/ClipCasesPoly6.cpp new file mode 100644 index 0000000000..8bc71af491 --- /dev/null +++ b/src/axom/bump/clipping/split/ClipCasesPoly6.cpp @@ -0,0 +1,393 @@ +// Copyright (c) Lawrence Livermore National Security, LLC and other VisIt +// Project developers. See the top-level LICENSE file for dates and other +// details. No copyright assignment is required to contribute to VisIt. + +#include "ClipCases.h" +//--------------------------------------------------------------------------- +// Axom modifications +// clang-format off +namespace axom { +namespace bump { +namespace clipping { +namespace tables { +//--------------------------------------------------------------------------- + +// This file is meant to be read and created by a program other than a +// compiler. If you must modify it by hand, at least be nice to the +// parser and don't add anything else to this file or rearrange it. + +int numClipCasesPoly6 = 64; + +int numClipShapesPoly6[64] = { + 2, 4, 4, 3, 4, 5, 3, 4, // cases 0 - 7 + 4, 4, 5, 5, 3, 5, 4, 3, // cases 8 - 15 + 4, 5, 4, 5, 5, 7, 5, 5, // cases 16 - 23 + 3, 5, 5, 5, 4, 5, 3, 4, // cases 24 - 31 + 4, 3, 5, 4, 4, 5, 5, 3, // cases 32 - 39 + 5, 5, 7, 5, 5, 5, 5, 4, // cases 40 - 47 + 3, 4, 5, 3, 5, 5, 5, 4, // cases 48 - 55 + 4, 3, 5, 4, 3, 4, 4, 2 // cases 56 - 63 +}; + +int startClipShapesPoly6[64] = { + 0, 12, 34, 56, 74, 96, 124, 142, // cases 0 - 7 + 164, 186, 210, 238, 266, 284, 312, 334, // cases 8 - 15 + 352, 374, 402, 426, 454, 482, 520, 548, // cases 16 - 23 + 576, 594, 622, 650, 678, 700, 728, 746, // cases 24 - 31 + 768, 790, 808, 836, 858, 882, 910, 938, // cases 32 - 39 + 956, 984, 1012, 1050, 1078, 1106, 1134, 1162, // cases 40 - 47 + 1184, 1202, 1224, 1252, 1270, 1298, 1326, 1354, // cases 48 - 55 + 1376, 1398, 1416, 1444, 1466, 1484, 1506, 1528 // cases 56 - 63 +}; + +unsigned char clipShapesPoly6[] = { + // Case #0: Unique case #1 + ST_QUA, COLOR0, P0, P1, P2, P3, + ST_QUA, COLOR0, P0, P3, P4, P5, + // Case #1: Unique case #2 + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, P5, + ST_TRI, COLOR0, EA, P5, EF, + ST_TRI, COLOR1, P0, EA, EF, + // Case #2: (cloned #1) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, P0, + ST_TRI, COLOR0, EB, P0, EA, + ST_TRI, COLOR1, P1, EB, EA, + // Case #3: Unique case #3 + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, EF, + ST_QUA, COLOR1, P0, P1, EB, EF, + // Case #4: (cloned #1) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P0, P1, + ST_TRI, COLOR0, EC, P1, EB, + ST_TRI, COLOR1, P2, EC, EB, + // Case #5: Unique case #4 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, EF, + // Case #6: (cloned #3) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, EA, + // Case #7: Unique case #5 + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_TRI, COLOR1, P0, EC, EF, + // Case #8: (cloned #1) + ST_QUA, COLOR0, ED, P4, P5, P0, + ST_QUA, COLOR0, ED, P0, P1, P2, + ST_TRI, COLOR0, ED, P2, EC, + ST_TRI, COLOR1, P3, ED, EC, + // Case #9: Unique case #6 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P0, EA, EC, P3, + ST_QUA, COLOR1, P0, P3, ED, EF, + // Case #10: (cloned #5) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P0, + ST_TRI, COLOR0, ED, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EA, + // Case #11: Unique case #7 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, ED, + ST_TRI, COLOR1, P0, ED, EF, + // Case #12: (cloned #3) + ST_QUA, COLOR0, ED, P4, P5, P0, + ST_QUA, COLOR0, ED, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EB, + // Case #13: (cloned #11) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, EA, EB, P2, P3, + ST_QUA, COLOR1, EF, P0, EA, P3, + ST_TRI, COLOR1, ED, EF, P3, + // Case #14: (cloned #7) + ST_QUA, COLOR0, ED, P4, P5, P0, + ST_TRI, COLOR0, ED, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_TRI, COLOR1, P1, ED, EA, + // Case #15: Unique case #8 + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, ED, EF, + // Case #16: (cloned #1) + ST_QUA, COLOR0, EE, P5, P0, P1, + ST_QUA, COLOR0, EE, P1, P2, P3, + ST_TRI, COLOR0, EE, P3, ED, + ST_TRI, COLOR1, P4, EE, ED, + // Case #17: (cloned #5) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, EE, EF, P0, + ST_QUA, COLOR1, P4, P0, EA, ED, + // Case #18: (cloned #9) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P0, EA, + ST_QUA, COLOR1, P1, EB, ED, P4, + ST_QUA, COLOR1, P1, P4, EE, EA, + // Case #19: (cloned #11) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, EE, EF, P0, P1, + ST_QUA, COLOR1, ED, P4, EE, P1, + ST_TRI, COLOR1, EB, ED, P1, + // Case #20: (cloned #5) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P0, P1, + ST_TRI, COLOR0, EE, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, EE, EB, + // Case #21: Unique case #9 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, ED, + ST_QUA, COLOR1, P0, ED, P4, EE, + ST_TRI, COLOR1, P0, EE, EF, + // Case #22: (cloned #11) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, EE, + ST_TRI, COLOR1, P1, EE, EA, + // Case #23: Unique case #10 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, ED, P4, + ST_QUA, COLOR1, P0, P4, EE, EF, + // Case #24: (cloned #3) + ST_QUA, COLOR0, EE, P5, P0, P1, + ST_QUA, COLOR0, EE, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EC, + // Case #25: (cloned #11) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P0, EA, + ST_TRI, COLOR1, P3, EA, EC, + // Case #26: (cloned #11) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EE, P5, P0, EA, + ST_QUA, COLOR1, EB, EC, P3, P4, + ST_QUA, COLOR1, EA, P1, EB, P4, + ST_TRI, COLOR1, EE, EA, P4, + // Case #27: Unique case #11 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, P4, + ST_QUA, COLOR1, P0, P4, EE, EF, + // Case #28: (cloned #7) + ST_QUA, COLOR0, EE, P5, P0, P1, + ST_TRI, COLOR0, EE, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_TRI, COLOR1, P2, EE, EB, + // Case #29: (cloned #23) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EF, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #30: (cloned #15) + ST_QUA, COLOR0, EE, P5, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, EE, EA, + // Case #31: Unique case #12 + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, EE, + ST_TRI, COLOR1, EE, EF, P0, + // Case #32: (cloned #1) + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_QUA, COLOR0, EF, P2, P3, P4, + ST_TRI, COLOR0, EF, P4, EE, + ST_TRI, COLOR1, P5, EF, EE, + // Case #33: (cloned #3) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, EE, + ST_QUA, COLOR1, P5, P0, EA, EE, + // Case #34: (cloned #5) + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, EF, EA, P1, + ST_QUA, COLOR1, P5, P1, EB, EE, + // Case #35: (cloned #7) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, P0, P1, EB, + ST_TRI, COLOR1, P5, EB, EE, + // Case #36: (cloned #9) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P0, P1, EB, + ST_QUA, COLOR1, P2, EC, EE, P5, + ST_QUA, COLOR1, P2, P5, EF, EB, + // Case #37: (cloned #11) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P0, EA, EB, + ST_QUA, COLOR1, P5, EB, P2, EC, + ST_TRI, COLOR1, P5, EC, EE, + // Case #38: (cloned #11) + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, EF, EA, P1, P2, + ST_QUA, COLOR1, EE, P5, EF, P2, + ST_TRI, COLOR1, EC, EE, P2, + // Case #39: (cloned #15) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P0, P1, P2, + ST_QUA, COLOR1, P5, P2, EC, EE, + // Case #40: (cloned #5) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_TRI, COLOR0, EF, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P5, + ST_QUA, COLOR1, P3, P5, EF, EC, + // Case #41: (cloned #11) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, ED, EE, P5, P0, + ST_QUA, COLOR1, EC, P3, ED, P0, + ST_TRI, COLOR1, EA, EC, P0, + // Case #42: (cloned #21) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EE, + ST_QUA, COLOR1, P1, EE, P5, EF, + ST_TRI, COLOR1, P1, EF, EA, + // Case #43: (cloned #23) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P0, P1, EB, + ST_QUA, COLOR1, P5, EB, EC, P3, + ST_QUA, COLOR1, P5, P3, ED, EE, + // Case #44: (cloned #11) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, EF, + ST_TRI, COLOR1, P2, EF, EB, + // Case #45: (cloned #27) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #46: (cloned #23) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EE, P5, + ST_QUA, COLOR1, P1, P5, EF, EA, + // Case #47: (cloned #31) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P0, P1, P2, + ST_QUA, COLOR1, P5, P2, P3, ED, + ST_TRI, COLOR1, ED, EE, P5, + // Case #48: (cloned #3) + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_QUA, COLOR0, EF, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, ED, + // Case #49: (cloned #7) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P5, P0, EA, + ST_TRI, COLOR1, P4, EA, ED, + // Case #50: (cloned #11) + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EA, + ST_QUA, COLOR1, P4, EA, P1, EB, + ST_TRI, COLOR1, P4, EB, ED, + // Case #51: (cloned #15) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P0, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #52: (cloned #11) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EF, P0, P1, EB, + ST_QUA, COLOR1, EC, ED, P4, P5, + ST_QUA, COLOR1, EB, P2, EC, P5, + ST_TRI, COLOR1, EF, EB, P5, + // Case #53: (cloned #23) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P0, EA, + ST_QUA, COLOR1, P4, EA, EB, P2, + ST_QUA, COLOR1, P4, P2, EC, ED, + // Case #54: (cloned #27) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, P5, + ST_QUA, COLOR1, P1, P5, EF, EA, + // Case #55: (cloned #31) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P0, P1, + ST_QUA, COLOR1, P4, P1, P2, EC, + ST_TRI, COLOR1, EC, ED, P4, + // Case #56: (cloned #7) + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_TRI, COLOR0, EF, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_TRI, COLOR1, P3, EF, EC, + // Case #57: (cloned #15) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #58: (cloned #23) + ST_TRI, COLOR0, EF, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EA, P1, + ST_QUA, COLOR1, P3, P1, EB, EC, + // Case #59: (cloned #31) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P0, + ST_QUA, COLOR1, P3, P0, P1, EB, + ST_TRI, COLOR1, EB, EC, P3, + // Case #60: (cloned #15) + ST_QUA, COLOR0, EF, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, EF, EB, + // Case #61: (cloned #31) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, P0, EA, + ST_TRI, COLOR1, EA, EB, P2, + // Case #62: (cloned #31) + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, P5, EF, + ST_TRI, COLOR1, EF, EA, P1, + // Case #63: Unique case #13 + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, P5, + // Dummy + 0 +}; + +//--------------------------------------------------------------------------- +// Axom modifications +const size_t clipShapesPoly6Size = sizeof(clipShapesPoly6) / sizeof(unsigned char); +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom +// clang-format on +//--------------------------------------------------------------------------- diff --git a/src/axom/bump/clipping/split/ClipCasesPoly7.cpp b/src/axom/bump/clipping/split/ClipCasesPoly7.cpp new file mode 100644 index 0000000000..ee93d0e06d --- /dev/null +++ b/src/axom/bump/clipping/split/ClipCasesPoly7.cpp @@ -0,0 +1,850 @@ +// Copyright (c) Lawrence Livermore National Security, LLC and other VisIt +// Project developers. See the top-level LICENSE file for dates and other +// details. No copyright assignment is required to contribute to VisIt. + +#include "ClipCases.h" +//--------------------------------------------------------------------------- +// Axom modifications +// clang-format off +namespace axom { +namespace bump { +namespace clipping { +namespace tables { +//--------------------------------------------------------------------------- + +// This file is meant to be read and created by a program other than a +// compiler. If you must modify it by hand, at least be nice to the +// parser and don't add anything else to this file or rearrange it. + +int numClipCasesPoly7 = 128; + +int numClipShapesPoly7[128] = { + 3, 4, 4, 4, 4, 5, 4, 4, // cases 0 - 7 + 4, 5, 5, 6, 4, 6, 4, 4, // cases 8 - 15 + 4, 5, 5, 5, 5, 7, 6, 5, // cases 16 - 23 + 4, 5, 6, 5, 4, 5, 4, 4, // cases 24 - 31 + 4, 5, 5, 6, 5, 7, 5, 5, // cases 32 - 39 + 5, 7, 7, 7, 6, 7, 5, 6, // cases 40 - 47 + 4, 6, 5, 5, 6, 7, 5, 6, // cases 48 - 55 + 4, 5, 5, 6, 4, 6, 4, 4, // cases 56 - 63 + 4, 4, 5, 4, 5, 6, 6, 4, // cases 64 - 71 + 5, 5, 7, 5, 5, 5, 5, 4, // cases 72 - 79 + 5, 6, 7, 5, 7, 7, 7, 6, // cases 80 - 87 + 6, 5, 7, 6, 5, 6, 6, 4, // cases 88 - 95 + 4, 4, 6, 4, 5, 5, 5, 4, // cases 96 - 103 + 6, 5, 7, 6, 5, 6, 6, 4, // cases 104 - 111 + 4, 4, 5, 4, 5, 6, 6, 4, // cases 112 - 119 + 4, 4, 6, 4, 4, 4, 4, 3 // cases 120 - 127 +}; + +int startClipShapesPoly7[128] = { + 0, 17, 40, 63, 86, 109, 138, 161, // cases 0 - 7 + 184, 207, 236, 265, 298, 321, 354, 377, // cases 8 - 15 + 400, 423, 452, 481, 510, 539, 578, 611, // cases 16 - 23 + 640, 663, 692, 725, 754, 777, 806, 829, // cases 24 - 31 + 852, 875, 904, 933, 966, 995, 1034, 1063, // cases 32 - 39 + 1092, 1121, 1160, 1199, 1238, 1271, 1310, 1339, // cases 40 - 47 + 1372, 1395, 1428, 1457, 1486, 1519, 1558, 1587, // cases 48 - 55 + 1620, 1643, 1672, 1701, 1734, 1757, 1790, 1813, // cases 56 - 63 + 1836, 1859, 1882, 1911, 1934, 1963, 1996, 2029, // cases 64 - 71 + 2052, 2081, 2110, 2149, 2178, 2207, 2236, 2265, // cases 72 - 79 + 2288, 2317, 2350, 2389, 2418, 2457, 2496, 2535, // cases 80 - 87 + 2568, 2601, 2630, 2669, 2702, 2731, 2764, 2797, // cases 88 - 95 + 2820, 2843, 2866, 2899, 2922, 2951, 2980, 3009, // cases 96 - 103 + 3032, 3065, 3094, 3133, 3166, 3195, 3228, 3261, // cases 104 - 111 + 3284, 3307, 3330, 3359, 3382, 3411, 3444, 3477, // cases 112 - 119 + 3500, 3523, 3546, 3579, 3602, 3625, 3648, 3671 // cases 120 - 127 +}; + +unsigned char clipShapesPoly7[] = { + // Case #0: Unique case #1 + ST_QUA, COLOR0, P0, P1, P2, P3, + ST_QUA, COLOR0, P0, P3, P4, P5, + ST_TRI, COLOR0, P0, P5, P6, + // Case #1: Unique case #2 + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, P5, + ST_QUA, COLOR0, EA, P5, P6, EG, + ST_TRI, COLOR1, P0, EA, EG, + // Case #2: (cloned #1) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, P6, + ST_QUA, COLOR0, EB, P6, P0, EA, + ST_TRI, COLOR1, P1, EB, EA, + // Case #3: Unique case #3 + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, P6, + ST_TRI, COLOR0, EB, P6, EG, + ST_QUA, COLOR1, P0, P1, EB, EG, + // Case #4: (cloned #1) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, P0, + ST_QUA, COLOR0, EC, P0, P1, EB, + ST_TRI, COLOR1, P2, EC, EB, + // Case #5: Unique case #4 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, EG, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, EG, + // Case #6: (cloned #3) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, P0, + ST_TRI, COLOR0, EC, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, EA, + // Case #7: Unique case #5 + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, EG, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_TRI, COLOR1, P0, EC, EG, + // Case #8: (cloned #1) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P0, P1, + ST_QUA, COLOR0, ED, P1, P2, EC, + ST_TRI, COLOR1, P3, ED, EC, + // Case #9: Unique case #6 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P0, EA, EC, P3, + ST_QUA, COLOR1, P0, P3, ED, EG, + // Case #10: (cloned #5) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EA, + // Case #11: Unique case #7 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, ED, + ST_TRI, COLOR1, P0, ED, EG, + // Case #12: (cloned #3) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P0, P1, + ST_TRI, COLOR0, ED, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EB, + // Case #13: (cloned #11) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, P4, P5, P6, EG, + ST_TRI, COLOR0, ED, P4, EG, + ST_QUA, COLOR1, EA, EB, P2, P3, + ST_QUA, COLOR1, EG, P0, EA, P3, + ST_TRI, COLOR1, ED, EG, P3, + // Case #14: (cloned #7) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_TRI, COLOR1, P1, ED, EA, + // Case #15: Unique case #8 + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, ED, EG, + // Case #16: (cloned #1) + ST_QUA, COLOR0, EE, P5, P6, P0, + ST_QUA, COLOR0, EE, P0, P1, P2, + ST_QUA, COLOR0, EE, P2, P3, ED, + ST_TRI, COLOR1, P4, EE, ED, + // Case #17: (cloned #9) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, EE, EG, P0, + ST_QUA, COLOR1, P4, P0, EA, ED, + // Case #18: (cloned #9) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P0, + ST_TRI, COLOR0, EE, P0, EA, + ST_QUA, COLOR1, P1, EB, ED, P4, + ST_QUA, COLOR1, P1, P4, EE, EA, + // Case #19: Unique case #9 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P0, P1, EB, ED, + ST_QUA, COLOR1, P0, ED, P4, EE, + ST_TRI, COLOR1, P0, EE, EG, + // Case #20: (cloned #5) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P0, + ST_QUA, COLOR0, EE, P0, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, EE, EB, + // Case #21: Unique case #10 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, ED, + ST_QUA, COLOR1, P0, ED, P4, EE, + ST_TRI, COLOR1, P0, EE, EG, + // Case #22: (cloned #11) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P0, + ST_TRI, COLOR0, EE, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, EE, + ST_TRI, COLOR1, P1, EE, EA, + // Case #23: Unique case #11 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, ED, P4, + ST_QUA, COLOR1, P0, P4, EE, EG, + // Case #24: (cloned #3) + ST_QUA, COLOR0, EE, P5, P6, P0, + ST_QUA, COLOR0, EE, P0, P1, P2, + ST_TRI, COLOR0, EE, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EC, + // Case #25: (cloned #19) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EG, + ST_QUA, COLOR1, P3, EG, P0, EA, + ST_TRI, COLOR1, P3, EA, EC, + // Case #26: (cloned #11) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P5, P6, P0, EA, + ST_TRI, COLOR0, EE, P5, EA, + ST_QUA, COLOR1, EB, EC, P3, P4, + ST_QUA, COLOR1, EA, P1, EB, P4, + ST_TRI, COLOR1, EE, EA, P4, + // Case #27: Unique case #12 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, P4, + ST_QUA, COLOR1, P0, P4, EE, EG, + // Case #28: (cloned #7) + ST_QUA, COLOR0, EE, P5, P6, P0, + ST_QUA, COLOR0, EE, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_TRI, COLOR1, P2, EE, EB, + // Case #29: (cloned #23) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, EB, P2, P3, P4, + ST_QUA, COLOR1, P0, EA, EB, P4, + ST_QUA, COLOR1, EE, EG, P0, P4, + // Case #30: (cloned #15) + ST_QUA, COLOR0, EE, P5, P6, P0, + ST_TRI, COLOR0, EE, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, EE, EA, + // Case #31: Unique case #13 + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, EE, + ST_TRI, COLOR1, P0, EE, EG, + // Case #32: (cloned #1) + ST_QUA, COLOR0, EF, P6, P0, P1, + ST_QUA, COLOR0, EF, P1, P2, P3, + ST_QUA, COLOR0, EF, P3, P4, EE, + ST_TRI, COLOR1, P5, EF, EE, + // Case #33: (cloned #5) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, EE, + ST_QUA, COLOR1, P5, EF, EG, P0, + ST_QUA, COLOR1, P5, P0, EA, EE, + // Case #34: (cloned #9) + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, EF, EA, P1, + ST_QUA, COLOR1, P5, P1, EB, EE, + // Case #35: (cloned #11) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, P2, P3, P4, EE, + ST_TRI, COLOR0, EB, P2, EE, + ST_QUA, COLOR1, EF, EG, P0, P1, + ST_QUA, COLOR1, EE, P5, EF, P1, + ST_TRI, COLOR1, EB, EE, P1, + // Case #36: (cloned #9) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P0, P1, + ST_TRI, COLOR0, EF, P1, EB, + ST_QUA, COLOR1, P2, EC, EE, P5, + ST_QUA, COLOR1, P2, P5, EF, EB, + // Case #37: (cloned #21) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, EF, EG, P0, + ST_QUA, COLOR1, P5, P0, EA, EB, + ST_QUA, COLOR1, P5, EB, P2, EC, + ST_TRI, COLOR1, P5, EC, EE, + // Case #38: (cloned #19) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, EE, + ST_QUA, COLOR1, P1, EE, P5, EF, + ST_TRI, COLOR1, P1, EF, EA, + // Case #39: (cloned #23) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, EG, P0, P1, P2, + ST_QUA, COLOR1, P5, EF, EG, P2, + ST_QUA, COLOR1, EC, EE, P5, P2, + // Case #40: (cloned #5) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P0, P1, + ST_QUA, COLOR0, EF, P1, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P5, + ST_QUA, COLOR1, P3, P5, EF, EC, + // Case #41: (cloned #21) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P5, + ST_QUA, COLOR1, P3, P5, EF, EG, + ST_QUA, COLOR1, P3, EG, P0, EA, + ST_TRI, COLOR1, P3, EA, EC, + // Case #42: (cloned #21) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EE, + ST_QUA, COLOR1, P1, EE, P5, EF, + ST_TRI, COLOR1, P1, EF, EA, + // Case #43: Unique case #14 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, ED, + ST_QUA, COLOR1, P0, ED, EE, P5, + ST_QUA, COLOR1, P0, P5, EF, EG, + // Case #44: (cloned #11) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P0, P1, + ST_TRI, COLOR0, EF, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, EF, + ST_TRI, COLOR1, P2, EF, EB, + // Case #45: (cloned #43) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, EF, + ST_QUA, COLOR1, P2, EF, EG, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #46: (cloned #23) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EE, P5, + ST_QUA, COLOR1, P1, P5, EF, EA, + // Case #47: Unique case #15 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, ED, EE, + ST_QUA, COLOR1, P0, EE, P5, EF, + ST_TRI, COLOR1, P0, EF, EG, + // Case #48: (cloned #3) + ST_QUA, COLOR0, EF, P6, P0, P1, + ST_QUA, COLOR0, EF, P1, P2, P3, + ST_TRI, COLOR0, EF, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, ED, + // Case #49: (cloned #11) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EG, + ST_QUA, COLOR1, P4, EG, P0, EA, + ST_TRI, COLOR1, P4, EA, ED, + // Case #50: (cloned #19) + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EA, + ST_QUA, COLOR1, P4, EA, P1, EB, + ST_TRI, COLOR1, P4, EB, ED, + // Case #51: (cloned #27) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EG, + ST_QUA, COLOR1, P4, EG, P0, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #52: (cloned #11) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P6, P0, P1, EB, + ST_TRI, COLOR0, EF, P6, EB, + ST_QUA, COLOR1, EC, ED, P4, P5, + ST_QUA, COLOR1, EB, P2, EC, P5, + ST_TRI, COLOR1, EF, EB, P5, + // Case #53: (cloned #43) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EG, + ST_QUA, COLOR1, P4, EG, P0, EA, + ST_QUA, COLOR1, P4, EA, EB, P2, + ST_QUA, COLOR1, P4, P2, EC, ED, + // Case #54: (cloned #27) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, P5, + ST_QUA, COLOR1, P1, P5, EF, EA, + // Case #55: Unique case #16 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, ED, P4, + ST_QUA, COLOR1, P0, P4, P5, EF, + ST_TRI, COLOR1, P0, EF, EG, + // Case #56: (cloned #7) + ST_QUA, COLOR0, EF, P6, P0, P1, + ST_QUA, COLOR0, EF, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_TRI, COLOR1, P3, EF, EC, + // Case #57: (cloned #23) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EG, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #58: (cloned #23) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR1, EC, P3, P4, P5, + ST_QUA, COLOR1, P1, EB, EC, P5, + ST_QUA, COLOR1, EF, EA, P1, P5, + // Case #59: (cloned #55) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EG, P0, + ST_QUA, COLOR1, P3, P0, P1, EB, + ST_TRI, COLOR1, P3, EB, EC, + // Case #60: (cloned #15) + ST_QUA, COLOR0, EF, P6, P0, P1, + ST_TRI, COLOR0, EF, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, EF, EB, + // Case #61: (cloned #47) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, EF, EG, + ST_QUA, COLOR1, P2, EG, P0, EA, + ST_TRI, COLOR1, P2, EA, EB, + // Case #62: (cloned #31) + ST_QUA, COLOR0, EF, P6, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, P5, EF, + ST_TRI, COLOR1, P1, EF, EA, + // Case #63: Unique case #17 + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, P5, + ST_QUA, COLOR1, P0, P5, EF, EG, + // Case #64: (cloned #1) + ST_QUA, COLOR0, EG, P0, P1, P2, + ST_QUA, COLOR0, EG, P2, P3, P4, + ST_QUA, COLOR0, EG, P4, P5, EF, + ST_TRI, COLOR1, P6, EG, EF, + // Case #65: (cloned #3) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, P5, + ST_TRI, COLOR0, EA, P5, EF, + ST_QUA, COLOR1, P6, P0, EA, EF, + // Case #66: (cloned #5) + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, EF, + ST_QUA, COLOR1, P6, EG, EA, P1, + ST_QUA, COLOR1, P6, P1, EB, EF, + // Case #67: (cloned #7) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, EF, + ST_QUA, COLOR1, P6, P0, P1, EB, + ST_TRI, COLOR1, P6, EB, EF, + // Case #68: (cloned #9) + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, EG, EB, P2, + ST_QUA, COLOR1, P6, P2, EC, EF, + // Case #69: (cloned #11) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, P0, EA, EB, + ST_QUA, COLOR1, P6, EB, P2, EC, + ST_TRI, COLOR1, P6, EC, EF, + // Case #70: (cloned #11) + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR0, P3, P4, P5, EF, + ST_TRI, COLOR0, EC, P3, EF, + ST_QUA, COLOR1, EG, EA, P1, P2, + ST_QUA, COLOR1, EF, P6, EG, P2, + ST_TRI, COLOR1, EC, EF, P2, + // Case #71: (cloned #15) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, P0, P1, P2, + ST_QUA, COLOR1, P6, P2, EC, EF, + // Case #72: (cloned #9) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, EG, P0, P1, P2, + ST_TRI, COLOR0, EG, P2, EC, + ST_QUA, COLOR1, P3, ED, EF, P6, + ST_QUA, COLOR1, P3, P6, EG, EC, + // Case #73: (cloned #19) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P0, EA, EC, + ST_QUA, COLOR1, P6, EC, P3, ED, + ST_TRI, COLOR1, P6, ED, EF, + // Case #74: (cloned #21) + ST_TRI, COLOR0, EG, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, EG, EA, P1, + ST_QUA, COLOR1, P6, P1, EB, EC, + ST_QUA, COLOR1, P6, EC, P3, ED, + ST_TRI, COLOR1, P6, ED, EF, + // Case #75: (cloned #23) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P0, P1, EB, + ST_QUA, COLOR1, P6, EB, EC, P3, + ST_QUA, COLOR1, P6, P3, ED, EF, + // Case #76: (cloned #19) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EF, + ST_QUA, COLOR1, P2, EF, P6, EG, + ST_TRI, COLOR1, P2, EG, EB, + // Case #77: (cloned #27) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P0, EA, EB, + ST_QUA, COLOR1, P6, EB, P2, P3, + ST_QUA, COLOR1, P6, P3, ED, EF, + // Case #78: (cloned #23) + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, EA, P1, P2, P3, + ST_QUA, COLOR1, P6, EG, EA, P3, + ST_QUA, COLOR1, ED, EF, P6, P3, + // Case #79: (cloned #31) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P0, P1, P2, + ST_QUA, COLOR1, P6, P2, P3, ED, + ST_TRI, COLOR1, P6, ED, EF, + // Case #80: (cloned #5) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P0, P1, P2, + ST_QUA, COLOR0, EG, P2, P3, ED, + ST_QUA, COLOR1, P4, EE, EF, P6, + ST_QUA, COLOR1, P4, P6, EG, ED, + // Case #81: (cloned #11) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P1, P2, P3, ED, + ST_TRI, COLOR0, EA, P1, ED, + ST_QUA, COLOR1, EE, EF, P6, P0, + ST_QUA, COLOR1, ED, P4, EE, P0, + ST_TRI, COLOR1, EA, ED, P0, + // Case #82: (cloned #21) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, EE, EF, P6, + ST_QUA, COLOR1, P4, P6, EG, EA, + ST_QUA, COLOR1, P4, EA, P1, EB, + ST_TRI, COLOR1, P4, EB, ED, + // Case #83: (cloned #23) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, EF, P6, P0, P1, + ST_QUA, COLOR1, P4, EE, EF, P1, + ST_QUA, COLOR1, EB, ED, P4, P1, + // Case #84: (cloned #21) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, EE, EF, + ST_QUA, COLOR1, P2, EF, P6, EG, + ST_TRI, COLOR1, P2, EG, EB, + // Case #85: (cloned #43) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P0, EA, EB, + ST_QUA, COLOR1, P6, EB, P2, EC, + ST_QUA, COLOR1, P6, EC, ED, P4, + ST_QUA, COLOR1, P6, P4, EE, EF, + // Case #86: (cloned #43) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, EE, + ST_QUA, COLOR1, P1, EE, EF, P6, + ST_QUA, COLOR1, P1, P6, EG, EA, + // Case #87: (cloned #47) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P0, P1, P2, + ST_QUA, COLOR1, P6, P2, EC, ED, + ST_QUA, COLOR1, P6, ED, P4, EE, + ST_TRI, COLOR1, P6, EE, EF, + // Case #88: (cloned #11) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P0, P1, P2, + ST_TRI, COLOR0, EG, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P6, EG, + ST_TRI, COLOR1, P3, EG, EC, + // Case #89: (cloned #27) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P6, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #90: (cloned #43) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P6, EG, + ST_QUA, COLOR1, P3, EG, EA, P1, + ST_QUA, COLOR1, P3, P1, EB, EC, + // Case #91: (cloned #55) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P0, P1, EB, + ST_QUA, COLOR1, P6, EB, EC, P3, + ST_QUA, COLOR1, P6, P3, P4, EE, + ST_TRI, COLOR1, P6, EE, EF, + // Case #92: (cloned #23) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EF, P6, + ST_QUA, COLOR1, P2, P6, EG, EB, + // Case #93: (cloned #55) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EF, P6, + ST_QUA, COLOR1, P2, P6, P0, EA, + ST_TRI, COLOR1, P2, EA, EB, + // Case #94: (cloned #47) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, EE, EF, + ST_QUA, COLOR1, P1, EF, P6, EG, + ST_TRI, COLOR1, P1, EG, EA, + // Case #95: (cloned #63) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P0, P1, P2, + ST_QUA, COLOR1, P6, P2, P3, P4, + ST_QUA, COLOR1, P6, P4, EE, EF, + // Case #96: (cloned #3) + ST_QUA, COLOR0, EG, P0, P1, P2, + ST_QUA, COLOR0, EG, P2, P3, P4, + ST_TRI, COLOR0, EG, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EE, + // Case #97: (cloned #7) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P0, EA, + ST_TRI, COLOR1, P5, EA, EE, + // Case #98: (cloned #11) + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EA, + ST_QUA, COLOR1, P5, EA, P1, EB, + ST_TRI, COLOR1, P5, EB, EE, + // Case #99: (cloned #15) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, P6, P0, P1, + ST_QUA, COLOR1, P5, P1, EB, EE, + // Case #100: (cloned #19) + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EB, + ST_QUA, COLOR1, P5, EB, P2, EC, + ST_TRI, COLOR1, P5, EC, EE, + // Case #101: (cloned #23) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P0, EA, + ST_QUA, COLOR1, P5, EA, EB, P2, + ST_QUA, COLOR1, P5, P2, EC, EE, + // Case #102: (cloned #27) + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EA, + ST_QUA, COLOR1, P5, EA, P1, P2, + ST_QUA, COLOR1, P5, P2, EC, EE, + // Case #103: (cloned #31) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P0, P1, + ST_QUA, COLOR1, P5, P1, P2, EC, + ST_TRI, COLOR1, P5, EC, EE, + // Case #104: (cloned #11) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, P1, P2, EC, + ST_TRI, COLOR0, EG, P0, EC, + ST_QUA, COLOR1, ED, EE, P5, P6, + ST_QUA, COLOR1, EC, P3, ED, P6, + ST_TRI, COLOR1, EG, EC, P6, + // Case #105: (cloned #23) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, EE, P5, P6, P0, + ST_QUA, COLOR1, P3, ED, EE, P0, + ST_QUA, COLOR1, EA, EC, P3, P0, + // Case #106: (cloned #43) + ST_TRI, COLOR0, EG, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EA, + ST_QUA, COLOR1, P5, EA, P1, EB, + ST_QUA, COLOR1, P5, EB, EC, P3, + ST_QUA, COLOR1, P5, P3, ED, EE, + // Case #107: (cloned #47) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, P0, P1, + ST_QUA, COLOR1, P5, P1, EB, EC, + ST_QUA, COLOR1, P5, EC, P3, ED, + ST_TRI, COLOR1, P5, ED, EE, + // Case #108: (cloned #27) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, P6, + ST_QUA, COLOR1, P2, P6, EG, EB, + // Case #109: (cloned #55) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, P0, EA, + ST_QUA, COLOR1, P5, EA, EB, P2, + ST_QUA, COLOR1, P5, P2, P3, ED, + ST_TRI, COLOR1, P5, ED, EE, + // Case #110: (cloned #55) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EE, P5, + ST_QUA, COLOR1, P1, P5, P6, EG, + ST_TRI, COLOR1, P1, EG, EA, + // Case #111: (cloned #63) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, P0, P1, + ST_QUA, COLOR1, P5, P1, P2, P3, + ST_QUA, COLOR1, P5, P3, ED, EE, + // Case #112: (cloned #7) + ST_QUA, COLOR0, EG, P0, P1, P2, + ST_QUA, COLOR0, EG, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_TRI, COLOR1, P4, EG, ED, + // Case #113: (cloned #15) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P0, + ST_QUA, COLOR1, P4, P0, EA, ED, + // Case #114: (cloned #23) + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_QUA, COLOR1, P4, EG, EA, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #115: (cloned #31) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P0, + ST_QUA, COLOR1, P4, P0, P1, EB, + ST_TRI, COLOR1, P4, EB, ED, + // Case #116: (cloned #23) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR1, ED, P4, P5, P6, + ST_QUA, COLOR1, P2, EC, ED, P6, + ST_QUA, COLOR1, EG, EB, P2, P6, + // Case #117: (cloned #47) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P0, + ST_QUA, COLOR1, P4, P0, EA, EB, + ST_QUA, COLOR1, P4, EB, P2, EC, + ST_TRI, COLOR1, P4, EC, ED, + // Case #118: (cloned #55) + ST_TRI, COLOR0, EG, P0, EA, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_QUA, COLOR1, P4, EG, EA, P1, + ST_QUA, COLOR1, P4, P1, P2, EC, + ST_TRI, COLOR1, P4, EC, ED, + // Case #119: (cloned #63) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P0, + ST_QUA, COLOR1, P4, P0, P1, P2, + ST_QUA, COLOR1, P4, P2, EC, ED, + // Case #120: (cloned #15) + ST_QUA, COLOR0, EG, P0, P1, P2, + ST_TRI, COLOR0, EG, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, EG, EC, + // Case #121: (cloned #31) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, P0, EA, + ST_TRI, COLOR1, P3, EA, EC, + // Case #122: (cloned #47) + ST_TRI, COLOR0, EG, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, EG, EA, + ST_QUA, COLOR1, P3, EA, P1, EB, + ST_TRI, COLOR1, P3, EB, EC, + // Case #123: (cloned #63) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, P0, P1, + ST_QUA, COLOR1, P3, P1, EB, EC, + // Case #124: (cloned #31) + ST_QUA, COLOR0, EG, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, P6, EG, + ST_TRI, COLOR1, P2, EG, EB, + // Case #125: (cloned #63) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, P6, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #126: (cloned #63) + ST_TRI, COLOR0, EG, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, P5, P6, + ST_QUA, COLOR1, P1, P6, EG, EA, + // Case #127: Unique case #18 + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, P5, + ST_TRI, COLOR1, P0, P5, P6, + // Dummy + 0 +}; + +//--------------------------------------------------------------------------- +// Axom modifications +const size_t clipShapesPoly7Size = sizeof(clipShapesPoly7) / sizeof(unsigned char); +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom +// clang-format on +//--------------------------------------------------------------------------- diff --git a/src/axom/bump/clipping/split/ClipCasesPoly8.cpp b/src/axom/bump/clipping/split/ClipCasesPoly8.cpp new file mode 100644 index 0000000000..1c9d96d226 --- /dev/null +++ b/src/axom/bump/clipping/split/ClipCasesPoly8.cpp @@ -0,0 +1,1876 @@ +// Copyright (c) Lawrence Livermore National Security, LLC and other VisIt +// Project developers. See the top-level LICENSE file for dates and other +// details. No copyright assignment is required to contribute to VisIt. + +#include "ClipCases.h" +//--------------------------------------------------------------------------- +// Axom modifications +// clang-format off +namespace axom { +namespace bump { +namespace clipping { +namespace tables { +//--------------------------------------------------------------------------- + +// This file is meant to be read and created by a program other than a +// compiler. If you must modify it by hand, at least be nice to the +// parser and don't add anything else to this file or rearrange it. + +int numClipCasesPoly8 = 256; + +int numClipShapesPoly8[256] = { + 3, 5, 5, 4, 5, 6, 4, 5, // cases 0 - 7 + 5, 5, 6, 6, 4, 6, 5, 4, // cases 8 - 15 + 5, 6, 5, 6, 6, 8, 6, 6, // cases 16 - 23 + 4, 6, 6, 6, 5, 6, 4, 5, // cases 24 - 31 + 5, 5, 6, 6, 5, 7, 6, 5, // cases 32 - 39 + 6, 7, 8, 7, 6, 7, 6, 6, // cases 40 - 47 + 4, 6, 6, 5, 6, 7, 6, 6, // cases 48 - 55 + 5, 5, 6, 6, 4, 6, 5, 4, // cases 56 - 63 + 5, 6, 5, 6, 6, 8, 6, 6, // cases 64 - 71 + 5, 7, 7, 7, 6, 7, 5, 6, // cases 72 - 79 + 6, 8, 7, 7, 8, 9, 7, 8, // cases 80 - 87 + 6, 7, 7, 8, 6, 8, 6, 6, // cases 88 - 95 + 4, 6, 6, 6, 6, 7, 5, 6, // cases 96 - 103 + 6, 7, 7, 8, 6, 8, 6, 6, // cases 104 - 111 + 5, 6, 5, 6, 6, 8, 6, 6, // cases 112 - 119 + 4, 6, 6, 6, 5, 6, 4, 5, // cases 120 - 127 + 5, 4, 6, 5, 5, 6, 6, 4, // cases 128 - 135 + 6, 6, 8, 6, 6, 6, 6, 5, // cases 136 - 143 + 5, 6, 7, 5, 7, 7, 7, 6, // cases 144 - 151 + 6, 5, 7, 6, 5, 6, 6, 4, // cases 152 - 159 + 6, 6, 8, 6, 7, 7, 7, 6, // cases 160 - 167 + 8, 7, 9, 8, 7, 8, 8, 6, // cases 168 - 175 + 6, 6, 7, 6, 7, 8, 8, 6, // cases 176 - 183 + 6, 6, 8, 6, 6, 6, 6, 5, // cases 184 - 191 + 4, 5, 6, 4, 6, 6, 6, 5, // cases 192 - 199 + 6, 5, 7, 6, 5, 6, 6, 4, // cases 200 - 207 + 6, 6, 7, 6, 7, 8, 8, 6, // cases 208 - 215 + 6, 6, 8, 6, 6, 6, 6, 5, // cases 216 - 223 + 5, 4, 6, 5, 5, 6, 6, 4, // cases 224 - 231 + 6, 6, 8, 6, 6, 6, 6, 5, // cases 232 - 239 + 4, 5, 6, 4, 6, 6, 6, 5, // cases 240 - 247 + 5, 4, 6, 5, 4, 5, 5, 3 // cases 248 - 255 +}; + +int startClipShapesPoly8[256] = { + 0, 18, 46, 74, 98, 126, 160, 184, // cases 0 - 7 + 212, 240, 270, 304, 338, 362, 396, 424, // cases 8 - 15 + 448, 476, 510, 540, 574, 608, 652, 686, // cases 16 - 23 + 720, 744, 778, 812, 846, 874, 908, 932, // cases 24 - 31 + 960, 988, 1018, 1052, 1086, 1116, 1156, 1190, // cases 32 - 39 + 1220, 1254, 1294, 1338, 1378, 1412, 1452, 1486, // cases 40 - 47 + 1520, 1544, 1578, 1612, 1642, 1676, 1716, 1750, // cases 48 - 55 + 1784, 1812, 1842, 1876, 1910, 1934, 1968, 1996, // cases 56 - 63 + 2020, 2048, 2082, 2112, 2146, 2180, 2224, 2258, // cases 64 - 71 + 2292, 2322, 2362, 2402, 2442, 2476, 2516, 2546, // cases 72 - 79 + 2580, 2614, 2658, 2698, 2738, 2782, 2832, 2872, // cases 80 - 87 + 2916, 2950, 2990, 3030, 3074, 3108, 3152, 3186, // cases 88 - 95 + 3220, 3244, 3278, 3312, 3346, 3380, 3420, 3450, // cases 96 - 103 + 3484, 3518, 3558, 3598, 3642, 3676, 3720, 3754, // cases 104 - 111 + 3788, 3816, 3850, 3880, 3914, 3948, 3992, 4026, // cases 112 - 119 + 4060, 4084, 4118, 4152, 4186, 4214, 4248, 4272, // cases 120 - 127 + 4300, 4328, 4352, 4386, 4414, 4444, 4478, 4512, // cases 128 - 135 + 4536, 4570, 4604, 4648, 4682, 4716, 4750, 4784, // cases 136 - 143 + 4812, 4842, 4876, 4916, 4946, 4986, 5026, 5066, // cases 144 - 151 + 5100, 5134, 5164, 5204, 5238, 5268, 5302, 5336, // cases 152 - 159 + 5360, 5394, 5428, 5472, 5506, 5546, 5586, 5626, // cases 160 - 167 + 5660, 5704, 5744, 5794, 5838, 5878, 5922, 5966, // cases 168 - 175 + 6000, 6034, 6068, 6108, 6142, 6182, 6226, 6270, // cases 176 - 183 + 6304, 6338, 6372, 6416, 6450, 6484, 6518, 6552, // cases 184 - 191 + 6580, 6604, 6632, 6666, 6690, 6724, 6758, 6792, // cases 192 - 199 + 6820, 6854, 6884, 6924, 6958, 6988, 7022, 7056, // cases 200 - 207 + 7080, 7114, 7148, 7188, 7222, 7262, 7306, 7350, // cases 208 - 215 + 7384, 7418, 7452, 7496, 7530, 7564, 7598, 7632, // cases 216 - 223 + 7660, 7688, 7712, 7746, 7774, 7804, 7838, 7872, // cases 224 - 231 + 7896, 7930, 7964, 8008, 8042, 8076, 8110, 8144, // cases 232 - 239 + 8172, 8196, 8224, 8258, 8282, 8316, 8350, 8384, // cases 240 - 247 + 8412, 8440, 8464, 8498, 8526, 8550, 8578, 8606 // cases 248 - 255 +}; + +unsigned char clipShapesPoly8[] = { + // Case #0: Unique case #1 + ST_QUA, COLOR0, P0, P1, P2, P3, + ST_QUA, COLOR0, P0, P3, P4, P5, + ST_QUA, COLOR0, P0, P5, P6, P7, + // Case #1: Unique case #2 + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, P5, + ST_QUA, COLOR0, EA, P5, P6, P7, + ST_TRI, COLOR0, EA, P7, EH, + ST_TRI, COLOR1, P0, EA, EH, + // Case #2: (cloned #1) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, P6, + ST_QUA, COLOR0, EB, P6, P7, P0, + ST_TRI, COLOR0, EB, P0, EA, + ST_TRI, COLOR1, P1, EB, EA, + // Case #3: Unique case #3 + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, P6, + ST_QUA, COLOR0, EB, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, EH, + // Case #4: (cloned #1) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, P7, + ST_QUA, COLOR0, EC, P7, P0, P1, + ST_TRI, COLOR0, EC, P1, EB, + ST_TRI, COLOR1, P2, EC, EB, + // Case #5: Unique case #4 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, P7, + ST_TRI, COLOR0, EC, P7, EH, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, EH, + // Case #6: (cloned #3) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, P7, + ST_QUA, COLOR0, EC, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, EA, + // Case #7: Unique case #5 + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, P7, + ST_TRI, COLOR0, EC, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_TRI, COLOR1, P0, EC, EH, + // Case #8: (cloned #1) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P7, P0, + ST_QUA, COLOR0, ED, P0, P1, P2, + ST_TRI, COLOR0, ED, P2, EC, + ST_TRI, COLOR1, P3, ED, EC, + // Case #9: Unique case #6 + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P7, EH, + ST_QUA, COLOR1, P0, EA, EC, P3, + ST_QUA, COLOR1, P0, P3, ED, EH, + // Case #10: (cloned #5) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P7, P0, + ST_TRI, COLOR0, ED, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EA, + // Case #11: Unique case #7 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, ED, + ST_TRI, COLOR1, P0, ED, EH, + // Case #12: (cloned #3) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P7, P0, + ST_QUA, COLOR0, ED, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EB, + // Case #13: (cloned #11) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, P5, P6, P7, EH, + ST_QUA, COLOR0, ED, P4, P5, EH, + ST_QUA, COLOR1, EA, EB, P2, P3, + ST_QUA, COLOR1, EH, P0, EA, P3, + ST_TRI, COLOR1, ED, EH, P3, + // Case #14: (cloned #7) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P7, P0, + ST_TRI, COLOR0, ED, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_TRI, COLOR1, P1, ED, EA, + // Case #15: Unique case #8 + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_QUA, COLOR0, ED, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, ED, EH, + // Case #16: (cloned #1) + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_QUA, COLOR0, EE, P7, P0, P1, + ST_QUA, COLOR0, EE, P1, P2, P3, + ST_TRI, COLOR0, EE, P3, ED, + ST_TRI, COLOR1, P4, EE, ED, + // Case #17: Unique case #9 + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_TRI, COLOR0, EE, P7, EH, + ST_QUA, COLOR1, P0, EA, ED, P4, + ST_QUA, COLOR1, P0, P4, EE, EH, + // Case #18: (cloned #9) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_QUA, COLOR0, EE, P7, P0, EA, + ST_QUA, COLOR1, P1, EB, ED, P4, + ST_QUA, COLOR1, P1, P4, EE, EA, + // Case #19: Unique case #10 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_TRI, COLOR0, EE, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, ED, + ST_QUA, COLOR1, P0, ED, P4, EE, + ST_TRI, COLOR1, P0, EE, EH, + // Case #20: (cloned #5) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_QUA, COLOR0, EE, P7, P0, P1, + ST_TRI, COLOR0, EE, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, EE, EB, + // Case #21: Unique case #11 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_TRI, COLOR0, EE, P7, EH, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, ED, + ST_QUA, COLOR1, P0, ED, P4, EE, + ST_TRI, COLOR1, P0, EE, EH, + // Case #22: (cloned #11) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_QUA, COLOR0, EE, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, EE, + ST_TRI, COLOR1, P1, EE, EA, + // Case #23: Unique case #12 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_TRI, COLOR0, EE, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, ED, P4, + ST_QUA, COLOR1, P0, P4, EE, EH, + // Case #24: (cloned #3) + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_QUA, COLOR0, EE, P7, P0, P1, + ST_QUA, COLOR0, EE, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EC, + // Case #25: (cloned #19) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, P5, P6, P7, EH, + ST_TRI, COLOR0, EE, P5, EH, + ST_QUA, COLOR1, EA, EC, P3, P4, + ST_QUA, COLOR1, EH, P0, EA, P4, + ST_TRI, COLOR1, EE, EH, P4, + // Case #26: (cloned #11) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P6, P7, P0, EA, + ST_QUA, COLOR0, EE, P5, P6, EA, + ST_QUA, COLOR1, EB, EC, P3, P4, + ST_QUA, COLOR1, EA, P1, EB, P4, + ST_TRI, COLOR1, EE, EA, P4, + // Case #27: Unique case #13 + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_TRI, COLOR0, EE, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, P4, + ST_QUA, COLOR1, P0, P4, EE, EH, + // Case #28: (cloned #7) + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_QUA, COLOR0, EE, P7, P0, P1, + ST_TRI, COLOR0, EE, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_TRI, COLOR1, P2, EE, EB, + // Case #29: (cloned #23) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, P5, P6, P7, EH, + ST_TRI, COLOR0, EE, P5, EH, + ST_QUA, COLOR1, EB, P2, P3, P4, + ST_QUA, COLOR1, P0, EA, EB, P4, + ST_QUA, COLOR1, EE, EH, P0, P4, + // Case #30: (cloned #15) + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_QUA, COLOR0, EE, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, EE, EA, + // Case #31: Unique case #14 + ST_QUA, COLOR0, EE, P5, P6, P7, + ST_TRI, COLOR0, EE, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, EE, + ST_TRI, COLOR1, P0, EE, EH, + // Case #32: (cloned #1) + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_QUA, COLOR0, EF, P2, P3, P4, + ST_TRI, COLOR0, EF, P4, EE, + ST_TRI, COLOR1, P5, EF, EE, + // Case #33: (cloned #9) + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, EE, + ST_QUA, COLOR1, P5, EF, EH, P0, + ST_QUA, COLOR1, P5, P0, EA, EE, + // Case #34: (cloned #17) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, EB, EE, P5, + ST_QUA, COLOR1, P1, P5, EF, EA, + // Case #35: (cloned #19) + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR0, P2, P3, P4, EE, + ST_TRI, COLOR0, EB, P2, EE, + ST_QUA, COLOR1, EF, EH, P0, P1, + ST_QUA, COLOR1, EE, P5, EF, P1, + ST_TRI, COLOR1, EB, EE, P1, + // Case #36: (cloned #9) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_QUA, COLOR0, EF, P0, P1, EB, + ST_QUA, COLOR1, P2, EC, EE, P5, + ST_QUA, COLOR1, P2, P5, EF, EB, + // Case #37: Unique case #15 + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, EE, + ST_QUA, COLOR1, P0, EE, P5, EF, + ST_TRI, COLOR1, P0, EF, EH, + // Case #38: (cloned #19) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, EE, + ST_QUA, COLOR1, P1, EE, P5, EF, + ST_TRI, COLOR1, P1, EF, EA, + // Case #39: Unique case #16 + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, EE, P5, + ST_QUA, COLOR1, P0, P5, EF, EH, + // Case #40: (cloned #5) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_TRI, COLOR0, EF, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P5, + ST_QUA, COLOR1, P3, P5, EF, EC, + // Case #41: (cloned #37) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P5, + ST_QUA, COLOR1, P3, P5, EF, EH, + ST_QUA, COLOR1, P3, EH, P0, EA, + ST_TRI, COLOR1, P3, EA, EC, + // Case #42: (cloned #21) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EE, + ST_QUA, COLOR1, P1, EE, P5, EF, + ST_TRI, COLOR1, P1, EF, EA, + // Case #43: Unique case #17 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, ED, + ST_QUA, COLOR1, P0, ED, EE, P5, + ST_QUA, COLOR1, P0, P5, EF, EH, + // Case #44: (cloned #11) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_QUA, COLOR0, EF, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, EF, + ST_TRI, COLOR1, P2, EF, EB, + // Case #45: Unique case #18 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, P3, ED, + ST_QUA, COLOR1, P0, ED, EE, P5, + ST_QUA, COLOR1, P0, P5, EF, EH, + // Case #46: (cloned #23) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EE, P5, + ST_QUA, COLOR1, P1, P5, EF, EA, + // Case #47: Unique case #19 + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, ED, EE, + ST_QUA, COLOR1, P0, EE, P5, EF, + ST_TRI, COLOR1, P0, EF, EH, + // Case #48: (cloned #3) + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_QUA, COLOR0, EF, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, ED, + // Case #49: (cloned #19) + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EH, + ST_QUA, COLOR1, P4, EH, P0, EA, + ST_TRI, COLOR1, P4, EA, ED, + // Case #50: (cloned #19) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, P6, P7, P0, EA, + ST_TRI, COLOR0, EF, P6, EA, + ST_QUA, COLOR1, EB, ED, P4, P5, + ST_QUA, COLOR1, EA, P1, EB, P5, + ST_TRI, COLOR1, EF, EA, P5, + // Case #51: Unique case #20 + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, ED, + ST_QUA, COLOR1, P0, ED, P4, P5, + ST_QUA, COLOR1, P0, P5, EF, EH, + // Case #52: (cloned #11) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P7, P0, P1, EB, + ST_QUA, COLOR0, EF, P6, P7, EB, + ST_QUA, COLOR1, EC, ED, P4, P5, + ST_QUA, COLOR1, EB, P2, EC, P5, + ST_TRI, COLOR1, EF, EB, P5, + // Case #53: (cloned #43) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, EC, ED, P4, P5, + ST_QUA, COLOR1, EB, P2, EC, P5, + ST_QUA, COLOR1, P0, EA, EB, P5, + ST_QUA, COLOR1, EF, EH, P0, P5, + // Case #54: (cloned #27) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, P5, + ST_QUA, COLOR1, P1, P5, EF, EA, + // Case #55: Unique case #21 + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, ED, P4, + ST_QUA, COLOR1, P0, P4, P5, EF, + ST_TRI, COLOR1, P0, EF, EH, + // Case #56: (cloned #7) + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_QUA, COLOR0, EF, P0, P1, P2, + ST_TRI, COLOR0, EF, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_TRI, COLOR1, P3, EF, EC, + // Case #57: (cloned #39) + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EH, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #58: (cloned #23) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, P6, P7, P0, EA, + ST_TRI, COLOR0, EF, P6, EA, + ST_QUA, COLOR1, EC, P3, P4, P5, + ST_QUA, COLOR1, P1, EB, EC, P5, + ST_QUA, COLOR1, EF, EA, P1, P5, + // Case #59: (cloned #55) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, EC, P3, P4, P5, + ST_QUA, COLOR1, P1, EB, EC, P5, + ST_QUA, COLOR1, EH, P0, P1, P5, + ST_TRI, COLOR1, EF, EH, P5, + // Case #60: (cloned #15) + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_QUA, COLOR0, EF, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, EF, EB, + // Case #61: (cloned #47) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, EA, EB, P2, P5, + ST_QUA, COLOR1, EH, P0, EA, P5, + ST_TRI, COLOR1, EF, EH, P5, + // Case #62: (cloned #31) + ST_QUA, COLOR0, EF, P6, P7, P0, + ST_TRI, COLOR0, EF, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, P5, EF, + ST_TRI, COLOR1, P1, EF, EA, + // Case #63: Unique case #22 + ST_QUA, COLOR0, EF, P6, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, P5, + ST_QUA, COLOR1, P0, P5, EF, EH, + // Case #64: (cloned #1) + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_QUA, COLOR0, EG, P1, P2, P3, + ST_QUA, COLOR0, EG, P3, P4, P5, + ST_TRI, COLOR0, EG, P5, EF, + ST_TRI, COLOR1, P6, EG, EF, + // Case #65: (cloned #5) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, P5, + ST_TRI, COLOR0, EA, P5, EF, + ST_QUA, COLOR1, P6, EG, EH, P0, + ST_QUA, COLOR1, P6, P0, EA, EF, + // Case #66: (cloned #9) + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, EF, + ST_QUA, COLOR1, P6, EG, EA, P1, + ST_QUA, COLOR1, P6, P1, EB, EF, + // Case #67: (cloned #11) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, P3, P4, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, EF, + ST_QUA, COLOR1, EG, EH, P0, P1, + ST_QUA, COLOR1, EF, P6, EG, P1, + ST_TRI, COLOR1, EB, EF, P1, + // Case #68: (cloned #17) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_TRI, COLOR0, EG, P1, EB, + ST_QUA, COLOR1, P2, EC, EF, P6, + ST_QUA, COLOR1, P2, P6, EG, EB, + // Case #69: (cloned #21) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, EG, EH, P0, + ST_QUA, COLOR1, P6, P0, EA, EB, + ST_QUA, COLOR1, P6, EB, P2, EC, + ST_TRI, COLOR1, P6, EC, EF, + // Case #70: (cloned #19) + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR0, P3, P4, P5, EF, + ST_TRI, COLOR0, EC, P3, EF, + ST_QUA, COLOR1, EG, EA, P1, P2, + ST_QUA, COLOR1, EF, P6, EG, P2, + ST_TRI, COLOR1, EC, EF, P2, + // Case #71: (cloned #23) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, P3, P4, P5, EF, + ST_TRI, COLOR0, EC, P3, EF, + ST_QUA, COLOR1, EH, P0, P1, P2, + ST_QUA, COLOR1, P6, EG, EH, P2, + ST_QUA, COLOR1, EC, EF, P6, P2, + // Case #72: (cloned #9) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_QUA, COLOR0, EG, P1, P2, EC, + ST_QUA, COLOR1, P3, ED, EF, P6, + ST_QUA, COLOR1, P3, P6, EG, EC, + // Case #73: (cloned #37) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, EG, EH, P0, + ST_QUA, COLOR1, P6, P0, EA, EC, + ST_QUA, COLOR1, P6, EC, P3, ED, + ST_TRI, COLOR1, P6, ED, EF, + // Case #74: (cloned #37) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EF, + ST_QUA, COLOR1, P1, EF, P6, EG, + ST_TRI, COLOR1, P1, EG, EA, + // Case #75: (cloned #45) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, EG, EH, P0, + ST_QUA, COLOR1, P6, P0, P1, EB, + ST_QUA, COLOR1, P6, EB, EC, P3, + ST_QUA, COLOR1, P6, P3, ED, EF, + // Case #76: (cloned #19) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_TRI, COLOR0, EG, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EF, + ST_QUA, COLOR1, P2, EF, P6, EG, + ST_TRI, COLOR1, P2, EG, EB, + // Case #77: (cloned #43) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, EA, EB, P2, P3, + ST_QUA, COLOR1, EH, P0, EA, P3, + ST_QUA, COLOR1, P6, EG, EH, P3, + ST_QUA, COLOR1, ED, EF, P6, P3, + // Case #78: (cloned #39) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EF, P6, + ST_QUA, COLOR1, P1, P6, EG, EA, + // Case #79: (cloned #47) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, EG, EH, P0, P3, + ST_QUA, COLOR1, EF, P6, EG, P3, + ST_TRI, COLOR1, ED, EF, P3, + // Case #80: (cloned #5) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_QUA, COLOR0, EG, P1, P2, P3, + ST_TRI, COLOR0, EG, P3, ED, + ST_QUA, COLOR1, P4, EE, EF, P6, + ST_QUA, COLOR1, P4, P6, EG, ED, + // Case #81: (cloned #21) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, EE, EF, P6, + ST_QUA, COLOR1, P4, P6, EG, EH, + ST_QUA, COLOR1, P4, EH, P0, EA, + ST_TRI, COLOR1, P4, EA, ED, + // Case #82: (cloned #37) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, EE, EF, P6, + ST_QUA, COLOR1, P4, P6, EG, EA, + ST_QUA, COLOR1, P4, EA, P1, EB, + ST_TRI, COLOR1, P4, EB, ED, + // Case #83: (cloned #43) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, EG, EH, P0, P1, + ST_QUA, COLOR1, EF, P6, EG, P1, + ST_QUA, COLOR1, P4, EE, EF, P1, + ST_QUA, COLOR1, EB, ED, P4, P1, + // Case #84: (cloned #21) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_TRI, COLOR0, EG, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, EE, EF, + ST_QUA, COLOR1, P2, EF, P6, EG, + ST_TRI, COLOR1, P2, EG, EB, + // Case #85: Unique case #23 + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR1, P0, EA, EB, P2, + ST_QUA, COLOR1, P0, P2, EC, ED, + ST_QUA, COLOR1, P0, ED, P4, EE, + ST_QUA, COLOR1, P0, EE, EF, P6, + ST_QUA, COLOR1, P0, P6, EG, EH, + // Case #86: (cloned #43) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, EE, + ST_QUA, COLOR1, P1, EE, EF, P6, + ST_QUA, COLOR1, P1, P6, EG, EA, + // Case #87: Unique case #24 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, ED, P4, + ST_QUA, COLOR1, P0, P4, EE, EF, + ST_QUA, COLOR1, P0, EF, P6, EG, + ST_TRI, COLOR1, P0, EG, EH, + // Case #88: (cloned #11) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_QUA, COLOR0, EG, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P6, EG, + ST_TRI, COLOR1, P3, EG, EC, + // Case #89: (cloned #43) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P6, EG, + ST_QUA, COLOR1, P3, EG, EH, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #90: (cloned #45) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, P4, EE, + ST_QUA, COLOR1, P1, EE, EF, P6, + ST_QUA, COLOR1, P1, P6, EG, EA, + // Case #91: Unique case #25 + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR1, P0, P1, EB, EC, + ST_QUA, COLOR1, P0, EC, P3, P4, + ST_QUA, COLOR1, P0, P4, EE, EF, + ST_QUA, COLOR1, P0, EF, P6, EG, + ST_TRI, COLOR1, P0, EG, EH, + // Case #92: (cloned #23) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_TRI, COLOR0, EG, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EF, P6, + ST_QUA, COLOR1, P2, P6, EG, EB, + // Case #93: (cloned #87) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EF, P6, + ST_QUA, COLOR1, P2, P6, EG, EH, + ST_QUA, COLOR1, P2, EH, P0, EA, + ST_TRI, COLOR1, P2, EA, EB, + // Case #94: (cloned #47) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, EE, EF, + ST_QUA, COLOR1, P1, EF, P6, EG, + ST_TRI, COLOR1, P1, EG, EA, + // Case #95: Unique case #26 + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, EE, + ST_QUA, COLOR1, P0, EE, EF, P6, + ST_QUA, COLOR1, P0, P6, EG, EH, + // Case #96: (cloned #3) + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_QUA, COLOR0, EG, P1, P2, P3, + ST_QUA, COLOR0, EG, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EE, + // Case #97: (cloned #11) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EH, + ST_QUA, COLOR1, P5, EH, P0, EA, + ST_TRI, COLOR1, P5, EA, EE, + // Case #98: (cloned #19) + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EA, + ST_QUA, COLOR1, P5, EA, P1, EB, + ST_TRI, COLOR1, P5, EB, EE, + // Case #99: (cloned #27) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EH, + ST_QUA, COLOR1, P5, EH, P0, P1, + ST_QUA, COLOR1, P5, P1, EB, EE, + // Case #100: (cloned #19) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, P7, P0, P1, EB, + ST_TRI, COLOR0, EG, P7, EB, + ST_QUA, COLOR1, EC, EE, P5, P6, + ST_QUA, COLOR1, EB, P2, EC, P6, + ST_TRI, COLOR1, EG, EB, P6, + // Case #101: (cloned #43) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EH, + ST_QUA, COLOR1, P5, EH, P0, EA, + ST_QUA, COLOR1, P5, EA, EB, P2, + ST_QUA, COLOR1, P5, P2, EC, EE, + // Case #102: (cloned #51) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, EE, + ST_QUA, COLOR1, P1, EE, P5, P6, + ST_QUA, COLOR1, P1, P6, EG, EA, + // Case #103: (cloned #55) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, EH, P0, P1, P2, + ST_QUA, COLOR1, P6, EG, EH, P2, + ST_QUA, COLOR1, EE, P5, P6, P2, + ST_TRI, COLOR1, EC, EE, P2, + // Case #104: (cloned #11) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, P1, P2, EC, + ST_QUA, COLOR0, EG, P7, P0, EC, + ST_QUA, COLOR1, ED, EE, P5, P6, + ST_QUA, COLOR1, EC, P3, ED, P6, + ST_TRI, COLOR1, EG, EC, P6, + // Case #105: (cloned #45) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P5, + ST_QUA, COLOR1, P3, P5, P6, EG, + ST_QUA, COLOR1, P3, EG, EH, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #106: (cloned #43) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, ED, EE, P5, P6, + ST_QUA, COLOR1, EC, P3, ED, P6, + ST_QUA, COLOR1, P1, EB, EC, P6, + ST_QUA, COLOR1, EG, EA, P1, P6, + // Case #107: (cloned #91) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, EG, EH, + ST_QUA, COLOR1, P5, EH, P0, P1, + ST_QUA, COLOR1, P5, P1, EB, EC, + ST_QUA, COLOR1, P5, EC, P3, ED, + ST_TRI, COLOR1, P5, ED, EE, + // Case #108: (cloned #27) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_TRI, COLOR0, EG, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, P6, + ST_QUA, COLOR1, P2, P6, EG, EB, + // Case #109: (cloned #91) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, P6, + ST_QUA, COLOR1, P2, P6, EG, EH, + ST_QUA, COLOR1, P2, EH, P0, EA, + ST_TRI, COLOR1, P2, EA, EB, + // Case #110: (cloned #55) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EE, P5, + ST_QUA, COLOR1, P1, P5, P6, EG, + ST_TRI, COLOR1, P1, EG, EA, + // Case #111: Unique case #27 + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, ED, EE, + ST_QUA, COLOR1, P0, EE, P5, P6, + ST_QUA, COLOR1, P0, P6, EG, EH, + // Case #112: (cloned #7) + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_QUA, COLOR0, EG, P1, P2, P3, + ST_TRI, COLOR0, EG, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_TRI, COLOR1, P4, EG, ED, + // Case #113: (cloned #23) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_QUA, COLOR1, P4, EG, EH, P0, + ST_QUA, COLOR1, P4, P0, EA, ED, + // Case #114: (cloned #39) + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_QUA, COLOR1, P4, EG, EA, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #115: (cloned #55) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_QUA, COLOR1, P4, EG, EH, P0, + ST_QUA, COLOR1, P4, P0, P1, EB, + ST_TRI, COLOR1, P4, EB, ED, + // Case #116: (cloned #23) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, P7, P0, P1, EB, + ST_TRI, COLOR0, EG, P7, EB, + ST_QUA, COLOR1, ED, P4, P5, P6, + ST_QUA, COLOR1, P2, EC, ED, P6, + ST_QUA, COLOR1, EG, EB, P2, P6, + // Case #117: (cloned #87) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, EG, + ST_QUA, COLOR1, P4, EG, EH, P0, + ST_QUA, COLOR1, P4, P0, EA, EB, + ST_QUA, COLOR1, P4, EB, P2, EC, + ST_TRI, COLOR1, P4, EC, ED, + // Case #118: (cloned #55) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, ED, P4, P5, P6, + ST_QUA, COLOR1, P2, EC, ED, P6, + ST_QUA, COLOR1, EA, P1, P2, P6, + ST_TRI, COLOR1, EG, EA, P6, + // Case #119: Unique case #28 + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, EC, + ST_QUA, COLOR1, P0, EC, ED, P4, + ST_QUA, COLOR1, P0, P4, P5, P6, + ST_QUA, COLOR1, P0, P6, EG, EH, + // Case #120: (cloned #15) + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_QUA, COLOR0, EG, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, EG, EC, + // Case #121: (cloned #47) + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, EG, EH, + ST_QUA, COLOR1, P3, EH, P0, EA, + ST_TRI, COLOR1, P3, EA, EC, + // Case #122: (cloned #47) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, EB, EC, P3, P6, + ST_QUA, COLOR1, EA, P1, EB, P6, + ST_TRI, COLOR1, EG, EA, P6, + // Case #123: (cloned #111) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, EG, EH, + ST_QUA, COLOR1, P3, EH, P0, P1, + ST_QUA, COLOR1, P3, P1, EB, EC, + // Case #124: (cloned #31) + ST_QUA, COLOR0, EG, P7, P0, P1, + ST_TRI, COLOR0, EG, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, P6, EG, + ST_TRI, COLOR1, P2, EG, EB, + // Case #125: (cloned #95) + ST_TRI, COLOR0, EG, P7, EH, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, P6, EG, + ST_QUA, COLOR1, P2, EG, EH, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #126: (cloned #63) + ST_QUA, COLOR0, EG, P7, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, P5, P6, + ST_QUA, COLOR1, P1, P6, EG, EA, + // Case #127: Unique case #29 + ST_TRI, COLOR0, EG, P7, EH, + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, P5, + ST_QUA, COLOR1, P0, P5, P6, EG, + ST_TRI, COLOR1, P0, EG, EH, + // Case #128: (cloned #1) + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_QUA, COLOR0, EH, P2, P3, P4, + ST_QUA, COLOR0, EH, P4, P5, P6, + ST_TRI, COLOR0, EH, P6, EG, + ST_TRI, COLOR1, P7, EH, EG, + // Case #129: (cloned #3) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, P5, + ST_QUA, COLOR0, EA, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, EA, EG, + // Case #130: (cloned #5) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, P6, + ST_TRI, COLOR0, EB, P6, EG, + ST_QUA, COLOR1, P7, EH, EA, P1, + ST_QUA, COLOR1, P7, P1, EB, EG, + // Case #131: (cloned #7) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, P6, + ST_TRI, COLOR0, EB, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, EB, + ST_TRI, COLOR1, P7, EB, EG, + // Case #132: (cloned #9) + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, EG, + ST_QUA, COLOR1, P7, EH, EB, P2, + ST_QUA, COLOR1, P7, P2, EC, EG, + // Case #133: (cloned #11) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, EA, EB, + ST_QUA, COLOR1, P7, EB, P2, EC, + ST_TRI, COLOR1, P7, EC, EG, + // Case #134: (cloned #11) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, P4, P5, P6, EG, + ST_QUA, COLOR0, EC, P3, P4, EG, + ST_QUA, COLOR1, EH, EA, P1, P2, + ST_QUA, COLOR1, EG, P7, EH, P2, + ST_TRI, COLOR1, EC, EG, P2, + // Case #135: (cloned #15) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_QUA, COLOR0, EC, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, P7, P2, EC, EG, + // Case #136: (cloned #17) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_TRI, COLOR0, EH, P2, EC, + ST_QUA, COLOR1, P3, ED, EG, P7, + ST_QUA, COLOR1, P3, P7, EH, EC, + // Case #137: (cloned #19) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P7, P0, EA, EC, + ST_QUA, COLOR1, P7, EC, P3, ED, + ST_TRI, COLOR1, P7, ED, EG, + // Case #138: (cloned #21) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P7, EH, EA, P1, + ST_QUA, COLOR1, P7, P1, EB, EC, + ST_QUA, COLOR1, P7, EC, P3, ED, + ST_TRI, COLOR1, P7, ED, EG, + // Case #139: (cloned #23) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, EB, + ST_QUA, COLOR1, P7, EB, EC, P3, + ST_QUA, COLOR1, P7, P3, ED, EG, + // Case #140: (cloned #19) + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR0, P4, P5, P6, EG, + ST_TRI, COLOR0, ED, P4, EG, + ST_QUA, COLOR1, EH, EB, P2, P3, + ST_QUA, COLOR1, EG, P7, EH, P3, + ST_TRI, COLOR1, ED, EG, P3, + // Case #141: (cloned #27) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P7, P0, EA, EB, + ST_QUA, COLOR1, P7, EB, P2, P3, + ST_QUA, COLOR1, P7, P3, ED, EG, + // Case #142: (cloned #23) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, P4, P5, P6, EG, + ST_TRI, COLOR0, ED, P4, EG, + ST_QUA, COLOR1, EA, P1, P2, P3, + ST_QUA, COLOR1, P7, EH, EA, P3, + ST_QUA, COLOR1, ED, EG, P7, P3, + // Case #143: (cloned #31) + ST_QUA, COLOR0, ED, P4, P5, P6, + ST_TRI, COLOR0, ED, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, P7, P2, P3, ED, + ST_TRI, COLOR1, P7, ED, EG, + // Case #144: (cloned #9) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_QUA, COLOR0, EH, P2, P3, ED, + ST_QUA, COLOR1, P4, EE, EG, P7, + ST_QUA, COLOR1, P4, P7, EH, ED, + // Case #145: (cloned #19) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, P1, P2, P3, ED, + ST_TRI, COLOR0, EA, P1, ED, + ST_QUA, COLOR1, EE, EG, P7, P0, + ST_QUA, COLOR1, ED, P4, EE, P0, + ST_TRI, COLOR1, EA, ED, P0, + // Case #146: (cloned #37) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P7, EH, EA, P1, + ST_QUA, COLOR1, P7, P1, EB, ED, + ST_QUA, COLOR1, P7, ED, P4, EE, + ST_TRI, COLOR1, P7, EE, EG, + // Case #147: (cloned #39) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, EB, + ST_QUA, COLOR1, P7, EB, ED, P4, + ST_QUA, COLOR1, P7, P4, EE, EG, + // Case #148: (cloned #37) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, EE, EG, + ST_QUA, COLOR1, P2, EG, P7, EH, + ST_TRI, COLOR1, P2, EH, EB, + // Case #149: (cloned #43) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, EA, EB, + ST_QUA, COLOR1, P7, EB, P2, EC, + ST_QUA, COLOR1, P7, EC, ED, P4, + ST_QUA, COLOR1, P7, P4, EE, EG, + // Case #150: (cloned #45) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P7, EH, EA, P1, + ST_QUA, COLOR1, P7, P1, P2, EC, + ST_QUA, COLOR1, P7, EC, ED, P4, + ST_QUA, COLOR1, P7, P4, EE, EG, + // Case #151: (cloned #47) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, P7, P2, EC, ED, + ST_QUA, COLOR1, P7, ED, P4, EE, + ST_TRI, COLOR1, P7, EE, EG, + // Case #152: (cloned #19) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_TRI, COLOR0, EH, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EG, + ST_QUA, COLOR1, P3, EG, P7, EH, + ST_TRI, COLOR1, P3, EH, EC, + // Case #153: (cloned #51) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EG, + ST_QUA, COLOR1, P3, EG, P7, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #154: (cloned #43) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, EB, EC, P3, P4, + ST_QUA, COLOR1, EA, P1, EB, P4, + ST_QUA, COLOR1, P7, EH, EA, P4, + ST_QUA, COLOR1, EE, EG, P7, P4, + // Case #155: (cloned #55) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, EB, + ST_QUA, COLOR1, P7, EB, EC, P3, + ST_QUA, COLOR1, P7, P3, P4, EE, + ST_TRI, COLOR1, P7, EE, EG, + // Case #156: (cloned #39) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EG, P7, + ST_QUA, COLOR1, P2, P7, EH, EB, + // Case #157: (cloned #55) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, EB, P2, P3, P4, + ST_QUA, COLOR1, P0, EA, EB, P4, + ST_QUA, COLOR1, EG, P7, P0, P4, + ST_TRI, COLOR1, EE, EG, P4, + // Case #158: (cloned #47) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, EH, EA, P1, P4, + ST_QUA, COLOR1, EG, P7, EH, P4, + ST_TRI, COLOR1, EE, EG, P4, + // Case #159: (cloned #63) + ST_QUA, COLOR0, EE, P5, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, P7, P2, P3, P4, + ST_QUA, COLOR1, P7, P4, EE, EG, + // Case #160: (cloned #5) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_QUA, COLOR0, EH, P2, P3, P4, + ST_TRI, COLOR0, EH, P4, EE, + ST_QUA, COLOR1, P5, EF, EG, P7, + ST_QUA, COLOR1, P5, P7, EH, EE, + // Case #161: (cloned #11) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, P2, P3, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EE, + ST_QUA, COLOR1, EF, EG, P7, P0, + ST_QUA, COLOR1, EE, P5, EF, P0, + ST_TRI, COLOR1, EA, EE, P0, + // Case #162: (cloned #21) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, EF, EG, P7, + ST_QUA, COLOR1, P5, P7, EH, EA, + ST_QUA, COLOR1, P5, EA, P1, EB, + ST_TRI, COLOR1, P5, EB, EE, + // Case #163: (cloned #23) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, P2, P3, P4, EE, + ST_TRI, COLOR0, EB, P2, EE, + ST_QUA, COLOR1, EG, P7, P0, P1, + ST_QUA, COLOR1, P5, EF, EG, P1, + ST_QUA, COLOR1, EB, EE, P5, P1, + // Case #164: (cloned #37) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, EF, EG, P7, + ST_QUA, COLOR1, P5, P7, EH, EB, + ST_QUA, COLOR1, P5, EB, P2, EC, + ST_TRI, COLOR1, P5, EC, EE, + // Case #165: (cloned #45) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, EF, EG, P7, + ST_QUA, COLOR1, P5, P7, P0, EA, + ST_QUA, COLOR1, P5, EA, EB, P2, + ST_QUA, COLOR1, P5, P2, EC, EE, + // Case #166: (cloned #43) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, EH, EA, P1, P2, + ST_QUA, COLOR1, EG, P7, EH, P2, + ST_QUA, COLOR1, P5, EF, EG, P2, + ST_QUA, COLOR1, EC, EE, P5, P2, + // Case #167: (cloned #47) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, EF, EG, P7, P2, + ST_QUA, COLOR1, EE, P5, EF, P2, + ST_TRI, COLOR1, EC, EE, P2, + // Case #168: (cloned #21) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_TRI, COLOR0, EH, P2, EC, + ST_QUA, COLOR1, P3, ED, EE, P5, + ST_QUA, COLOR1, P3, P5, EF, EG, + ST_QUA, COLOR1, P3, EG, P7, EH, + ST_TRI, COLOR1, P3, EH, EC, + // Case #169: (cloned #43) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, EF, EG, P7, P0, + ST_QUA, COLOR1, EE, P5, EF, P0, + ST_QUA, COLOR1, P3, ED, EE, P0, + ST_QUA, COLOR1, EA, EC, P3, P0, + // Case #170: (cloned #85) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR1, P1, EB, EC, P3, + ST_QUA, COLOR1, P1, P3, ED, EE, + ST_QUA, COLOR1, P1, EE, P5, EF, + ST_QUA, COLOR1, P1, EF, EG, P7, + ST_QUA, COLOR1, P1, P7, EH, EA, + // Case #171: (cloned #87) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, EB, + ST_QUA, COLOR1, P7, EB, EC, P3, + ST_QUA, COLOR1, P7, P3, ED, EE, + ST_QUA, COLOR1, P7, EE, P5, EF, + ST_TRI, COLOR1, P7, EF, EG, + // Case #172: (cloned #43) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EE, + ST_QUA, COLOR1, P2, EE, P5, EF, + ST_QUA, COLOR1, P2, EF, EG, P7, + ST_QUA, COLOR1, P2, P7, EH, EB, + // Case #173: (cloned #91) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P7, P0, EA, EB, + ST_QUA, COLOR1, P7, EB, P2, P3, + ST_QUA, COLOR1, P7, P3, ED, EE, + ST_QUA, COLOR1, P7, EE, P5, EF, + ST_TRI, COLOR1, P7, EF, EG, + // Case #174: (cloned #87) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EE, P5, + ST_QUA, COLOR1, P1, P5, EF, EG, + ST_QUA, COLOR1, P1, EG, P7, EH, + ST_TRI, COLOR1, P1, EH, EA, + // Case #175: (cloned #95) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, P7, P2, P3, ED, + ST_QUA, COLOR1, P7, ED, EE, P5, + ST_QUA, COLOR1, P7, P5, EF, EG, + // Case #176: (cloned #11) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_QUA, COLOR0, EH, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EG, + ST_QUA, COLOR1, P4, EG, P7, EH, + ST_TRI, COLOR1, P4, EH, ED, + // Case #177: (cloned #27) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EG, + ST_QUA, COLOR1, P4, EG, P7, P0, + ST_QUA, COLOR1, P4, P0, EA, ED, + // Case #178: (cloned #43) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EG, + ST_QUA, COLOR1, P4, EG, P7, EH, + ST_QUA, COLOR1, P4, EH, EA, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #179: (cloned #55) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, EG, P7, P0, P1, + ST_QUA, COLOR1, P5, EF, EG, P1, + ST_QUA, COLOR1, ED, P4, P5, P1, + ST_TRI, COLOR1, EB, ED, P1, + // Case #180: (cloned #45) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, EC, ED, P4, + ST_QUA, COLOR1, P2, P4, P5, EF, + ST_QUA, COLOR1, P2, EF, EG, P7, + ST_QUA, COLOR1, P2, P7, EH, EB, + // Case #181: (cloned #91) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, EF, EG, + ST_QUA, COLOR1, P4, EG, P7, P0, + ST_QUA, COLOR1, P4, P0, EA, EB, + ST_QUA, COLOR1, P4, EB, P2, EC, + ST_TRI, COLOR1, P4, EC, ED, + // Case #182: (cloned #91) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR1, P1, P2, EC, ED, + ST_QUA, COLOR1, P1, ED, P4, P5, + ST_QUA, COLOR1, P1, P5, EF, EG, + ST_QUA, COLOR1, P1, EG, P7, EH, + ST_TRI, COLOR1, P1, EH, EA, + // Case #183: (cloned #111) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, P7, P2, EC, ED, + ST_QUA, COLOR1, P7, ED, P4, P5, + ST_QUA, COLOR1, P7, P5, EF, EG, + // Case #184: (cloned #23) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_TRI, COLOR0, EH, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EG, P7, + ST_QUA, COLOR1, P3, P7, EH, EC, + // Case #185: (cloned #55) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EG, P7, + ST_QUA, COLOR1, P3, P7, P0, EA, + ST_TRI, COLOR1, P3, EA, EC, + // Case #186: (cloned #87) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EG, P7, + ST_QUA, COLOR1, P3, P7, EH, EA, + ST_QUA, COLOR1, P3, EA, P1, EB, + ST_TRI, COLOR1, P3, EB, EC, + // Case #187: (cloned #119) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, EF, + ST_QUA, COLOR1, P3, EF, EG, P7, + ST_QUA, COLOR1, P3, P7, P0, P1, + ST_QUA, COLOR1, P3, P1, EB, EC, + // Case #188: (cloned #47) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, EF, EG, + ST_QUA, COLOR1, P2, EG, P7, EH, + ST_TRI, COLOR1, P2, EH, EB, + // Case #189: (cloned #111) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, EF, EG, + ST_QUA, COLOR1, P2, EG, P7, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #190: (cloned #95) + ST_TRI, COLOR0, EF, P6, EG, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, P5, EF, + ST_QUA, COLOR1, P1, EF, EG, P7, + ST_QUA, COLOR1, P1, P7, EH, EA, + // Case #191: (cloned #127) + ST_TRI, COLOR0, EF, P6, EG, + ST_QUA, COLOR1, P7, P0, P1, P2, + ST_QUA, COLOR1, P7, P2, P3, P4, + ST_QUA, COLOR1, P7, P4, P5, EF, + ST_TRI, COLOR1, P7, EF, EG, + // Case #192: (cloned #3) + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_QUA, COLOR0, EH, P2, P3, P4, + ST_QUA, COLOR0, EH, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, EH, EF, + // Case #193: (cloned #7) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, P5, + ST_TRI, COLOR0, EA, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, EA, + ST_TRI, COLOR1, P6, EA, EF, + // Case #194: (cloned #11) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, EH, EA, + ST_QUA, COLOR1, P6, EA, P1, EB, + ST_TRI, COLOR1, P6, EB, EF, + // Case #195: (cloned #15) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_QUA, COLOR0, EB, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, P6, P1, EB, EF, + // Case #196: (cloned #19) + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, P7, EH, EB, + ST_QUA, COLOR1, P6, EB, P2, EC, + ST_TRI, COLOR1, P6, EC, EF, + // Case #197: (cloned #23) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, EA, + ST_QUA, COLOR1, P6, EA, EB, P2, + ST_QUA, COLOR1, P6, P2, EC, EF, + // Case #198: (cloned #27) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, P7, EH, EA, + ST_QUA, COLOR1, P6, EA, P1, P2, + ST_QUA, COLOR1, P6, P2, EC, EF, + // Case #199: (cloned #31) + ST_QUA, COLOR0, EC, P3, P4, P5, + ST_TRI, COLOR0, EC, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, P6, P1, P2, EC, + ST_TRI, COLOR1, P6, EC, EF, + // Case #200: (cloned #19) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, P0, P1, P2, EC, + ST_TRI, COLOR0, EH, P0, EC, + ST_QUA, COLOR1, ED, EF, P6, P7, + ST_QUA, COLOR1, EC, P3, ED, P7, + ST_TRI, COLOR1, EH, EC, P7, + // Case #201: (cloned #39) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, EA, + ST_QUA, COLOR1, P6, EA, EC, P3, + ST_QUA, COLOR1, P6, P3, ED, EF, + // Case #202: (cloned #43) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, EH, EA, + ST_QUA, COLOR1, P6, EA, P1, EB, + ST_QUA, COLOR1, P6, EB, EC, P3, + ST_QUA, COLOR1, P6, P3, ED, EF, + // Case #203: (cloned #47) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, P6, P1, EB, EC, + ST_QUA, COLOR1, P6, EC, P3, ED, + ST_TRI, COLOR1, P6, ED, EF, + // Case #204: (cloned #51) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, ED, EF, + ST_QUA, COLOR1, P2, EF, P6, P7, + ST_QUA, COLOR1, P2, P7, EH, EB, + // Case #205: (cloned #55) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, EA, + ST_QUA, COLOR1, P6, EA, EB, P2, + ST_QUA, COLOR1, P6, P2, P3, ED, + ST_TRI, COLOR1, P6, ED, EF, + // Case #206: (cloned #55) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, EA, P1, P2, P3, + ST_QUA, COLOR1, P7, EH, EA, P3, + ST_QUA, COLOR1, EF, P6, P7, P3, + ST_TRI, COLOR1, ED, EF, P3, + // Case #207: (cloned #63) + ST_QUA, COLOR0, ED, P4, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, P6, P1, P2, P3, + ST_QUA, COLOR1, P6, P3, ED, EF, + // Case #208: (cloned #11) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P1, P2, P3, ED, + ST_QUA, COLOR0, EH, P0, P1, ED, + ST_QUA, COLOR1, EE, EF, P6, P7, + ST_QUA, COLOR1, ED, P4, EE, P7, + ST_TRI, COLOR1, EH, ED, P7, + // Case #209: (cloned #23) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, P1, P2, P3, ED, + ST_TRI, COLOR0, EA, P1, ED, + ST_QUA, COLOR1, EF, P6, P7, P0, + ST_QUA, COLOR1, P4, EE, EF, P0, + ST_QUA, COLOR1, EA, ED, P4, P0, + // Case #210: (cloned #45) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, EE, EF, P6, + ST_QUA, COLOR1, P4, P6, P7, EH, + ST_QUA, COLOR1, P4, EH, EA, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #211: (cloned #47) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, EE, EF, P6, P1, + ST_QUA, COLOR1, ED, P4, EE, P1, + ST_TRI, COLOR1, EB, ED, P1, + // Case #212: (cloned #43) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, EE, EF, P6, P7, + ST_QUA, COLOR1, ED, P4, EE, P7, + ST_QUA, COLOR1, P2, EC, ED, P7, + ST_QUA, COLOR1, EH, EB, P2, P7, + // Case #213: (cloned #87) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, EA, + ST_QUA, COLOR1, P6, EA, EB, P2, + ST_QUA, COLOR1, P6, P2, EC, ED, + ST_QUA, COLOR1, P6, ED, P4, EE, + ST_TRI, COLOR1, P6, EE, EF, + // Case #214: (cloned #91) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P7, EH, EA, + ST_QUA, COLOR1, P6, EA, P1, P2, + ST_QUA, COLOR1, P6, P2, EC, ED, + ST_QUA, COLOR1, P6, ED, P4, EE, + ST_TRI, COLOR1, P6, EE, EF, + // Case #215: (cloned #95) + ST_TRI, COLOR0, EC, P3, ED, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, P6, P1, P2, EC, + ST_QUA, COLOR1, P6, EC, ED, P4, + ST_QUA, COLOR1, P6, P4, EE, EF, + // Case #216: (cloned #27) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_TRI, COLOR0, EH, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P6, P7, + ST_QUA, COLOR1, P3, P7, EH, EC, + // Case #217: (cloned #55) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, EF, P6, P7, P0, + ST_QUA, COLOR1, P4, EE, EF, P0, + ST_QUA, COLOR1, EC, P3, P4, P0, + ST_TRI, COLOR1, EA, EC, P0, + // Case #218: (cloned #91) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, EE, EF, + ST_QUA, COLOR1, P3, EF, P6, P7, + ST_QUA, COLOR1, P3, P7, EH, EA, + ST_QUA, COLOR1, P3, EA, P1, EB, + ST_TRI, COLOR1, P3, EB, EC, + // Case #219: (cloned #111) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, P6, P1, EB, EC, + ST_QUA, COLOR1, P6, EC, P3, P4, + ST_QUA, COLOR1, P6, P4, EE, EF, + // Case #220: (cloned #55) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EF, P6, + ST_QUA, COLOR1, P2, P6, P7, EH, + ST_TRI, COLOR1, P2, EH, EB, + // Case #221: (cloned #119) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, EE, + ST_QUA, COLOR1, P2, EE, EF, P6, + ST_QUA, COLOR1, P2, P6, P7, P0, + ST_QUA, COLOR1, P2, P0, EA, EB, + // Case #222: (cloned #111) + ST_TRI, COLOR0, EE, P5, EF, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, EE, EF, + ST_QUA, COLOR1, P1, EF, P6, P7, + ST_QUA, COLOR1, P1, P7, EH, EA, + // Case #223: (cloned #127) + ST_TRI, COLOR0, EE, P5, EF, + ST_QUA, COLOR1, P6, P7, P0, P1, + ST_QUA, COLOR1, P6, P1, P2, P3, + ST_QUA, COLOR1, P6, P3, P4, EE, + ST_TRI, COLOR1, P6, EE, EF, + // Case #224: (cloned #7) + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_QUA, COLOR0, EH, P2, P3, P4, + ST_TRI, COLOR0, EH, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, EH, + ST_TRI, COLOR1, P5, EH, EE, + // Case #225: (cloned #15) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_QUA, COLOR0, EA, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, P5, P0, EA, EE, + // Case #226: (cloned #23) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, EH, + ST_QUA, COLOR1, P5, EH, EA, P1, + ST_QUA, COLOR1, P5, P1, EB, EE, + // Case #227: (cloned #31) + ST_QUA, COLOR0, EB, P2, P3, P4, + ST_TRI, COLOR0, EB, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, P5, P0, P1, EB, + ST_TRI, COLOR1, P5, EB, EE, + // Case #228: (cloned #39) + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, EH, + ST_QUA, COLOR1, P5, EH, EB, P2, + ST_QUA, COLOR1, P5, P2, EC, EE, + // Case #229: (cloned #47) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, P5, P0, EA, EB, + ST_QUA, COLOR1, P5, EB, P2, EC, + ST_TRI, COLOR1, P5, EC, EE, + // Case #230: (cloned #55) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, EH, + ST_QUA, COLOR1, P5, EH, EA, P1, + ST_QUA, COLOR1, P5, P1, P2, EC, + ST_TRI, COLOR1, P5, EC, EE, + // Case #231: (cloned #63) + ST_QUA, COLOR0, EC, P3, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, P5, P0, P1, P2, + ST_QUA, COLOR1, P5, P2, EC, EE, + // Case #232: (cloned #23) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, P0, P1, P2, EC, + ST_TRI, COLOR0, EH, P0, EC, + ST_QUA, COLOR1, EE, P5, P6, P7, + ST_QUA, COLOR1, P3, ED, EE, P7, + ST_QUA, COLOR1, EH, EC, P3, P7, + // Case #233: (cloned #47) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, ED, EE, P5, P0, + ST_QUA, COLOR1, EC, P3, ED, P0, + ST_TRI, COLOR1, EA, EC, P0, + // Case #234: (cloned #87) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, EH, + ST_QUA, COLOR1, P5, EH, EA, P1, + ST_QUA, COLOR1, P5, P1, EB, EC, + ST_QUA, COLOR1, P5, EC, P3, ED, + ST_TRI, COLOR1, P5, ED, EE, + // Case #235: (cloned #95) + ST_TRI, COLOR0, EB, P2, EC, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, P5, P0, P1, EB, + ST_QUA, COLOR1, P5, EB, EC, P3, + ST_QUA, COLOR1, P5, P3, ED, EE, + // Case #236: (cloned #55) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, EE, P5, P6, P7, + ST_QUA, COLOR1, P3, ED, EE, P7, + ST_QUA, COLOR1, EB, P2, P3, P7, + ST_TRI, COLOR1, EH, EB, P7, + // Case #237: (cloned #111) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, P5, P0, EA, EB, + ST_QUA, COLOR1, P5, EB, P2, P3, + ST_QUA, COLOR1, P5, P3, ED, EE, + // Case #238: (cloned #119) + ST_TRI, COLOR0, ED, P4, EE, + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, ED, + ST_QUA, COLOR1, P1, ED, EE, P5, + ST_QUA, COLOR1, P1, P5, P6, P7, + ST_QUA, COLOR1, P1, P7, EH, EA, + // Case #239: (cloned #127) + ST_TRI, COLOR0, ED, P4, EE, + ST_QUA, COLOR1, P5, P6, P7, P0, + ST_QUA, COLOR1, P5, P0, P1, P2, + ST_QUA, COLOR1, P5, P2, P3, ED, + ST_TRI, COLOR1, P5, ED, EE, + // Case #240: (cloned #15) + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_QUA, COLOR0, EH, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, P4, P7, EH, ED, + // Case #241: (cloned #31) + ST_QUA, COLOR0, EA, P1, P2, P3, + ST_TRI, COLOR0, EA, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, P4, P7, P0, EA, + ST_TRI, COLOR1, P4, EA, ED, + // Case #242: (cloned #47) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, P4, P7, EH, EA, + ST_QUA, COLOR1, P4, EA, P1, EB, + ST_TRI, COLOR1, P4, EB, ED, + // Case #243: (cloned #63) + ST_QUA, COLOR0, EB, P2, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, P4, P7, P0, P1, + ST_QUA, COLOR1, P4, P1, EB, ED, + // Case #244: (cloned #47) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, EC, ED, P4, P7, + ST_QUA, COLOR1, EB, P2, EC, P7, + ST_TRI, COLOR1, EH, EB, P7, + // Case #245: (cloned #95) + ST_TRI, COLOR0, EA, P1, EB, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, P4, P7, P0, EA, + ST_QUA, COLOR1, P4, EA, EB, P2, + ST_QUA, COLOR1, P4, P2, EC, ED, + // Case #246: (cloned #111) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, P4, P7, EH, EA, + ST_QUA, COLOR1, P4, EA, P1, P2, + ST_QUA, COLOR1, P4, P2, EC, ED, + // Case #247: (cloned #127) + ST_TRI, COLOR0, EC, P3, ED, + ST_QUA, COLOR1, P4, P5, P6, P7, + ST_QUA, COLOR1, P4, P7, P0, P1, + ST_QUA, COLOR1, P4, P1, P2, EC, + ST_TRI, COLOR1, P4, EC, ED, + // Case #248: (cloned #31) + ST_QUA, COLOR0, EH, P0, P1, P2, + ST_TRI, COLOR0, EH, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, P7, EH, + ST_TRI, COLOR1, P3, EH, EC, + // Case #249: (cloned #63) + ST_QUA, COLOR0, EA, P1, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, P7, P0, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #250: (cloned #95) + ST_TRI, COLOR0, EH, P0, EA, + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, P7, EH, + ST_QUA, COLOR1, P3, EH, EA, P1, + ST_QUA, COLOR1, P3, P1, EB, EC, + // Case #251: (cloned #127) + ST_TRI, COLOR0, EB, P2, EC, + ST_QUA, COLOR1, P3, P4, P5, P6, + ST_QUA, COLOR1, P3, P6, P7, P0, + ST_QUA, COLOR1, P3, P0, P1, EB, + ST_TRI, COLOR1, P3, EB, EC, + // Case #252: (cloned #63) + ST_QUA, COLOR0, EH, P0, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, P6, P7, + ST_QUA, COLOR1, P2, P7, EH, EB, + // Case #253: (cloned #127) + ST_TRI, COLOR0, EA, P1, EB, + ST_QUA, COLOR1, P2, P3, P4, P5, + ST_QUA, COLOR1, P2, P5, P6, P7, + ST_QUA, COLOR1, P2, P7, P0, EA, + ST_TRI, COLOR1, P2, EA, EB, + // Case #254: (cloned #127) + ST_TRI, COLOR0, EH, P0, EA, + ST_QUA, COLOR1, P1, P2, P3, P4, + ST_QUA, COLOR1, P1, P4, P5, P6, + ST_QUA, COLOR1, P1, P6, P7, EH, + ST_TRI, COLOR1, P1, EH, EA, + // Case #255: Unique case #30 + ST_QUA, COLOR1, P0, P1, P2, P3, + ST_QUA, COLOR1, P0, P3, P4, P5, + ST_QUA, COLOR1, P0, P5, P6, P7, + // Dummy + 0 +}; + +//--------------------------------------------------------------------------- +// Axom modifications +const size_t clipShapesPoly8Size = sizeof(clipShapesPoly8) / sizeof(unsigned char); +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom +// clang-format on +//--------------------------------------------------------------------------- diff --git a/src/axom/bump/clipping/split/ClipCasesQua.cpp b/src/axom/bump/clipping/split/ClipCasesQua.cpp new file mode 100644 index 0000000000..e83423f830 --- /dev/null +++ b/src/axom/bump/clipping/split/ClipCasesQua.cpp @@ -0,0 +1,105 @@ +// Copyright (c) Lawrence Livermore National Security, LLC and other VisIt +// Project developers. See the top-level LICENSE file for dates and other +// details. No copyright assignment is required to contribute to VisIt. + +#include "ClipCases.h" +//--------------------------------------------------------------------------- +// Axom modifications +// clang-format off +namespace axom { +namespace bump { +namespace clipping { +namespace tables { +//--------------------------------------------------------------------------- + +// Programmer: Jeremy Meredith +// Date : September 18, 2003 + +// This file is meant to be read and created by a program other than a +// compiler. If you must modify it by hand, at least be nice to the +// parser and don't add anything else to this file or rearrange it. + +int numClipCasesQua = 16; + +int numClipShapesQua[16] = { + 1, 3, 3, 2, 3, 4, 2, 3, // cases 0 - 7 + 3, 2, 4, 3, 2, 3, 3, 1 // cases 8 - 15 +}; + +int startClipShapesQua[16] = { + 0, 6, 22, 38, 50, 66, 88, 100, // cases 0 - 7 + 116, 132, 144, 166, 182, 194, 210, 226 // cases 8 - 15 +}; + +unsigned char clipShapesQua[] = { + // Case #0: Unique case #1 + ST_QUA, COLOR0, P0, P1, P2, P3, + // Case #1: Unique case #2 + ST_QUA, COLOR0, ED, EA, P1, P3, + ST_TRI, COLOR0, P3, P1, P2, + ST_TRI, COLOR1, P0, EA, ED, + // Case #2: (cloned #1) + ST_QUA, COLOR0, EA, EB, P2, P0, + ST_TRI, COLOR0, P0, P2, P3, + ST_TRI, COLOR1, P1, EB, EA, + // Case #3: Unique case #3 + ST_QUA, COLOR0, ED, EB, P2, P3, + ST_QUA, COLOR1, P0, P1, EB, ED, + // Case #4: (cloned #1) + ST_QUA, COLOR0, EB, EC, P3, P1, + ST_TRI, COLOR0, P1, P3, P0, + ST_TRI, COLOR1, P2, EC, EB, + // Case #5: Unique case #4 + ST_TRI, COLOR0, ED, EC, P3, + ST_TRI, COLOR0, EB, EA, P1, + ST_QUA, COLOR1, P2, P0, EA, EB, + ST_QUA, COLOR1, P0, P2, EC, ED, + // Case #6: (cloned #3) + ST_QUA, COLOR0, EA, EC, P3, P0, + ST_QUA, COLOR1, P1, P2, EC, EA, + // Case #7: Unique case #5 + ST_TRI, COLOR0, ED, EC, P3, + ST_QUA, COLOR1, P0, P2, EC, ED, + ST_TRI, COLOR1, P1, P2, P0, + // Case #8: (cloned #1) + ST_QUA, COLOR0, EC, ED, P0, P2, + ST_TRI, COLOR0, P2, P0, P1, + ST_TRI, COLOR1, P3, ED, EC, + // Case #9: (cloned #3) + ST_QUA, COLOR0, EC, EA, P1, P2, + ST_QUA, COLOR1, P3, P0, EA, EC, + // Case #10: (cloned #5) + ST_TRI, COLOR0, EA, ED, P0, + ST_TRI, COLOR0, EC, EB, P2, + ST_QUA, COLOR1, P3, P1, EB, EC, + ST_QUA, COLOR1, P1, P3, ED, EA, + // Case #11: (cloned #7) + ST_TRI, COLOR0, EC, EB, P2, + ST_QUA, COLOR1, P3, P1, EB, EC, + ST_TRI, COLOR1, P0, P1, P3, + // Case #12: (cloned #3) + ST_QUA, COLOR0, EB, ED, P0, P1, + ST_QUA, COLOR1, P2, P3, ED, EB, + // Case #13: (cloned #7) + ST_TRI, COLOR0, EB, EA, P1, + ST_QUA, COLOR1, P2, P0, EA, EB, + ST_TRI, COLOR1, P3, P0, P2, + // Case #14: (cloned #7) + ST_TRI, COLOR0, EA, ED, P0, + ST_QUA, COLOR1, P1, P3, ED, EA, + ST_TRI, COLOR1, P2, P3, P1, + // Case #15: Unique case #6 + ST_QUA, COLOR1, P0, P1, P2, P3, + // Dummy + 0 +}; + +//--------------------------------------------------------------------------- +// Axom modifications +const size_t clipShapesQuaSize = sizeof(clipShapesQua) / sizeof(unsigned char); +} // namespace tables +} // namespace clipping +} // namespace bump +} // namespace axom +// clang-format on +//--------------------------------------------------------------------------- diff --git a/src/axom/bump/clipping/split/convert_clip_cases.py b/src/axom/bump/clipping/split/convert_clip_cases.py new file mode 100644 index 0000000000..b37000b1c6 --- /dev/null +++ b/src/axom/bump/clipping/split/convert_clip_cases.py @@ -0,0 +1,286 @@ +from collections import defaultdict + +def read_array_cc(filename, name, convert): + lines = open(filename, "rt").readlines() + reading = False + arr = [] + for line in lines: + if not reading: + if line.find(name) != -1: + reading = True + else: + if line.find(";") != -1: + reading = False + break + elif line.find("//") == 1: + # Skip the line. + continue + else: + s = 0 + e = line.find("//") + if e == -1: + e = len(line) - 1 + if convert: + numbers = eval("[" + line[s:e] + "]") + arr = arr + list(numbers) + else: + tokens1 = [x.replace(' ', '') for x in line[s:e].split(",")] + tokens = [x for x in tokens1 if x != ''] + arr = arr + list(tokens) + return arr + +def find_shared_edge(poly1, poly2): + edges1 = set((poly1[i], poly1[(i+1)%len(poly1)]) for i in range(len(poly1))) + edges2 = set((poly2[i], poly2[(i+1)%len(poly2)]) for i in range(len(poly2))) + for e1 in edges1: + if e1 in edges2 or (e1[1], e1[0]) in edges2: + return e1 + return None + +def merge_polygons(poly1, poly2, shared_edge): + # Find indexes of shared edge in both polygons + i1 = poly1.index(shared_edge[0]) + j1 = (i1 + 1) % len(poly1) + i2 = poly2.index(shared_edge[0]) + j2 = (i2 + 1) % len(poly2) + # Check direction + if poly1[j1] == shared_edge[1]: + poly1_order = poly1 + else: + poly1_order = poly1[::-1] + if poly2[j2] == shared_edge[1]: + poly2_order = poly2 + else: + poly2_order = poly2[::-1] + # Remove shared edge from poly2 + idx = poly2_order.index(shared_edge[0]) + merged = poly1_order + poly2_order[idx+2:] + poly2_order[:idx] + # Remove duplicate vertices at the join + result = [] + for v in merged: + if not result or v != result[-1]: + result.append(v) + return tuple(result) + +def combine_polygons(polygons, max_edges=8): + polygons = [tuple(p) for p in polygons] + changed = True + while changed: + changed = False + new_polygons = [] + skip = set() + for i in range(len(polygons)): + if i in skip: + continue + merged = False + for j in range(len(polygons)): + if i == j or j in skip: + continue + shared_edge = find_shared_edge(polygons[i], polygons[j]) + if shared_edge: + new_poly = merge_polygons(polygons[i], polygons[j], shared_edge) + if len(new_poly) <= max_edges: + # We should sort the points so merging works better + new_poly = tuple(sort_points(new_poly, 8)) + #print("Created ", new_poly, "from", polygons[i], polygons[j]) + new_polygons.append(new_poly) + skip.update([i, j]) + merged = True + changed = True + break + #else: + # print("Could not combine polygons due to length!", polygons[i], polygons[j]) + if not merged: + new_polygons.append(polygons[i]) + polygons = new_polygons + return polygons + +def example(): + # Example usage: + polygons = [ + ('A', 'B', 'C', 'D'), + ('C', 'D', 'E', 'F'), + ('E', 'F', 'G', 'H'), + ('X', 'Y', 'Z') + ] + + result = combine_polygons(polygons, max_edges=8) + print(result) + +def sorted_point_order(numPoints): + order = {} + for i in range(numPoints): + p = f"P{i}" + e = f"E{chr(ord('A')+i)}" + order[p] = 2*i + order[e] = 2*i + 1 + return order + +def sort_points(pts, maxPoints): + order = sorted_point_order(maxPoints) + sp = {} + for p in pts: + sp[order[p]] = p + sk = sorted(sp.keys()) + out = [] + for k in sk: + out.append(sp[k]) + return out + +def shapeSize(name): + advance = {"ST_TRI": 2 + 3, + "ST_QUA": 2 + 4, + "ST_POLY5": 2 + 5, + "ST_POLY6": 2 + 6, + "ST_POLY7": 2 + 7, + "ST_POLY8": 2 + 8} + return advance[name] + +def convert_clip_cases(filename, name, npts): + advance = {"ST_TRI": 2 + 3, + "ST_QUA": 2 + 4, + "ST_POLY5": 2 + 5, + "ST_POLY6": 2 + 6, + "ST_POLY7": 2 + 7, + "ST_POLY8": 2 + 8} + nptsToShapeName = {} + for k in advance: + nptsToShapeName[advance[k] - 2] = k + + sizes = read_array_cc(filename, f"numClipShapes{name}", True) + #print(sizes) + + offsets = read_array_cc(filename, f"startClipShapes{name}", True) + #print(offsets) + + shapes = read_array_cc(filename, f"clipShapes{name}", False) + #print(shapes) + + numCases = len(sizes) + + outSizes = [0]*numCases + outOffsets = [0]*numCases + outShapes = [] + outOffset = 0 + + for ci in range(numCases): + offset = offsets[ci] + #print(f"// Case {ci}") + color0 = [] + color1 = [] + for si in range(sizes[ci]): + shapeTag = shapes[offset] + colorTag = shapes[offset + 1] + + shapeSize = advance[shapeTag] + shapeTokens = shapes[offset:offset+shapeSize] + if colorTag == "COLOR0": + color0.append(shapeTokens[2:]) + else: + color1.append(shapeTokens[2:]) + #print(" ", shapeTokens) + offset = offset + shapeSize + + outOffsets[ci] = outOffset + if len(color0) > 0: + c0 = combine_polygons(color0, max_edges=8) + #print("COLOR0", c0) + for c in c0: + sc = sort_points(c, npts) + outShapes.append(nptsToShapeName[len(sc)]) + outShapes.append("COLOR0") + for p in sc: + outShapes.append(p) + outOffset = outOffset + 2 + len(sc) + outSizes[ci] = outSizes[ci] + len(c0) + + if len(color1) > 0: + c1 = combine_polygons(color1, max_edges=8) + #print("COLOR1", c1) + for c in c1: + sc = sort_points(c, npts) + outShapes.append(nptsToShapeName[len(sc)]) + outShapes.append("COLOR1") + for p in sc: + outShapes.append(p) + outOffset = outOffset + 2 + len(sc) + outSizes[ci] = outSizes[ci] + len(c1) + + return (outSizes, outOffsets, outShapes) + +def write_new_tables(filename, name, sizes, offsets, shapes): + + f = open(filename, "wt") + f.write("// Copyright (c) 2017-2025, Lawrence Livermore National Security, LLC and\n") + f.write("// other Axom Project Developers. See the top-level LICENSE file for details.\n") + f.write("//\n") + f.write("// SPDX-License-Identifier: (BSD-3-Clause)\n") + + f.write("#include \"ClipCases.h\"\n\n") + + f.write("namespace axom {\n") + f.write("namespace bump {\n") + f.write("namespace clipping {\n") + f.write("namespace tables {\n\n") + f.write(f"int numClipCases{name} = {len(sizes)};\n\n") + + f.write(f"int numClipShapes{name}[] = ") + f.write("{\n") + f.write(" " + str(sizes)[1:-1]) + f.write("\n};\n\n") + + f.write(f"int startClipShapes{name}[] = ") + f.write("{\n") + f.write(" " + str(offsets)[1:-1]) + f.write("\n};\n\n") + + f.write("// clang-format off\n") + f.write(f"unsigned char clipShapes{name}[] = ") + f.write("{\n") + + numCases = len(sizes) + for ci in range(numCases): + offset = offsets[ci] + f.write(f" // Case #{ci}\n") + for si in range(sizes[ci]): + shapeTag = shapes[offset] + ss = shapeSize(shapeTag) + toks = shapes[offset:offset+ss] + #print(toks) + toks_str = str(toks)[1:-1].replace("'", "") + if ci < numCases - 1: + toks_str = toks_str + "," + else: + if si < sizes[ci] - 1: + toks_str = toks_str + "," + f.write(" " + toks_str + "\n") + offset = offset + ss + f.write("};\n") + f.write("// clang-format on\n\n") + + f.write(f"const size_t clipShapes{name}Size = sizeof(clipShapes{name}) / sizeof(unsigned char);\n\n") + f.write("} // namespace tables\n") + f.write("} // namespace clipping\n") + f.write("} // namespace bump\n") + f.write("} // namespace axom\n") + f.close() + +def main(): + #example() + outSizes, outOffsets, outShapes = convert_clip_cases("ClipCasesQua.cpp", "Qua", 4) + write_new_tables("polygonalClipCasesQua.cpp", "Qua", outSizes, outOffsets, outShapes) + + outSizes, outOffsets, outShapes = convert_clip_cases("ClipCasesPoly5.cpp", "Poly5", 5) + write_new_tables("polygonalClipCasesPoly5.cpp", "Poly5", outSizes, outOffsets, outShapes) + + outSizes, outOffsets, outShapes = convert_clip_cases("ClipCasesPoly6.cpp", "Poly6", 6) + write_new_tables("polygonalClipCasesPoly6.cpp", "Poly6", outSizes, outOffsets, outShapes) + + outSizes, outOffsets, outShapes = convert_clip_cases("ClipCasesPoly7.cpp", "Poly7", 7) + write_new_tables("polygonalClipCasesPoly7.cpp", "Poly7", outSizes, outOffsets, outShapes) + + outSizes, outOffsets, outShapes = convert_clip_cases("ClipCasesPoly8.cpp", "Poly8", 8) + write_new_tables("polygonalClipCasesPoly8.cpp", "Poly8", outSizes, outOffsets, outShapes) + +main() + diff --git a/src/axom/bump/tests/bump_clipfield.cpp b/src/axom/bump/tests/bump_clipfield.cpp index 094d686934..dfc7b3f4b4 100644 --- a/src/axom/bump/tests/bump_clipfield.cpp +++ b/src/axom/bump/tests/bump_clipfield.cpp @@ -15,6 +15,7 @@ #include namespace bump = axom::bump; +namespace views = axom::bump::views; namespace utils = axom::bump::utilities; std::string baselineDirectory() @@ -451,6 +452,8 @@ void test_one_shape(const conduit::Node &hostMesh, const std::string &name) conduit::Node hostClipMesh; utils::copy(hostClipMesh, deviceClipMesh); + TestApp.saveVisualization(name, hostClipMesh); + // Handle baseline comparison. EXPECT_TRUE(TestApp.test(name, hostClipMesh)); } @@ -543,6 +546,8 @@ void braid2d_clip_test(const std::string &type, const std::string &name) conduit::Node hostClipMesh; utils::copy(hostClipMesh, deviceClipMesh); + TestApp.saveVisualization(name, hostClipMesh); + // Handle baseline comparison. EXPECT_TRUE(TestApp.test(name, hostClipMesh)); @@ -565,32 +570,27 @@ void braid2d_clip_test(const std::string &type, const std::string &name) options["fields/color"] = "new_color"; options["fields/new_radial"] = "new_radial2"; - conduit::Node deviceClipMixedMesh; - if(n_device_topo.has_path("elements/shape") && - n_device_topo.fetch_existing("elements/shape").as_string() == "mixed") + const auto shape = n_device_topo.fetch_existing("elements/shape").as_string(); + + conduit::Node deviceClipMesh2; + if(shape == "polygonal") { - auto shapesView = - utils::make_array_view(n_device_topo.fetch_existing("elements/shapes")); const auto sizesView = utils::make_array_view(n_device_topo.fetch_existing("elements/sizes")); const auto offsetsView = utils::make_array_view(n_device_topo.fetch_existing("elements/offsets")); - // Make the shape map. - volatile int allocatorID = axom::execution_space::allocatorID(); - axom::Array values, ids; - auto shapeMap = axom::bump::views::buildShapeMap(n_device_topo, values, ids, allocatorID); - - using MixedTopoView = axom::bump::views::UnstructuredTopologyMixedShapeView; - MixedTopoView mixedTopoView(connView, shapesView, sizesView, offsetsView, shapeMap); + using PolyTopoView = + views::UnstructuredTopologySingleShapeView>; + PolyTopoView polyTopoView(connView, sizesView, offsetsView); // Clip the data - axom::bump::clipping::ClipField mixedClipper( - mixedTopoView, + axom::bump::clipping::ClipField polyClipper( + polyTopoView, expCoordsetView); - mixedClipper.execute(deviceClipMesh, options, deviceClipMixedMesh); + polyClipper.execute(deviceClipMesh, options, deviceClipMesh2); } - else + else if(shape == "quad") { // Depending on optimizations, we might get a mesh with just quads. using QuadTopoView = @@ -601,15 +601,22 @@ void braid2d_clip_test(const std::string &type, const std::string &name) axom::bump::clipping::ClipField quadClipper( quadTopoView, expCoordsetView); - quadClipper.execute(deviceClipMesh, options, deviceClipMixedMesh); + quadClipper.execute(deviceClipMesh, options, deviceClipMesh2); + } + else + { + std::cout << "The test got an unexpected shape " << shape << std::endl; + FAIL(); } // Copy device->host - conduit::Node hostClipMixedMesh; - utils::copy(hostClipMixedMesh, deviceClipMixedMesh); + conduit::Node hostClipMesh2; + utils::copy(hostClipMesh2, deviceClipMesh2); + + TestApp.saveVisualization(name + "_clip2", hostClipMesh2); // Handle baseline comparison. - EXPECT_TRUE(TestApp.test(name + "_mixed", hostClipMixedMesh)); + EXPECT_TRUE(TestApp.test(name + "_clip2", hostClipMesh2)); } TEST(bump_clipfield, uniform2d) @@ -672,6 +679,8 @@ void braid_rectilinear_clip_test(const std::string &name) conduit::Node hostClipMesh; utils::copy(hostClipMesh, deviceClipMesh); + TestApp.saveVisualization(name, hostClipMesh); + // Handle baseline comparison. EXPECT_TRUE(TestApp.test(name, hostClipMesh)); } @@ -741,6 +750,8 @@ void strided_structured_clip_test(const std::string &name, const conduit::Node & // device->host utils::copy(hostClipMesh, deviceClipMesh); + TestApp.saveVisualization(name, hostClipMesh); + // Handle baseline comparison. EXPECT_TRUE(TestApp.test(name, hostClipMesh)); } @@ -823,6 +834,8 @@ void braid3d_clip_test(const std::string &type, const std::string &name) conduit::Node hostClipMesh; utils::copy(hostClipMesh, deviceClipMesh); + TestApp.saveVisualization(name, hostClipMesh); + // Handle baseline comparison. EXPECT_TRUE(TestApp.test(name, hostClipMesh)); } @@ -932,6 +945,8 @@ void braid3d_mixed_clip_test(const std::string &name) conduit::Node hostClipMesh; utils::copy(hostClipMesh, deviceClipMesh); + TestApp.saveVisualization(name, hostClipMesh); + // Handle baseline comparison. EXPECT_TRUE(TestApp.test(name, hostClipMesh)); } @@ -984,6 +999,7 @@ struct point_merge_test { conduit::Node hostMesh; create(hostMesh); + TestApp.saveVisualization("pointmerge_orig", hostMesh); // host->device conduit::Node deviceMesh; @@ -1013,6 +1029,8 @@ struct point_merge_test utils::copy(hostClipMesh, deviceClipMesh); //printNode(hostClipMesh); + TestApp.saveVisualization("pointmerge", hostClipMesh); + // Check that the points were merged when making the new mesh. std::vector x {{2.0, 2.0, 0.0, 1.0, 2.0, 1.5, 1.0}}; std::vector y {{0.0, 1.0, 2.0, 2.0, 2.0, 1.0, 1.5}}; @@ -1024,11 +1042,10 @@ struct point_merge_test EXPECT_FLOAT_EQ(hostClipMesh["coordsets/coords/values/y"].as_float_accessor()[i], y[i]); } - // Check that the degenerate quads were turned into triangles. - std::vector shapes {{2, 2, 3, 2}}; - std::vector sizes {{3, 3, 4, 3}}; - std::vector offsets {{0, 4, 8, 12}}; - compare_values(shapes, hostClipMesh["topologies/mesh/elements/shapes"].as_int_accessor()); + // Check that we git tris and a pentagon. + EXPECT_EQ(hostClipMesh["topologies/mesh/elements/shape"].as_string(), "polygonal"); + std::vector sizes {{3, 3, 5}}; + std::vector offsets {{0, 4, 8}}; compare_values(sizes, hostClipMesh["topologies/mesh/elements/sizes"].as_int_accessor()); compare_values(offsets, hostClipMesh["topologies/mesh/elements/offsets"].as_int_accessor()); } @@ -1085,6 +1102,8 @@ struct test_selectedzones conduit::Node hostResult; utils::copy(hostResult, deviceResult); + TestApp.saveVisualization("selectedzones1", hostResult); + // Handle baseline comparison. EXPECT_TRUE(TestApp.test("selectedzones1", hostResult)); @@ -1100,6 +1119,8 @@ struct test_selectedzones // device->host utils::copy(hostResult, deviceResult); + TestApp.saveVisualization("selectedzones2", hostResult); + EXPECT_TRUE(TestApp.test("selectedzones2", hostResult)); } diff --git a/src/axom/bump/views/Shapes.hpp b/src/axom/bump/views/Shapes.hpp index fc4c6010e5..63f6c00d6d 100644 --- a/src/axom/bump/views/Shapes.hpp +++ b/src/axom/bump/views/Shapes.hpp @@ -40,6 +40,9 @@ enum Invalid_ShapeID = 20 }; +/// prototype +AXOM_HOST_DEVICE constexpr IndexType shapeDimension(int shapeId); + /*! \brief Point type traits. @@ -520,6 +523,21 @@ struct PolygonTraits AXOM_HOST_DEVICE constexpr static const char *name() { return "polygonal"; } }; +/*! + * \brief Polyhedron shape traits. + * + * \note This struct contains a subset of the interface used in some other shape + * traits. + */ +struct PolyhedronTraits +{ + AXOM_HOST_DEVICE constexpr static int id() { return Polyhedron_ShapeID; } + AXOM_HOST_DEVICE constexpr static bool is_polyhedral() { return true; } + AXOM_HOST_DEVICE constexpr static bool is_variable_size() { return true; } + AXOM_HOST_DEVICE constexpr static IndexType dimension() { return 3; } + AXOM_HOST_DEVICE constexpr static const char *name() { return "polyhedral"; } +}; + /*! * \brief This struct represents a polygon zone. */ @@ -824,41 +842,7 @@ struct VariableShape AXOM_HOST_DEVICE constexpr static bool is_polyhedral() { return false; } AXOM_HOST_DEVICE constexpr static bool is_variable_size() { return true; } - AXOM_HOST_DEVICE IndexType dimension() const - { - IndexType dim = 2; - switch(m_shapeId) - { - case Point_ShapeID: - dim = PointTraits::dimension(); - break; - case Line_ShapeID: - dim = LineTraits::dimension(); - break; - case Tri_ShapeID: - dim = TriTraits::dimension(); - break; - case Quad_ShapeID: - dim = QuadTraits::dimension(); - break; - case Polygon_ShapeID: - dim = PolygonTraits::dimension(); - break; - case Tet_ShapeID: - dim = TetTraits::dimension(); - break; - case Pyramid_ShapeID: - dim = PyramidTraits::dimension(); - break; - case Wedge_ShapeID: - dim = WedgeTraits::dimension(); - break; - case Hex_ShapeID: - dim = HexTraits::dimension(); - break; - } - return dim; - } + AXOM_HOST_DEVICE IndexType dimension() const { return shapeDimension(m_shapeId); } AXOM_HOST_DEVICE IndexType numberOfNodes() const { return m_ids.size(); } @@ -1146,6 +1130,57 @@ inline int shapeNameToID(const std::string &name) return id; } +/*! + * \brief Return the dimension for the specified shape id. + * + * \param shapeId The shape id. + * + * \return The dimension for the shape id. + * + * \note We can't tell the dimension for mixed shapes from the id alone. Return -1. + */ +AXOM_HOST_DEVICE constexpr IndexType shapeDimension(int shapeId) +{ + IndexType dim = 2; + switch(shapeId) + { + case Point_ShapeID: + dim = PointTraits::dimension(); + break; + case Line_ShapeID: + dim = LineTraits::dimension(); + break; + case Tri_ShapeID: + dim = TriTraits::dimension(); + break; + case Quad_ShapeID: + dim = QuadTraits::dimension(); + break; + case Polygon_ShapeID: + dim = PolygonTraits::dimension(); + break; + case Tet_ShapeID: + dim = TetTraits::dimension(); + break; + case Pyramid_ShapeID: + dim = PyramidTraits::dimension(); + break; + case Wedge_ShapeID: + dim = WedgeTraits::dimension(); + break; + case Hex_ShapeID: + dim = HexTraits::dimension(); + break; + case Polyhedron_ShapeID: + dim = 3; + break; + case Mixed_ShapeID: + dim = -1; + break; + } + return dim; +} + } // end namespace views } // end namespace bump } // end namespace axom diff --git a/src/axom/bump/views/UnstructuredTopologyPolyhedralView.hpp b/src/axom/bump/views/UnstructuredTopologyPolyhedralView.hpp index 5aa6b72640..38ce85281e 100644 --- a/src/axom/bump/views/UnstructuredTopologyPolyhedralView.hpp +++ b/src/axom/bump/views/UnstructuredTopologyPolyhedralView.hpp @@ -17,6 +17,7 @@ namespace bump { namespace views { + /*! * \brief This class implements a view for Blueprint polyhedral topologies. */ @@ -85,14 +86,10 @@ class UnstructuredTopologyPolyhedralView /*! * \brief This struct provides data about Zone i's shape. */ - struct PolyhedronShape + struct PolyhedronShape : public PolyhedronTraits { constexpr static IndexType MaximumNumberOfIds = 20 * 3; - AXOM_HOST_DEVICE constexpr static bool is_polyhedral() { return true; } - AXOM_HOST_DEVICE constexpr static int id() { return Polyhedron_ShapeID; } - AXOM_HOST_DEVICE constexpr static const char *name() { return "polyhedral"; } - /// Constructor. AXOM_HOST_DEVICE PolyhedronShape(const PolyhedronData &obj, axom::IndexType zi) : m_data(obj) diff --git a/src/axom/bump/views/dispatch_unstructured_topology.hpp b/src/axom/bump/views/dispatch_unstructured_topology.hpp index 5e343426a9..7903f6cff6 100644 --- a/src/axom/bump/views/dispatch_unstructured_topology.hpp +++ b/src/axom/bump/views/dispatch_unstructured_topology.hpp @@ -340,6 +340,27 @@ struct dispatch_shape, FuncType> } }; +template +struct dispatch_shape, FuncType> +{ + static void execute(bool &eligible, + const std::string &shape, + const axom::ArrayView &connView, + const axom::ArrayView &sizesView, + const axom::ArrayView &offsetsView, + FuncType &&func) + { + if(eligible && shape == "polygonal") + { + UnstructuredTopologySingleShapeView> ugView(connView, + sizesView, + offsetsView); + func(shape, ugView); + eligible = false; + } + } +}; + template struct dispatch_shape, FuncType> { @@ -521,6 +542,15 @@ void typed_dispatch_unstructured_topology(const conduit::Node &topo, FuncType && sizesView, offsetsView, std::forward(func)); + internal::dispatch_shape, + FuncType>::execute(eligible, + shape, + connView, + sizesView, + offsetsView, + std::forward(func)); internal::dispatch_shape, diff --git a/src/axom/bump/views/view_traits.hpp b/src/axom/bump/views/view_traits.hpp index 61f0937372..db51567d47 100644 --- a/src/axom/bump/views/view_traits.hpp +++ b/src/axom/bump/views/view_traits.hpp @@ -24,9 +24,16 @@ static constexpr int shapes_for_dimension(int dimension) int shapes = 0; switch(dimension) { + case 0: + axom::utilities::setBitOn(shapes, Point_ShapeID); + break; + case 1: + axom::utilities::setBitOn(shapes, Line_ShapeID); + break; case 2: axom::utilities::setBitOn(shapes, Tri_ShapeID); axom::utilities::setBitOn(shapes, Quad_ShapeID); + axom::utilities::setBitOn(shapes, Polygon_ShapeID); axom::utilities::setBitOn(shapes, Mixed_ShapeID); break; case 3: diff --git a/src/axom/mir/EquiZAlgorithm.hpp b/src/axom/mir/EquiZAlgorithm.hpp index 0f1986478f..eb28616fa6 100644 --- a/src/axom/mir/EquiZAlgorithm.hpp +++ b/src/axom/mir/EquiZAlgorithm.hpp @@ -567,7 +567,11 @@ class EquiZAlgorithm : public axom::mir::MIRAlgorithm n_InputFields.reset(); for(conduit::index_t i = 0; i < n_fields.number_of_children(); i++) { - n_InputFields[n_fields[i].name()].set_external(n_fields[i]); + const conduit::Node &n_field = n_fields[i]; + if(n_field["topology"].as_string() == n_newTopo.name()) + { + n_InputFields[n_fields[i].name()].set_external(n_fields[i]); + } } makeNodeCenteredVFs(n_topo, n_coordset, n_InputFields, mixedMats); makeWorkingFields(n_topo, n_InputFields, cleanMats, mixedMats); diff --git a/src/axom/mir/MIRAlgorithm.cpp b/src/axom/mir/MIRAlgorithm.cpp index 9cf525f716..9073b59c06 100644 --- a/src/axom/mir/MIRAlgorithm.cpp +++ b/src/axom/mir/MIRAlgorithm.cpp @@ -178,6 +178,13 @@ void MIRAlgorithm::saveMesh(const conduit::Node &n_mesh, const std::string &file conduit::Node n_mesh_host; axom::bump::utilities::copy(n_mesh_host, n_mesh); + // Check the mesh we're saving. + conduit::Node info; + if(!conduit::blueprint::mesh::verify(n_mesh_host, info)) + { + printNode(n_mesh_host); + } + conduit::relay::io::save(n_mesh_host, filebase + ".yaml", "yaml"); #if defined(AXOM_USE_HDF5) conduit::relay::io::blueprint::save_mesh(n_mesh_host, filebase, "hdf5"); diff --git a/src/axom/mir/detail/equiz_detail.hpp b/src/axom/mir/detail/equiz_detail.hpp index 7d3d139771..d5140e3881 100644 --- a/src/axom/mir/detail/equiz_detail.hpp +++ b/src/axom/mir/detail/equiz_detail.hpp @@ -77,7 +77,7 @@ class MaterialIntersector { const auto nid = nodeIdsView[i]; SLIC_ASSERT_MSG( - nid >= 0 && nid < m_matvfViews[0].size(), + nid >= 0 && nid < static_cast(m_matvfViews[0].size()), axom::fmt::format("Node id {} is not in range [0, {}).", nid, m_matvfViews[0].size())); // clang-format off @@ -105,10 +105,10 @@ class MaterialIntersector if(zoneMatID != NULL_MATERIAL) backgroundIndex = matNumberToIndex(zoneMatID); // Determine the matvf view index for the current material. SLIC_ASSERT_MSG( - id0 >= 0 && id0 < m_matvfViews[0].size(), + id0 >= 0 && id0 < static_cast(m_matvfViews[0].size()), axom::fmt::format("Node id {} is not in range [0, {}).", id0, m_matvfViews[0].size())); SLIC_ASSERT_MSG( - id1 >= 0 && id1 < m_matvfViews[0].size(), + id1 >= 0 && id1 < static_cast(m_matvfViews[0].size()), axom::fmt::format("Node id {} is not in range [0, {}).", id1, m_matvfViews[0].size())); // Get the volume fractions for mat1, mat2 at the edge endpoints id0, id1. diff --git a/src/axom/mir/tests/mir_equiz2d.cpp b/src/axom/mir/tests/mir_equiz2d.cpp index f4892442f9..9de796f283 100644 --- a/src/axom/mir/tests/mir_equiz2d.cpp +++ b/src/axom/mir/tests/mir_equiz2d.cpp @@ -14,6 +14,7 @@ namespace utils = axom::bump::utilities; namespace views = axom::bump::views; +namespace bump = axom::bump; std::string baselineDirectory() { return pjoin(dataDirectory(), "mir", "regression", "mir_equiz"); } @@ -138,6 +139,223 @@ void braid2d_mat_test(const std::string &type, EXPECT_TRUE(TestApp.test(name, hostMIRDomain, tolerance)); } } +//------------------------------------------------------------------------------ +/*! + * \brief Tests the MIR+TopologyMapper on polygonal geometry. + * + * 1. Make polygonal mesh 1 with clean matset + * 2. Make mesh 2, a rotated version of polygonal mesh 1 + * 3. Map material from mesh 1 onto mesh 2 + * 4. Run MIR on mesh 2 + */ +template +class test_Polygonal_MIR +{ +public: + static constexpr conduit::index_t NLEVELS = 4; + static constexpr int MAX_MATERIALS = NLEVELS + 1; + + static void test(const std::string &name) + { + // Make the 2D input mesh. + conduit::Node n_mesh; + initialize(n_mesh); + + // host->device + conduit::Node n_dev; + utils::copy(n_dev, n_mesh); + + mapping_target2(n_dev); + mir_target2(n_dev); + + // device->host + conduit::Node hostResult; + utils::copy(hostResult, n_dev); + + EXPECT_EQ(countBadMaterialZones(hostResult["matsets/target2_matset"]), 0); + + TestApp.saveVisualization(name, hostResult); + + // Handle baseline comparison. + EXPECT_TRUE(TestApp.test(name, hostResult)); + } + + static void initialize(conduit::Node &n_mesh) + { + // Make polygonal geometry + const conduit::index_t nz = 1; + conduit::blueprint::mesh::examples::polytess(NLEVELS, nz, n_mesh); + + // Make a matset from the level field. + conduit::Node &n_matset = n_mesh["matsets/mat"]; + n_matset["topology"] = "topo"; + for(int mat = 1; mat <= NLEVELS; mat++) + { + n_matset[axom::fmt::format("material_map/mat{}", mat)] = mat; + } + const auto values = n_mesh["fields/level/values"].as_int_accessor(); + const int nzones = values.number_of_elements(); + n_matset["material_ids"].set(conduit::DataType::int32(nzones)); + n_matset["indices"].set(conduit::DataType::int32(nzones)); + n_matset["sizes"].set(conduit::DataType::int32(nzones)); + n_matset["offsets"].set(conduit::DataType::int32(nzones)); + n_matset["volume_fractions"].set(conduit::DataType::float32(nzones)); + + auto material_ids = n_matset["material_ids"].as_int32_ptr(); + auto indices = n_matset["indices"].as_int32_ptr(); + auto sizes = n_matset["sizes"].as_int32_ptr(); + auto offsets = n_matset["offsets"].as_int32_ptr(); + auto volume_fractions = n_matset["volume_fractions"].as_float32_ptr(); + for(int i = 0; i < nzones; i++) + { + material_ids[i] = values[i]; + indices[i] = i; + sizes[i] = 1; + offsets[i] = i; + volume_fractions[i] = 1.f; + } + + make_target2(n_mesh); + } + + static void make_target2(conduit::Node &n_mesh) + { + const auto x = n_mesh["coordsets/coords/values/x"].as_float64_accessor(); + const auto y = n_mesh["coordsets/coords/values/y"].as_float64_accessor(); + + // Make a rotated copy of the input topo mesh. + conduit::Node &target2_coords = n_mesh["coordsets/target2_coords"]; + target2_coords["type"] = "explicit"; + target2_coords["values/x"].set(conduit::DataType::float64(x.number_of_elements())); + target2_coords["values/y"].set(conduit::DataType::float64(y.number_of_elements())); + auto xp = target2_coords["values/x"].as_float64_ptr(); + auto yp = target2_coords["values/y"].as_float64_ptr(); + + const double A = M_PI / 16.; + const double sinA = sin(A); + const double cosA = cos(A); + const double M[2][2] = {{cosA, -sinA}, {sinA, cosA}}; + for(conduit::index_t i = 0; i < x.number_of_elements(); i++) + { + xp[i] = M[0][0] * x[i] + M[0][1] * y[i]; + yp[i] = M[1][0] * x[i] + M[1][1] * y[i]; + } + + n_mesh["topologies/target2"].set(n_mesh["topologies/topo"]); + n_mesh["topologies/target2/coordset"] = "target2_coords"; + } + + static void mapping_target2(conduit::Node &n_dev) + { + // Wrap polygonal mesh in views. + auto srcCoordset = views::make_explicit_coordset::view(n_dev["coordsets/coords"]); + using SrcCoordsetView = decltype(srcCoordset); + + const conduit::Node &n_srcTopo = n_dev["topologies/topo"]; + auto srcTopo = + views::make_unstructured_single_shape_topology>::view( + n_srcTopo); + using SrcTopologyView = decltype(srcTopo); + + const conduit::Node &n_srcMatset = n_dev["matsets/mat"]; + auto srcMatset = views::make_unibuffer_matset::view(n_srcMatset); + using SrcMatsetView = decltype(srcMatset); + + // Wrap target2 mesh in views. + auto targetCoordset = + views::make_explicit_coordset::view(n_dev["coordsets/target2_coords"]); + using TargetCoordsetView = decltype(targetCoordset); + + const conduit::Node &n_targetTopo = n_dev["topologies/target2"]; + auto targetTopo = + views::make_unstructured_single_shape_topology>::view( + n_targetTopo); + using TargetTopologyView = decltype(targetTopo); + + // Make new VFs via mapper. + constexpr int MAX_VERTS = 16; // Use a larger MAX_VERTS to handle oct-oct clipping. + using Mapper = bump::TopologyMapper; + Mapper mapper(srcTopo, srcCoordset, srcMatset, targetTopo, targetCoordset); + conduit::Node n_opts; + n_opts["source/matsetName"] = "mat"; + n_opts["target/topologyName"] = "target2"; + n_opts["target/matsetName"] = "target2_matset"; + mapper.execute(n_dev, n_opts, n_dev); + } + + static void mir_target2(conduit::Node &n_dev) + { + // Wrap target2 mesh in views. + auto coordsetView = + views::make_explicit_coordset::view(n_dev["coordsets/target2_coords"]); + using CoordsetView = decltype(coordsetView); + + const conduit::Node &n_targetTopo = n_dev["topologies/target2"]; + auto topologyView = + views::make_unstructured_single_shape_topology>::view( + n_targetTopo); + using TopologyView = decltype(topologyView); + + const conduit::Node &n_targetMatset = n_dev["matsets/target2_matset"]; + auto matsetView = views::make_unibuffer_matset::view(n_targetMatset); + using MatsetView = decltype(matsetView); + + // Do MIR (into new node) + conduit::Node n_mir; + using MIR = axom::mir::EquiZAlgorithm; + MIR m(topologyView, coordsetView, matsetView); + conduit::Node options; + options["matset"] = "target2_matset"; + options["matsetName"] = "mir_matset"; + m.execute(n_dev, options, n_mir); + + // Move the MIR output to the n_dev node. + n_dev["coordsets/mir_coords"].move(n_mir["coordsets/target2_coords"]); + n_dev["topologies/mir"].move(n_mir["topologies/target2"]); + n_dev["topologies/mir/coordset"] = "mir_coords"; + n_dev["matsets/mir_matset"].move(n_mir["matsets/mir_matset"]); + n_dev["matsets/mir_matset/topology"] = "mir"; + n_dev["fields/originalElements"].move(n_mir["fields/originalElements"]); + n_dev["fields/originalElements/topology"] = "mir"; + } + + static int countBadMaterialZones(const conduit::Node &matset, double eps = 1.e-4) + { + const auto volume_fractions = utils::make_array_view(matset["volume_fractions"]); + //const auto material_ids = utils::make_array_view(matset["material_ids"]); + const auto indices = utils::make_array_view(matset["indices"]); + const auto sizes = utils::make_array_view(matset["sizes"]); + const auto offsets = utils::make_array_view(matset["offsets"]); + + const int nzones = sizes.size(); + int badZones = 0; + for(int zi = 0; zi < nzones; zi++) + { + int matsThisZone = sizes[zi]; + int offset = offsets[zi]; + + // What is the total VF for the zone? + double vfSum = 0.; + for(int m = 0; m < matsThisZone; m++) + { + const int index = indices[offset + m]; + vfSum += volume_fractions[index]; + } + + if(fabs(1. - vfSum) > eps) + { + badZones++; + } + } + return badZones; + } +}; //------------------------------------------------------------------------------ template @@ -222,6 +440,37 @@ TEST(mir_equiz, equiz_uniform_unibuffer_hip) } #endif +//------------------------------------------------------------------------------ +TEST(mir_equiz, equiz_polygonal_unibuffer_seq) +{ + AXOM_ANNOTATE_SCOPE("equiz_polygonal_unibuffer_seq"); + test_Polygonal_MIR::test("equiz_polygonal_unibuffer"); +} + +#if defined(AXOM_USE_OPENMP) +TEST(mir_equiz, equiz_polygonal_unibuffer_omp) +{ + AXOM_ANNOTATE_SCOPE("equiz_polygonal_unibuffer_omp"); + test_Polygonal_MIR::test("equiz_polygonal_unibuffer"); +} +#endif + +#if defined(AXOM_USE_CUDA) +TEST(mir_equiz, equiz_polygonal_unibuffer_cuda) +{ + AXOM_ANNOTATE_SCOPE("equiz_polygonal_unibuffer_cuda"); + test_Polygonal_MIR::test("equiz_polygonal_unibuffer"); +} +#endif + +#if defined(AXOM_USE_HIP) +TEST(mir_equiz, equiz_polygonal_unibuffer_hip) +{ + AXOM_ANNOTATE_SCOPE("equiz_polygonal_unibuffer_hip"); + test_Polygonal_MIR::test("equiz_polygonal_unibuffer"); +} +#endif + //------------------------------------------------------------------------------ int main(int argc, char *argv[]) {