48 const int &localNeighborId,
54 const std::vector<std::vector<SimplexId>> *
68 const std::vector<std::vector<SimplexId>> *
73 const int &localVertexId,
86 const std::vector<std::vector<SimplexId>> *
89 const std::vector<std::vector<SimplexId>> *
92 const std::vector<std::vector<SimplexId>> *
95 const std::vector<std::array<SimplexId, 2>> *
125 std::vector<std::vector<SimplexId>> &triangles)
const;
128 const int &localNeighborId,
136 const int &localVertexId,
146 const std::vector<std::vector<SimplexId>> *
150 std::vector<std::vector<SimplexId>> &edges)
const;
153 const SimplexId &triangleId)
const override;
155 const std::vector<std::vector<SimplexId>> *
159 const int &localNeighborId,
166 const std::vector<std::vector<SimplexId>> *
169 const std::vector<std::array<SimplexId, 3>> *
175 const std::vector<std::vector<SimplexId>> *
179 const SimplexId &vertexId)
const override;
181 const std::vector<std::vector<SimplexId>> *
185 const SimplexId &vertexId)
const override;
187 const std::vector<std::vector<SimplexId>> *
191 const SimplexId &vertexId)
const override;
193 const std::vector<std::vector<SimplexId>> *
199 const std::vector<std::vector<SimplexId>> *
210 const SimplexId &triangleId)
const override;
213 const SimplexId &vertexId)
const override;
216 const float &yOrigin,
217 const float &zOrigin,
218 const float &xSpacing,
219 const float &ySpacing,
220 const float &zSpacing,
225 inline const std::array<ttk::SimplexId, 3> &
255 int &vtkId)
const override {
256#ifndef TTK_ENABLE_KAMIKAZE
262 vtkId = ttkId / nSimplexPerCell;
366 bool isPowerOfTwo(
unsigned long long int v,
unsigned long long int &r);
527 int preconditionDistributedCells()
override;
529 std::array<unsigned char, 6> isBoundaryPeriodic{};
532 void createMetaGrid(
const double *
const bounds)
override;
533 void setIsBoundaryPeriodic(std::array<unsigned char, 6> boundary);
534 int getCellRankInternal(
const SimplexId lcid)
const override;
537 std::array<SimplexId, 3>
538 getVertGlobalCoords(
const SimplexId lvid)
const override;
539 std::array<SimplexId, 3>
540 getVertLocalCoords(
const SimplexId gvid)
const override;
545 template <
typename Derived>
548 inline Derived &underlying() {
549 return static_cast<Derived &
>(*this);
551 inline Derived
const &underlying()
const {
552 return static_cast<Derived
const &
>(*this);
558 const int &localNeighborId,
571 const int &localLinkId,
576 const int &localStarId,
582 float &z)
const override;
585 const int &localVertexId,
597 const int &localLinkId,
605 const int &localStarId,
609 const int &localVertexId,
618 const int &localLinkId,
623 const int &localStarId,
627 const SimplexId &triangleId)
const override;
630 const int &localNeighborId,
634 const int &localVertexId,
646 const int &localNeighborId,
657 std::array<float, 3> p0{}, p1{};
661 const auto &ind0 = this->underlying().getVertexCoords(v0);
662 const auto &ind1 = this->underlying().getVertexCoords(v1);
672 for(
int i = 0; i < 3; ++i) {
673 incenter[i] = 0.5f * (p0[i] + p1[i]);
684 float incenter[3])
const {
691 std::array<float, 3> p0{}, p1{}, p2{};
696 const auto &ind0 = this->underlying().getVertexCoords(v0);
697 const auto &ind1 = this->underlying().getVertexCoords(v1);
698 const auto &ind2 = this->underlying().getVertexCoords(v2);
716 const float sum = d[0] + d[1] + d[2];
717 for(
int i = 0; i < 3; ++i) {
718 incenter[i] = (d[0] * p0[i] + d[1] * p1[i] + d[2] * p2[i]) / sum;
736 std::array<float, 3> p0{}, p1{}, p2{}, p3{};
742 const auto &ind0 = this->underlying().getVertexCoords(v0);
743 const auto &ind1 = this->underlying().getVertexCoords(v1);
744 const auto &ind2 = this->underlying().getVertexCoords(v2);
745 const auto &ind3 = this->underlying().getVertexCoords(v3);
767 for(
int i = 0; i < 3; ++i) {
768 incenter[i] = 0.25f * (p0[i] + p1[i] + p2[i] + p3[i]);
780 SimplexId p[2])
const {
782 p[0] = vertex &
mod_[0];
783 p[1] = vertex >>
div_[0];
790inline void ttk::PeriodicImplicitTriangulation::edgeToPosition2d(
792 const int e = (k) ? edge - esetshift_[k - 1] : edge;
793 p[0] = e % eshift_[2 * k];
794 p[1] = e / eshift_[2 * k];
799 p[0] = triangle % tshift_[0];
800 p[1] = triangle / tshift_[0];
803inline ttk::SimplexId ttk::PeriodicImplicitTriangulation::getVertexNeighbor2d(
810 wrapXLeft = wrap_[0];
811 if(p[0] == nbvoxels_[Di_])
812 wrapXRight = -wrap_[0];
815 if(p[1] == nbvoxels_[Dj_])
816 wrapYBottom = -wrap_[1];
819 return v - 1 + wrapXLeft;
821 return v - vshift_[0] + wrapYTop;
823 return v - vshift_[0] + 1 + wrapXRight + wrapYTop;
825 return v + 1 + wrapXRight;
827 return v + vshift_[0] + wrapYBottom;
829 return v + vshift_[0] - 1 + wrapXLeft + wrapYBottom;
835 ttk::PeriodicImplicitTriangulation::getVertexEdge2d(
const SimplexId p[2],
836 const int id)
const {
840 wrapXLeft = wrap_[0];
845 return esetshift_[0] + p[0] + (p[1] - 1) * eshift_[2] + wrapYTop;
847 return p[0] + p[1] * eshift_[0] - 1 + wrapXLeft;
849 return esetshift_[1] + p[0] + (p[1] - 1) * eshift_[4] + wrapYTop;
851 return p[0] + p[1] * eshift_[0];
853 return esetshift_[0] + p[0] + p[1] * eshift_[2];
855 return esetshift_[1] + p[0] + p[1] * eshift_[4] - 1 + wrapXLeft;
861 ttk::PeriodicImplicitTriangulation::getVertexStar2d(
const SimplexId p[2],
862 const int id)
const {
866 wrapXLeft = 2 * wrap_[0];
868 wrapYTop = 2 * wrap_[1];
871 return (p[0] - 1) * 2 + p[1] * tshift_[0] + wrapXLeft;
873 return (p[0] - 1) * 2 + p[1] * tshift_[0] + 1 + wrapXLeft;
875 return p[0] * 2 + p[1] * tshift_[0];
877 return p[0] * 2 + (p[1] - 1) * tshift_[0] + wrapYTop;
879 return p[0] * 2 + (p[1] - 1) * tshift_[0] + 1 + wrapYTop;
881 return (p[0] - 1) * 2 + (p[1] - 1) * tshift_[0] + 1 + wrapXLeft
888 ttk::PeriodicImplicitTriangulation::getVertexLink2d(
const SimplexId p[2],
889 const int id)
const {
895 wrapXLeft = wrap_[0];
896 if(p[0] == nbvoxels_[Di_])
897 wrapXRight = -wrap_[0];
900 if(p[1] == nbvoxels_[Dj_])
901 wrapYBottom = -wrap_[1];
904 return esetshift_[0] + p[0] + p[1] * eshift_[2] - 1 + wrapXLeft;
906 return p[0] + (p[1] + 1) * eshift_[0] - 1 + wrapXLeft + wrapYBottom;
908 return esetshift_[1] + p[0] + p[1] * eshift_[4];
910 return esetshift_[0] + p[0] + (p[1] - 1) * eshift_[2] + 1 + wrapXRight
913 return p[0] + (p[1] - 1) * eshift_[0] + wrapYTop;
915 return esetshift_[1] + p[0] + (p[1] - 1) * eshift_[4] - 1 + wrapXLeft
922 ttk::PeriodicImplicitTriangulation::getEdgeTriangle2dL(
const SimplexId p[3],
923 const int id)
const {
926 wrapYTop = 2 * wrap_[1];
929 return p[Di_] * 2 + p[Dj_] * tshift_[0];
931 return p[Di_] * 2 + (p[Dj_] - 1) * tshift_[0] + 1 + wrapYTop;
937 ttk::PeriodicImplicitTriangulation::getEdgeTriangle2dH(
const SimplexId p[3],
938 const int id)
const {
941 wrapXLeft = 2 * wrap_[0];
944 return p[Di_] * 2 + p[Dj_] * tshift_[0];
946 return (p[Di_] - 1) * 2 + p[Dj_] * tshift_[0] + 1 + wrapXLeft;
952 ttk::PeriodicImplicitTriangulation::getEdgeTriangle2dD1(
const SimplexId p[3],
953 const int id)
const {
956 return p[Di_] * 2 + p[Dj_] * tshift_[0];
958 return p[Di_] * 2 + p[Dj_] * tshift_[0] + 1;
964 ttk::PeriodicImplicitTriangulation::getEdgeLink2dL(
const SimplexId p[2],
965 const int id)
const {
966 if(p[1] > 0 and p[1] < nbvoxels_[Dj_]) {
969 return p[0] + (p[1] + 1) * vshift_[0];
971 return ((p[0] < nbvoxels_[Di_])
972 ? (p[0] + (p[1] - 1) * vshift_[0] + 1)
973 : (p[0] + (p[1] - 1) * vshift_[0] + 1 - wrap_[0]));
976 }
else if(p[1] == 0) {
979 return p[0] + (p[1] + 1) * vshift_[0];
981 return ((p[0] < nbvoxels_[Di_])
982 ? (p[0] + (p[1] - 1) * vshift_[0] + 1)
983 : (p[0] + (p[1] - 1) * vshift_[0] + 1 - wrap_[0]))
990 return p[0] + (p[1] + 1) * vshift_[0] - wrap_[1];
992 return ((p[0] < nbvoxels_[Di_])
993 ? (p[0] + (p[1] - 1) * vshift_[0] + 1)
994 : (p[0] + (p[1] - 1) * vshift_[0] + 1 - wrap_[0]));
1001 ttk::PeriodicImplicitTriangulation::getEdgeLink2dH(
const SimplexId p[2],
1002 const int id)
const {
1003 if(p[0] > 0 and p[0] < nbvoxels_[Di_]) {
1006 return p[0] + p[1] * vshift_[0] + 1;
1008 return ((p[1] < nbvoxels_[Dj_])
1009 ? (p[0] + (p[1] + 1) * vshift_[0] - 1)
1010 : (p[0] + (p[1] + 1) * vshift_[0] - 1 - wrap_[1]));
1013 }
else if(p[0] == 0) {
1016 return p[0] + p[1] * vshift_[0] + 1 + wrap_[0];
1018 return ((p[1] < nbvoxels_[Dj_])
1019 ? (p[0] + (p[1] + 1) * vshift_[0] - 1)
1020 : (p[0] + (p[1] + 1) * vshift_[0] - 1 - wrap_[1]));
1026 return p[0] + p[1] * vshift_[0] + 1;
1028 return ((p[1] < nbvoxels_[Dj_])
1029 ? (p[0] + (p[1] + 1) * vshift_[0] - 1)
1030 : (p[0] + (p[1] + 1) * vshift_[0] - 1 - wrap_[1]))
1038 ttk::PeriodicImplicitTriangulation::getEdgeLink2dD1(
const SimplexId p[2],
1039 const int id)
const {
1040 SimplexId wrapX = (p[0] < nbvoxels_[Di_]) ? 0 : wrap_[0];
1041 SimplexId wrapY = (p[1] < nbvoxels_[Dj_]) ? 0 : wrap_[1];
1044 return p[0] + p[1] * vshift_[0];
1046 return p[0] + (p[1] + 1) * vshift_[0] + 1 - wrapX - wrapY;
1052 ttk::PeriodicImplicitTriangulation::getEdgeStar2dL(
const SimplexId p[2],
1053 const int id)
const {
1057 return p[0] * 2 + p[1] * tshift_[0];
1059 return p[0] * 2 + (p[1] - 1) * tshift_[0] + 1 + 2 * wrap_[1];
1065 return p[0] * 2 + p[1] * tshift_[0];
1067 return p[0] * 2 + (p[1] - 1) * tshift_[0] + 1;
1074 ttk::PeriodicImplicitTriangulation::getEdgeStar2dH(
const SimplexId p[2],
1075 const int id)
const {
1079 return p[0] * 2 + p[1] * tshift_[0];
1081 return (p[0] - 1) * 2 + p[1] * tshift_[0] + 1 + 2 * wrap_[0];
1087 return p[0] * 2 + p[1] * tshift_[0];
1089 return (p[0] - 1) * 2 + p[1] * tshift_[0] + 1;
1098 if(isAccelerated_) {
1099 p[0] = vertex & mod_[0];
1100 p[1] = (vertex & mod_[1]) >> div_[0];
1101 p[2] = vertex >> div_[1];
1103 p[0] = vertex % vshift_[0];
1104 p[1] = (vertex % vshift_[1]) / vshift_[0];
1105 p[2] = vertex / vshift_[1];
1109inline void ttk::PeriodicImplicitTriangulation::edgeToPosition(
1111 const int e = (k) ? edge - esetshift_[k - 1] : edge;
1112 p[0] = e % eshift_[2 * k];
1113 p[1] = (e % eshift_[2 * k + 1]) / eshift_[2 * k];
1114 p[2] = e / eshift_[2 * k + 1];
1119 const SimplexId t = (k) ? triangle - tsetshift_[k - 1] : triangle;
1120 p[0] = t % tshift_[2 * k];
1121 p[1] = (t % tshift_[2 * k + 1]) / tshift_[2 * k];
1122 p[2] = t / tshift_[2 * k + 1];
1127 p[0] = (tetrahedron % tetshift_[0]) / 6;
1128 p[1] = (tetrahedron % tetshift_[1]) / tetshift_[0];
1129 p[2] = tetrahedron / tetshift_[1];
1132inline ttk::SimplexId ttk::PeriodicImplicitTriangulation::getVertexNeighbor3d(
1141 wrapXLeft = wrap_[0];
1142 if(p[0] == nbvoxels_[0])
1143 wrapXRight = -wrap_[0];
1145 wrapYTop = wrap_[1];
1146 if(p[1] == nbvoxels_[1])
1147 wrapYBottom = -wrap_[1];
1149 wrapZBack = wrap_[2];
1150 if(p[2] == nbvoxels_[2])
1151 wrapZFront = -wrap_[2];
1154 return v - vshift_[0] - vshift_[1] + wrapYTop + wrapZBack;
1156 return v + 1 - vshift_[0] - vshift_[1] + wrapXRight + wrapYTop
1159 return v - vshift_[1] + wrapZBack;
1161 return v + 1 - vshift_[1] + wrapXRight + wrapZBack;
1163 return v - vshift_[0] + wrapYTop;
1165 return v + 1 - vshift_[0] + wrapXRight + wrapYTop;
1167 return v + 1 + wrapXRight;
1169 return v - 1 + vshift_[1] + wrapXLeft + wrapZFront;
1171 return v + vshift_[1] + wrapZFront;
1173 return v - 1 + wrapXLeft;
1175 return v - 1 + vshift_[0] + wrapXLeft + wrapYBottom;
1177 return v + vshift_[0] + wrapYBottom;
1179 return v - 1 + vshift_[0] + vshift_[1] + wrapXLeft + wrapYBottom
1182 return v + vshift_[0] + vshift_[1] + wrapYBottom + wrapZFront;
1188 ttk::PeriodicImplicitTriangulation::getVertexEdge3d(
const SimplexId p[3],
1189 const int id)
const {
1194 wrapXLeft = wrap_[0];
1196 wrapYTop = wrap_[1];
1198 wrapZBack = wrap_[2];
1201 return esetshift_[3] + p[0] + (p[1] - 1) * eshift_[8]
1202 + (p[2] - 1) * eshift_[9] + wrapYTop + wrapZBack;
1204 return esetshift_[5] + p[0] + (p[1] - 1) * eshift_[12]
1205 + (p[2] - 1) * eshift_[13] + wrapYTop + wrapZBack;
1207 return esetshift_[1] + p[0] + p[1] * eshift_[4] + (p[2] - 1) * eshift_[5]
1210 return esetshift_[4] + p[0] + p[1] * eshift_[10]
1211 + (p[2] - 1) * eshift_[11] + wrapZBack;
1213 return esetshift_[0] + p[0] + (p[1] - 1) * eshift_[2] + p[2] * eshift_[3]
1216 return esetshift_[2] + p[0] + (p[1] - 1) * eshift_[6] + p[2] * eshift_[7]
1219 return p[0] + p[1] * eshift_[0] + p[2] * eshift_[1];
1221 return esetshift_[4] + p[0] + p[1] * eshift_[10] + p[2] * eshift_[11] - 1
1224 return esetshift_[1] + p[0] + p[1] * eshift_[4] + p[2] * eshift_[5];
1226 return p[0] + p[1] * eshift_[0] + p[2] * eshift_[1] - 1 + wrapXLeft;
1228 return esetshift_[2] + p[0] + p[1] * eshift_[6] + p[2] * eshift_[7] - 1
1231 return esetshift_[0] + p[0] + p[1] * eshift_[2] + p[2] * eshift_[3];
1233 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13] - 1
1236 return esetshift_[3] + p[0] + p[1] * eshift_[8] + p[2] * eshift_[9];
1242 ttk::PeriodicImplicitTriangulation::getVertexLink3d(
const SimplexId p[3],
1243 const int id)
const {
1251 wrapXLeft = 2 * wrap_[0];
1252 if(p[0] == nbvoxels_[0])
1253 wrapXRight = -2 * wrap_[0];
1255 wrapYTop = 2 * wrap_[1];
1256 if(p[1] == nbvoxels_[1])
1257 wrapYBottom = -2 * wrap_[1];
1259 wrapZBack = 2 * wrap_[2];
1260 if(p[2] == nbvoxels_[2])
1261 wrapZFront = -2 * wrap_[2];
1264 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11];
1266 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7]
1269 return tsetshift_[1] + (p[0] - 1) * 2 + p[1] * tshift_[4]
1270 + p[2] * tshift_[5] + wrapXLeft;
1272 return tsetshift_[1] + (p[0] - 1) * 2 + p[1] * tshift_[4]
1273 + p[2] * tshift_[5] + 1 + wrapXLeft;
1275 return tsetshift_[0] + (p[0] - 1) * 2 + (p[1] + 1) * tshift_[2]
1276 + p[2] * tshift_[3] + wrapXLeft + wrapYBottom;
1278 return tsetshift_[0] + (p[0] - 1) * 2 + (p[1] + 1) * tshift_[2]
1279 + p[2] * tshift_[3] + 1 + wrapXLeft + wrapYBottom;
1281 return (p[0] - 1) * 2 + p[1] * tshift_[0] + (p[2] + 1) * tshift_[1]
1282 + wrapXLeft + wrapZFront;
1284 return (p[0] - 1) * 2 + p[1] * tshift_[0] + (p[2] + 1) * tshift_[1] + 1
1285 + wrapXLeft + wrapZFront;
1287 return tsetshift_[3] + p[0] * 2 + (p[1] - 1) * tshift_[8]
1288 + p[2] * tshift_[9] + wrapYTop;
1290 return tsetshift_[2] + p[0] * 2 + (p[1] - 1) * tshift_[6]
1291 + p[2] * tshift_[7] + wrapYTop;
1293 return tsetshift_[4] + (p[0] - 1) * 2 + (p[1] - 1) * tshift_[10]
1294 + p[2] * tshift_[11] + wrapXLeft + wrapYTop;
1296 return tsetshift_[3] + (p[0] - 1) * 2 + (p[1] - 1) * tshift_[8]
1297 + p[2] * tshift_[9] + 1 + wrapXLeft + wrapYTop;
1299 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8]
1300 + (p[2] - 1) * tshift_[9] + wrapZBack;
1302 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10]
1303 + (p[2] - 1) * tshift_[11] + 1 + wrapZBack;
1305 return tsetshift_[2] + (p[0] - 1) * 2 + p[1] * tshift_[6]
1306 + (p[2] - 1) * tshift_[7] + 1 + wrapXLeft + wrapZBack;
1308 return tsetshift_[3] + (p[0] - 1) * 2 + p[1] * tshift_[8]
1309 + (p[2] - 1) * tshift_[9] + 1 + wrapXLeft + wrapZBack;
1311 return tsetshift_[1] + (p[0] + 1) * 2 + (p[1] - 1) * tshift_[4]
1312 + (p[2] - 1) * tshift_[5] + wrapXRight + wrapYTop + wrapZBack;
1314 return tsetshift_[1] + (p[0] + 1) * 2 + (p[1] - 1) * tshift_[4]
1315 + (p[2] - 1) * tshift_[5] + 1 + wrapXRight + wrapYTop + wrapZBack;
1317 return tsetshift_[0] + p[0] * 2 + (p[1] - 1) * tshift_[2]
1318 + (p[2] - 1) * tshift_[3] + wrapYTop + wrapZBack;
1320 return tsetshift_[0] + p[0] * 2 + (p[1] - 1) * tshift_[2]
1321 + (p[2] - 1) * tshift_[3] + 1 + wrapYTop + wrapZBack;
1323 return p[0] * 2 + (p[1] - 1) * tshift_[0] + (p[2] - 1) * tshift_[1]
1324 + wrapYTop + wrapZBack;
1326 return p[0] * 2 + (p[1] - 1) * tshift_[0] + (p[2] - 1) * tshift_[1] + 1
1327 + wrapYTop + wrapZBack;
1329 return tsetshift_[4] + (p[0] - 1) * 2 + (p[1] - 1) * tshift_[10]
1330 + (p[2] - 1) * tshift_[11] + 1 + wrapXLeft + wrapYTop + wrapZBack;
1332 return tsetshift_[2] + (p[0] - 1) * 2 + (p[1] - 1) * tshift_[6]
1333 + (p[2] - 1) * tshift_[7] + wrapXLeft + wrapYTop + wrapZBack;
1339 ttk::PeriodicImplicitTriangulation::getVertexTriangle3d(
const SimplexId p[3],
1340 const int id)
const {
1345 wrapXLeft = 2 * wrap_[0];
1347 wrapYTop = 2 * wrap_[1];
1349 wrapZBack = 2 * wrap_[2];
1352 return (p[0] - 1) * 2 + p[1] * tshift_[0] + p[2] * tshift_[1] + 1
1355 return tsetshift_[4] + (p[0] - 1) * 2 + p[1] * tshift_[10]
1356 + p[2] * tshift_[11] + wrapXLeft;
1358 return tsetshift_[2] + (p[0] - 1) * 2 + p[1] * tshift_[6]
1359 + p[2] * tshift_[7] + wrapXLeft;
1361 return tsetshift_[3] + (p[0] - 1) * 2 + p[1] * tshift_[8]
1362 + p[2] * tshift_[9] + 1 + wrapXLeft;
1364 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5];
1366 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5]
1369 return tsetshift_[4] + (p[0] - 1) * 2 + p[1] * tshift_[10]
1370 + p[2] * tshift_[11] + 1 + wrapXLeft;
1372 return tsetshift_[0] + (p[0] - 1) * 2 + p[1] * tshift_[2]
1373 + p[2] * tshift_[3] + 1 + wrapXLeft;
1375 return tsetshift_[2] + (p[0] - 1) * 2 + p[1] * tshift_[6]
1376 + p[2] * tshift_[7] + 1 + wrapXLeft;
1378 return tsetshift_[3] + (p[0] - 1) * 2 + p[1] * tshift_[8]
1379 + p[2] * tshift_[9] + wrapXLeft;
1381 return tsetshift_[0] + (p[0] - 1) * 2 + p[1] * tshift_[2]
1382 + p[2] * tshift_[3] + wrapXLeft;
1384 return (p[0] - 1) * 2 + p[1] * tshift_[0] + p[2] * tshift_[1] + wrapXLeft;
1386 return p[0] * 2 + tsetshift_[2] + (p[1] - 1) * tshift_[6]
1387 + (p[2] - 1) * tshift_[7] + wrapYTop + wrapZBack;
1389 return p[0] * 2 + tsetshift_[2] + (p[1] - 1) * tshift_[6]
1390 + (p[2] - 1) * tshift_[7] + 1 + wrapYTop + wrapZBack;
1392 return p[0] * 2 + tsetshift_[1] + (p[1] - 1) * tshift_[4]
1393 + (p[2] - 1) * tshift_[5] + wrapYTop + wrapZBack;
1395 return p[0] * 2 + tsetshift_[1] + (p[1] - 1) * tshift_[4]
1396 + (p[2] - 1) * tshift_[5] + 1 + wrapYTop + wrapZBack;
1398 return p[0] * 2 + tsetshift_[3] + (p[1] - 1) * tshift_[8]
1399 + (p[2] - 1) * tshift_[9] + wrapYTop + wrapZBack;
1401 return p[0] * 2 + tsetshift_[3] + (p[1] - 1) * tshift_[8]
1402 + (p[2] - 1) * tshift_[9] + 1 + wrapYTop + wrapZBack;
1404 return p[0] * 2 + tsetshift_[4] + (p[1] - 1) * tshift_[10]
1405 + (p[2] - 1) * tshift_[11] + wrapYTop + wrapZBack;
1407 return p[0] * 2 + tsetshift_[4] + (p[1] - 1) * tshift_[10]
1408 + (p[2] - 1) * tshift_[11] + 1 + wrapYTop + wrapZBack;
1410 return p[0] * 2 + (p[1] - 1) * tshift_[0] + p[2] * tshift_[1] + wrapYTop;
1412 return p[0] * 2 + (p[1] - 1) * tshift_[0] + p[2] * tshift_[1] + 1
1415 return p[0] * 2 + tsetshift_[0] + p[1] * tshift_[2]
1416 + (p[2] - 1) * tshift_[3] + wrapZBack;
1418 return p[0] * 2 + tsetshift_[0] + p[1] * tshift_[2]
1419 + (p[2] - 1) * tshift_[3] + 1 + wrapZBack;
1421 return (p[0] - 1) * 2 + (p[1] - 1) * tshift_[0] + p[2] * tshift_[1] + 1
1422 + wrapXLeft + wrapYTop;
1424 return tsetshift_[2] + (p[0] - 1) * 2 + (p[1] - 1) * tshift_[6]
1425 + p[2] * tshift_[7] + wrapXLeft + wrapYTop;
1427 return tsetshift_[1] + p[0] * 2 + (p[1] - 1) * tshift_[4]
1428 + p[2] * tshift_[5] + wrapYTop;
1430 return p[0] * 2 + tsetshift_[2] + p[1] * tshift_[6]
1431 + (p[2] - 1) * tshift_[7] + 1 + wrapZBack;
1433 return p[0] * 2 + tsetshift_[1] + p[1] * tshift_[4]
1434 + (p[2] - 1) * tshift_[5] + 1 + wrapZBack;
1436 return p[0] * 2 + p[1] * tshift_[0] + p[2] * tshift_[1];
1438 return tsetshift_[3] + (p[0] - 1) * 2 + (p[1] - 1) * tshift_[8]
1439 + (p[2] - 1) * tshift_[9] + 1 + wrapXLeft + wrapYTop + wrapZBack;
1441 return tsetshift_[0] + (p[0] - 1) * 2 + p[1] * tshift_[2]
1442 + (p[2] - 1) * tshift_[3] + 1 + wrapXLeft + wrapZBack;
1444 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2] + p[2] * tshift_[3];
1446 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9];
1448 return tsetshift_[4] + (p[0] - 1) * 2 + p[1] * tshift_[10]
1449 + (p[2] - 1) * tshift_[11] + 1 + wrapXLeft + wrapZBack;
1451 return p[0] * 2 + tsetshift_[4] + (p[1] - 1) * tshift_[10]
1452 + p[2] * tshift_[11] + wrapYTop;
1458 ttk::PeriodicImplicitTriangulation::getVertexStar3d(
const SimplexId p[3],
1459 const int id)
const {
1464 wrapXLeft = 6 * wrap_[0];
1466 wrapYTop = 6 * wrap_[1];
1468 wrapZBack = 6 * wrap_[2];
1471 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1]
1474 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 1
1477 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 2
1480 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 3
1483 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 4
1486 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 5
1489 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1490 + wrapYTop + wrapZBack;
1492 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1493 + 1 + wrapYTop + wrapZBack;
1495 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1496 + 2 + wrapYTop + wrapZBack;
1498 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1499 + 3 + wrapYTop + wrapZBack;
1501 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1502 + 4 + wrapYTop + wrapZBack;
1504 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1505 + 5 + wrapYTop + wrapZBack;
1507 return p[0] * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1];
1509 return p[0] * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 2;
1511 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + p[2] * tetshift_[1]
1514 return p[0] * 6 + (p[1] - 1) * tetshift_[0] + p[2] * tetshift_[1] + 1
1517 return (p[0] - 1) * 6 + (p[1] - 1) * tetshift_[0] + p[2] * tetshift_[1]
1518 + 1 + wrapXLeft + wrapYTop;
1520 return (p[0] - 1) * 6 + (p[1] - 1) * tetshift_[0] + p[2] * tetshift_[1]
1521 + 5 + wrapXLeft + wrapYTop;
1523 return p[0] * 6 + p[1] * tetshift_[0] + (p[2] - 1) * tetshift_[1] + 2
1526 return p[0] * 6 + p[1] * tetshift_[0] + (p[2] - 1) * tetshift_[1] + 3
1529 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1530 + 3 + wrapXLeft + wrapZBack;
1532 return (p[0] - 1) * 6 + p[1] * tetshift_[0] + (p[2] - 1) * tetshift_[1]
1533 + 4 + wrapXLeft + wrapZBack;
1535 return (p[0] - 1) * 6 + (p[1] - 1) * tetshift_[0]
1536 + (p[2] - 1) * tetshift_[1] + 4 + wrapXLeft + wrapYTop + wrapZBack;
1538 return (p[0] - 1) * 6 + (p[1] - 1) * tetshift_[0]
1539 + (p[2] - 1) * tetshift_[1] + 5 + wrapXLeft + wrapYTop + wrapZBack;
1545 ttk::PeriodicImplicitTriangulation::getEdgeTriangle3dL(
const SimplexId p[3],
1546 const int id)
const {
1550 wrapYTop = 2 * wrap_[1];
1552 wrapZBack = 2 * wrap_[2];
1555 return p[0] * 2 + (p[1] - 1) * tshift_[0] + p[2] * tshift_[1] + 1
1558 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2] + p[2] * tshift_[3];
1560 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2]
1561 + (p[2] - 1) * tshift_[3] + 1 + wrapZBack;
1563 return tsetshift_[3] + p[0] * 2 + (p[1] - 1) * tshift_[8]
1564 + (p[2] - 1) * tshift_[9] + 1 + wrapYTop + wrapZBack;
1566 return p[0] * 2 + p[1] * tshift_[0] + p[2] * tshift_[1];
1568 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9];
1574 ttk::PeriodicImplicitTriangulation::getEdgeTriangle3dH(
const SimplexId p[3],
1575 const int id)
const {
1579 wrapXLeft = 2 * wrap_[0];
1581 wrapZBack = 2 * wrap_[2];
1584 return (p[0] - 1) * 2 + p[1] * tshift_[0] + p[2] * tshift_[1] + 1
1587 return tsetshift_[2] + (p[0] - 1) * 2 + p[1] * tshift_[6]
1588 + p[2] * tshift_[7] + wrapXLeft;
1590 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5];
1592 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4]
1593 + (p[2] - 1) * tshift_[5] + 1 + wrapZBack;
1595 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6]
1596 + (p[2] - 1) * tshift_[7] + 1 + wrapZBack;
1598 return p[0] * 2 + p[1] * tshift_[0] + p[2] * tshift_[1];
1604 ttk::PeriodicImplicitTriangulation::getEdgeTriangle3dP(
const SimplexId p[3],
1605 const int id)
const {
1609 wrapXLeft = 2 * wrap_[0];
1611 wrapYTop = 2 * wrap_[1];
1614 return tsetshift_[0] + (p[0] - 1) * 2 + p[1] * tshift_[2]
1615 + p[2] * tshift_[3] + 1 + wrapXLeft;
1617 return tsetshift_[4] + (p[0] - 1) * 2 + p[1] * tshift_[10]
1618 + p[2] * tshift_[11] + 1 + wrapXLeft;
1620 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5]
1623 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2] + p[2] * tshift_[3];
1625 return tsetshift_[4] + p[0] * 2 + (p[1] - 1) * tshift_[10]
1626 + p[2] * tshift_[11] + wrapYTop;
1628 return tsetshift_[1] + p[0] * 2 + (p[1] - 1) * tshift_[4]
1629 + p[2] * tshift_[5] + wrapYTop;
1635 ttk::PeriodicImplicitTriangulation::getEdgeTriangle3dD1(
const SimplexId p[3],
1636 const int id)
const {
1639 wrapZBack = 2 * wrap_[2];
1642 return p[0] * 2 + p[1] * tshift_[0] + p[2] * tshift_[1];
1644 return p[0] * 2 + p[1] * tshift_[0] + p[2] * tshift_[1] + 1;
1646 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11];
1648 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10]
1649 + (p[2] - 1) * tshift_[11] + 1 + wrapZBack;
1655 ttk::PeriodicImplicitTriangulation::getEdgeTriangle3dD2(
const SimplexId p[3],
1656 const int id)
const {
1659 wrapXLeft = 2 * wrap_[0];
1662 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5];
1664 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5]
1667 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9];
1669 return tsetshift_[3] + (p[0] - 1) * 2 + p[1] * tshift_[8]
1670 + p[2] * tshift_[9] + 1 + wrapXLeft;
1676 ttk::PeriodicImplicitTriangulation::getEdgeTriangle3dD3(
const SimplexId p[3],
1677 const int id)
const {
1680 wrapYTop = 2 * wrap_[1];
1683 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2] + p[2] * tshift_[3];
1685 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2] + p[2] * tshift_[3]
1688 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7]
1691 return tsetshift_[2] + p[0] * 2 + (p[1] - 1) * tshift_[6]
1692 + p[2] * tshift_[7] + wrapYTop;
1698 ttk::PeriodicImplicitTriangulation::getEdgeTriangle3dD4(
const SimplexId p[3],
1699 const int id)
const {
1702 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7];
1704 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7]
1707 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9];
1709 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9]
1712 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11];
1714 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11]
1721 ttk::PeriodicImplicitTriangulation::getEdgeLinkL(
const SimplexId p[3],
1722 const int id)
const {
1728 if(p[0] == nbvoxels_[0])
1729 wrapXRight = -wrap_[0];
1731 wrapYTop = wrap_[1];
1732 if(p[1] == nbvoxels_[1])
1733 wrapYBottom = -wrap_[1];
1735 wrapZBack = wrap_[2];
1736 if(p[2] == nbvoxels_[2])
1737 wrapZFront = -wrap_[2];
1740 return esetshift_[1] + p[0] + (p[1] + 1) * eshift_[4] + p[2] * eshift_[5]
1743 return esetshift_[0] + p[0] + p[1] * eshift_[2] + (p[2] + 1) * eshift_[3]
1746 return esetshift_[5] + p[0] + (p[1] - 1) * eshift_[12]
1747 + p[2] * eshift_[13] + wrapYTop;
1749 return esetshift_[1] + p[0] + 1 + (p[1] - 1) * eshift_[4]
1750 + (p[2] - 1) * eshift_[5] + wrapXRight + wrapYTop + wrapZBack;
1752 return esetshift_[0] + p[0] + 1 + (p[1] - 1) * eshift_[2]
1753 + (p[2] - 1) * eshift_[3] + wrapXRight + wrapYTop + wrapZBack;
1755 return esetshift_[5] + p[0] + p[1] * eshift_[12]
1756 + (p[2] - 1) * eshift_[13] + wrapZBack;
1762 ttk::PeriodicImplicitTriangulation::getEdgeLinkH(
const SimplexId p[3],
1763 const int id)
const {
1770 wrapXLeft = wrap_[0];
1771 if(p[0] == nbvoxels_[0])
1772 wrapXRight = -wrap_[0];
1773 if(p[1] == nbvoxels_[1])
1774 wrapYBottom = -wrap_[1];
1776 wrapZBack = wrap_[2];
1777 if(p[2] == nbvoxels_[2])
1778 wrapZFront = -wrap_[2];
1781 return p[0] + p[1] * eshift_[0] + (p[2] - 1) * eshift_[1] + wrapZBack;
1783 return p[0] + (p[1] + 1) * eshift_[0] + (p[2] + 1) * eshift_[1] - 1
1784 + wrapXLeft + wrapYBottom + wrapZFront;
1786 return esetshift_[1] + p[0] - 1 + (p[1] + 1) * eshift_[4]
1787 + p[2] * eshift_[5] + wrapXLeft + wrapYBottom;
1789 return esetshift_[1] + p[0] + 1 + p[1] * eshift_[4]
1790 + (p[2] - 1) * eshift_[5] + wrapXRight + wrapZBack;
1792 return esetshift_[5] + (p[0] - 1) + p[1] * eshift_[12]
1793 + (p[2] - 1) * eshift_[13] + wrapXLeft + wrapZBack;
1795 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
1801 ttk::PeriodicImplicitTriangulation::getEdgeLinkP(
const SimplexId p[3],
1802 const int id)
const {
1809 wrapXLeft = wrap_[0];
1810 if(p[0] == nbvoxels_[0])
1811 wrapXRight = -wrap_[0];
1813 wrapYTop = wrap_[1];
1814 if(p[1] == nbvoxels_[1])
1815 wrapYBottom = -wrap_[1];
1816 if(p[2] == nbvoxels_[2])
1817 wrapZFront = -wrap_[2];
1820 return p[0] + (p[1] - 1) * eshift_[0] + p[2] * eshift_[1] + wrapYTop;
1822 return p[0] + (p[1] + 1) * eshift_[0] + (p[2] + 1) * eshift_[1] - 1
1823 + wrapXLeft + wrapYBottom + wrapZFront;
1825 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
1827 return esetshift_[5] + p[0] + (p[1] - 1) * eshift_[12]
1828 + p[2] * eshift_[13] - 1 + wrapXLeft + wrapYTop;
1830 return esetshift_[0] + p[0] + p[1] * eshift_[2] + (p[2] + 1) * eshift_[3]
1831 - 1 + wrapXLeft + wrapZFront;
1833 return esetshift_[0] + p[0] + (p[1] - 1) * eshift_[2] + p[2] * eshift_[3]
1834 + 1 + wrapXRight + wrapYTop;
1840 ttk::PeriodicImplicitTriangulation::getEdgeLinkD1(
const SimplexId p[3],
1841 const int id)
const {
1845 if(p[0] == nbvoxels_[0])
1846 wrapXRight = -wrap_[0];
1847 if(p[1] == nbvoxels_[1])
1848 wrapYBottom = -wrap_[1];
1850 wrapZBack = wrap_[2];
1853 return esetshift_[4] + p[0] + p[1] * eshift_[10]
1854 + (p[2] - 1) * eshift_[11] + wrapZBack;
1856 return esetshift_[4] + p[0] + (p[1] + 1) * eshift_[10]
1857 + p[2] * eshift_[11] + wrapYBottom;
1859 return esetshift_[3] + p[0] + p[1] * eshift_[8] + p[2] * eshift_[9];
1861 return esetshift_[3] + p[0] + p[1] * eshift_[8] + (p[2] - 1) * eshift_[9]
1862 + 1 + wrapXRight + wrapZBack;
1868 ttk::PeriodicImplicitTriangulation::getEdgeLinkD2(
const SimplexId p[3],
1869 const int id)
const {
1874 wrapXLeft = wrap_[0];
1875 if(p[1] == nbvoxels_[1])
1876 wrapYBottom = -wrap_[1];
1877 if(p[2] == nbvoxels_[2])
1878 wrapZFront = -wrap_[2];
1881 return esetshift_[4] + p[0] + p[1] * eshift_[10] + p[2] * eshift_[11];
1883 return esetshift_[4] + p[0] + (p[1] + 1) * eshift_[10]
1884 + p[2] * eshift_[11] - 1 + wrapXLeft + wrapYBottom;
1886 return esetshift_[2] + p[0] + p[1] * eshift_[6] + p[2] * eshift_[7];
1888 return esetshift_[2] + p[0] + p[1] * eshift_[6] + (p[2] + 1) * eshift_[7]
1889 - 1 + wrapXLeft + wrapZFront;
1895 ttk::PeriodicImplicitTriangulation::getEdgeLinkD3(
const SimplexId p[3],
1896 const int id)
const {
1900 if(p[0] == nbvoxels_[0])
1901 wrapXRight = -wrap_[0];
1903 wrapYTop = wrap_[1];
1904 if(p[2] == nbvoxels_[2])
1905 wrapZFront = -wrap_[2];
1908 return esetshift_[2] + p[0] + (p[1] - 1) * eshift_[6] + p[2] * eshift_[7]
1911 return esetshift_[2] + p[0] + p[1] * eshift_[6] + (p[2] + 1) * eshift_[7]
1914 return esetshift_[3] + p[0] + p[1] * eshift_[8] + p[2] * eshift_[9];
1916 return esetshift_[3] + p[0] + (p[1] - 1) * eshift_[8] + p[2] * eshift_[9]
1917 + 1 + wrapXRight + wrapYTop;
1923 ttk::PeriodicImplicitTriangulation::getEdgeLinkD4(
const SimplexId p[3],
1924 const int id)
const {
1928 if(p[0] == nbvoxels_[0])
1929 wrapXRight = -wrap_[0];
1930 if(p[1] == nbvoxels_[1])
1931 wrapYBottom = -wrap_[1];
1932 if(p[2] == nbvoxels_[2])
1933 wrapZFront = -wrap_[2];
1936 return p[0] + (p[1] + 1) * eshift_[0] + p[2] * eshift_[1] + wrapYBottom;
1938 return p[0] + p[1] * eshift_[0] + (p[2] + 1) * eshift_[1] + wrapZFront;
1940 return esetshift_[1] + p[0] + p[1] * eshift_[4] + p[2] * eshift_[5];
1942 return esetshift_[1] + p[0] + 1 + (p[1] + 1) * eshift_[4]
1943 + p[2] * eshift_[5] + wrapXRight + wrapYBottom;
1945 return esetshift_[0] + p[0] + p[1] * eshift_[2] + p[2] * eshift_[3];
1947 return esetshift_[0] + p[0] + 1 + p[1] * eshift_[2]
1948 + (p[2] + 1) * eshift_[3] + wrapXRight + wrapZFront;
1954 ttk::PeriodicImplicitTriangulation::getEdgeStarL(
const SimplexId p[3],
1955 const int id)
const {
1959 wrapYTop = 6 * wrap_[1];
1961 wrapZBack = 6 * wrap_[2];
1964 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6;
1966 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 2;
1968 return p[2] * tetshift_[1] + (p[1] - 1) * tetshift_[0] + p[0] * 6 + 1
1971 return (p[2] - 1) * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 3
1974 return (p[2] - 1) * tetshift_[1] + (p[1] - 1) * tetshift_[0] + p[0] * 6
1975 + 4 + wrapYTop + wrapZBack;
1977 return (p[2] - 1) * tetshift_[1] + (p[1] - 1) * tetshift_[0] + p[0] * 6
1978 + 5 + wrapYTop + wrapZBack;
1984 ttk::PeriodicImplicitTriangulation::getEdgeStarH(
const SimplexId p[3],
1985 const int id)
const {
1989 wrapXLeft = 6 * wrap_[0];
1991 wrapZBack = 6 * wrap_[2];
1994 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6;
1996 return (p[2] - 1) * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 2
1999 return (p[2] - 1) * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 3
2002 return (p[2] - 1) * tetshift_[1] + p[1] * tetshift_[0] + (p[0] - 1) * 6
2003 + 4 + wrapXLeft + wrapZBack;
2005 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + (p[0] - 1) * 6 + 1
2008 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + (p[0] - 1) * 6 + 5
2015 ttk::PeriodicImplicitTriangulation::getEdgeStarP(
const SimplexId p[3],
2016 const int id)
const {
2020 wrapXLeft = 6 * wrap_[0];
2022 wrapYTop = 6 * wrap_[1];
2025 return p[2] * tetshift_[1] + (p[1] - 1) * tetshift_[0] + (p[0] - 1) * 6
2026 + 5 + wrapXLeft + wrapYTop;
2028 return p[2] * tetshift_[1] + (p[1] - 1) * tetshift_[0] + p[0] * 6
2031 return p[2] * tetshift_[1] + (p[1] - 1) * tetshift_[0] + p[0] * 6 + 1
2034 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 2;
2036 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + (p[0] - 1) * 6 + 3
2039 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + (p[0] - 1) * 6 + 4
2046 ttk::PeriodicImplicitTriangulation::getEdgeStarD1(
const SimplexId p[3],
2047 const int id)
const {
2050 wrapZBack = 6 * wrap_[2];
2053 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6;
2055 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 1;
2057 return (p[2] - 1) * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 3
2060 return (p[2] - 1) * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 4
2067 ttk::PeriodicImplicitTriangulation::getEdgeStarD2(
const SimplexId p[3],
2068 const int id)
const {
2071 wrapXLeft = 6 * wrap_[0];
2074 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6;
2076 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 2;
2078 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + (p[0] - 1) * 6 + 5
2081 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + (p[0] - 1) * 6 + 4
2088 ttk::PeriodicImplicitTriangulation::getEdgeStarD3(
const SimplexId p[3],
2089 const int id)
const {
2092 wrapYTop = 6 * wrap_[1];
2095 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 2;
2097 return p[2] * tetshift_[1] + p[1] * tetshift_[0] + p[0] * 6 + 3;
2099 return p[2] * tetshift_[1] + (p[1] - 1) * tetshift_[0] + p[0] * 6 + 1
2102 return p[2] * tetshift_[1] + (p[1] - 1) * tetshift_[0] + p[0] * 6 + 5
2109 ttk::PeriodicImplicitTriangulation::getTriangleVertexF(
const SimplexId p[3],
2110 const int id)
const {
2113 if(p[0] / 2 == nbvoxels_[0])
2114 wrapXRight = -wrap_[0];
2115 if(p[1] == nbvoxels_[1])
2116 wrapYBottom = -wrap_[1];
2120 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2123 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2126 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0] + 1
2127 + wrapXRight + wrapYBottom;
2132 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1];
2134 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2137 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2145 ttk::PeriodicImplicitTriangulation::getTriangleVertexH(
const SimplexId p[3],
2146 const int id)
const {
2149 if(p[0] / 2 == nbvoxels_[0])
2150 wrapXRight = -wrap_[0];
2151 if(p[2] == nbvoxels_[2])
2152 wrapZFront = -wrap_[2];
2156 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2159 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1] + 1
2160 + wrapXRight + wrapZFront;
2162 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2168 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1];
2170 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2173 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2181 ttk::PeriodicImplicitTriangulation::getTriangleVertexC(
const SimplexId p[3],
2182 const int id)
const {
2185 if(p[1] == nbvoxels_[1])
2186 wrapYBottom = -wrap_[1];
2187 if(p[2] == nbvoxels_[2])
2188 wrapZFront = -wrap_[2];
2192 return (p[0] / 2) + p[1] * vshift_[0] + p[2] * vshift_[1];
2194 return (p[0] / 2) + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2197 return (p[0] / 2) + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2198 + vshift_[0] + wrapYBottom + wrapZFront;
2203 return (p[0] / 2) + p[1] * vshift_[0] + p[2] * vshift_[1];
2205 return (p[0] / 2) + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2208 return (p[0] / 2) + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2209 + vshift_[0] + wrapYBottom + wrapZFront;
2216 ttk::PeriodicImplicitTriangulation::getTriangleVertexD1(
const SimplexId p[3],
2217 const int id)
const {
2221 if(p[0] / 2 == nbvoxels_[0])
2222 wrapXRight = -wrap_[0];
2223 if(p[1] == nbvoxels_[1])
2224 wrapYBottom = -wrap_[1];
2225 if(p[2] == nbvoxels_[2])
2226 wrapZFront = -wrap_[2];
2230 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2233 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2236 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2237 + vshift_[0] + wrapYBottom + wrapZFront;
2242 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2245 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0] + 1
2246 + wrapXRight + wrapYBottom;
2248 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2249 + vshift_[0] + wrapYBottom + wrapZFront;
2256 ttk::PeriodicImplicitTriangulation::getTriangleVertexD2(
const SimplexId p[3],
2257 const int id)
const {
2261 if(p[0] / 2 == nbvoxels_[0])
2262 wrapXRight = -wrap_[0];
2263 if(p[1] == nbvoxels_[1])
2264 wrapYBottom = -wrap_[1];
2265 if(p[2] == nbvoxels_[2])
2266 wrapZFront = -wrap_[2];
2270 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2273 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2274 + vshift_[1] + 1 + wrapXRight + wrapYBottom + wrapZFront;
2276 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2277 + vshift_[1] + wrapYBottom + wrapZFront;
2282 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1];
2284 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2287 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2288 + vshift_[1] + wrapYBottom + wrapZFront;
2295 ttk::PeriodicImplicitTriangulation::getTriangleVertexD3(
const SimplexId p[3],
2296 const int id)
const {
2300 if(p[0] / 2 == nbvoxels_[0])
2301 wrapXRight = -wrap_[0];
2302 if(p[1] == nbvoxels_[1])
2303 wrapYBottom = -wrap_[1];
2304 if(p[2] == nbvoxels_[2])
2305 wrapZFront = -wrap_[2];
2309 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2312 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1] + 1
2313 + wrapXRight + wrapZFront;
2315 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2316 + vshift_[1] + wrapYBottom + wrapZFront;
2321 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1
2324 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2327 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2328 + vshift_[1] + wrapYBottom + wrapZFront;
2335 ttk::PeriodicImplicitTriangulation::getTriangleEdgeF_0(
const SimplexId p[3],
2336 const int id)
const {
2339 return p[0] / 2 + p[1] * eshift_[0] + p[2] * eshift_[1];
2341 return esetshift_[0] + p[0] / 2 + p[1] * eshift_[2] + p[2] * eshift_[3];
2343 return esetshift_[2] + p[0] / 2 + p[1] * eshift_[6] + p[2] * eshift_[7];
2349 ttk::PeriodicImplicitTriangulation::getTriangleEdgeF_1(
const SimplexId p[3],
2350 const int id)
const {
2352 if(p[0] / 2 == nbvoxels_[0])
2353 wrapXRight = -wrap_[0];
2355 if(p[1] == nbvoxels_[1])
2356 wrapYBottom = -wrap_[1];
2359 return p[0] / 2 + (p[1] + 1) * eshift_[0] + p[2] * eshift_[1]
2362 return esetshift_[0] + p[0] / 2 + p[1] * eshift_[2] + p[2] * eshift_[3]
2365 return esetshift_[2] + p[0] / 2 + p[1] * eshift_[6] + p[2] * eshift_[7];
2371 ttk::PeriodicImplicitTriangulation::getTriangleEdgeH_0(
const SimplexId p[3],
2372 const int id)
const {
2375 return p[0] / 2 + p[1] * eshift_[0] + p[2] * eshift_[1];
2377 return esetshift_[1] + p[0] / 2 + p[1] * eshift_[4] + p[2] * eshift_[5];
2379 return esetshift_[4] + p[0] / 2 + p[1] * eshift_[10] + p[2] * eshift_[11];
2385 ttk::PeriodicImplicitTriangulation::getTriangleEdgeH_1(
const SimplexId p[3],
2386 const int id)
const {
2388 if(p[0] / 2 == nbvoxels_[0])
2389 wrapXRight = -wrap_[0];
2391 if(p[2] == nbvoxels_[2])
2392 wrapZFront = -wrap_[2];
2395 return p[0] / 2 + p[1] * eshift_[0] + (p[2] + 1) * eshift_[1]
2398 return esetshift_[1] + p[0] / 2 + p[1] * eshift_[4] + p[2] * eshift_[5]
2401 return esetshift_[4] + p[0] / 2 + p[1] * eshift_[10] + p[2] * eshift_[11];
2407 ttk::PeriodicImplicitTriangulation::getTriangleEdgeC_0(
const SimplexId p[3],
2408 const int id)
const {
2410 if(p[1] == nbvoxels_[1])
2411 wrapYBottom = -wrap_[1];
2414 return esetshift_[0] + p[0] / 2 + p[1] * eshift_[2] + p[2] * eshift_[3];
2416 return esetshift_[1] + p[0] / 2 + (p[1] + 1) * eshift_[4]
2417 + p[2] * eshift_[5] + wrapYBottom;
2419 return esetshift_[3] + p[0] / 2 + p[1] * eshift_[8] + p[2] * eshift_[9];
2425 ttk::PeriodicImplicitTriangulation::getTriangleEdgeC_1(
const SimplexId p[3],
2426 const int id)
const {
2428 if(p[2] == nbvoxels_[2])
2429 wrapZFront = -wrap_[2];
2432 return esetshift_[0] + p[0] / 2 + p[1] * eshift_[2]
2433 + (p[2] + 1) * eshift_[3] + wrapZFront;
2435 return esetshift_[1] + p[0] / 2 + p[1] * eshift_[4] + p[2] * eshift_[5];
2437 return esetshift_[3] + p[0] / 2 + p[1] * eshift_[8] + p[2] * eshift_[9];
2443 ttk::PeriodicImplicitTriangulation::getTriangleEdgeD1_0(
const SimplexId p[3],
2444 const int id)
const {
2446 if(p[0] / 2 == nbvoxels_[0])
2447 wrapXRight = -wrap_[0];
2449 if(p[1] == nbvoxels_[1])
2450 wrapYBottom = -wrap_[1];
2453 return esetshift_[0] + p[0] / 2 + p[1] * eshift_[2] + p[2] * eshift_[3]
2456 return esetshift_[4] + p[0] / 2 + (p[1] + 1) * eshift_[10]
2457 + p[2] * eshift_[11] + wrapYBottom;
2459 return esetshift_[5] + p[0] / 2 + p[1] * eshift_[12] + p[2] * eshift_[13];
2465 ttk::PeriodicImplicitTriangulation::getTriangleEdgeD1_1(
const SimplexId p[3],
2466 const int id)
const {
2468 if(p[2] == nbvoxels_[2])
2469 wrapZFront = -wrap_[2];
2472 return esetshift_[0] + p[0] / 2 + p[1] * eshift_[2]
2473 + (p[2] + 1) * eshift_[3] + wrapZFront;
2475 return esetshift_[4] + p[0] / 2 + p[1] * eshift_[10] + p[2] * eshift_[11];
2477 return esetshift_[5] + p[0] / 2 + p[1] * eshift_[12] + p[2] * eshift_[13];
2483 ttk::PeriodicImplicitTriangulation::getTriangleEdgeD2_0(
const SimplexId p[3],
2484 const int id)
const {
2487 return p[0] / 2 + p[1] * eshift_[0] + p[2] * eshift_[1];
2489 return esetshift_[3] + p[0] / 2 + p[1] * eshift_[8] + p[2] * eshift_[9];
2491 return esetshift_[5] + p[0] / 2 + p[1] * eshift_[12] + p[2] * eshift_[13];
2497 ttk::PeriodicImplicitTriangulation::getTriangleEdgeD2_1(
const SimplexId p[3],
2498 const int id)
const {
2502 if(p[0] / 2 == nbvoxels_[0])
2503 wrapXRight = -wrap_[0];
2504 if(p[1] == nbvoxels_[1])
2505 wrapYBottom = -wrap_[1];
2506 if(p[2] == nbvoxels_[2])
2507 wrapZFront = -wrap_[2];
2510 return p[0] / 2 + (p[1] + 1) * eshift_[0] + (p[2] + 1) * eshift_[1]
2511 + wrapYBottom + wrapZFront;
2513 return esetshift_[3] + p[0] / 2 + p[1] * eshift_[8] + p[2] * eshift_[9]
2516 return esetshift_[5] + p[0] / 2 + p[1] * eshift_[12] + p[2] * eshift_[13];
2522 ttk::PeriodicImplicitTriangulation::getTriangleEdgeD3_0(
const SimplexId p[3],
2523 const int id)
const {
2525 if(p[1] == nbvoxels_[1])
2526 wrapYBottom = -wrap_[1];
2529 return esetshift_[1] + p[0] / 2 + (p[1] + 1) * eshift_[4]
2530 + p[2] * eshift_[5] + wrapYBottom;
2532 return esetshift_[2] + p[0] / 2 + p[1] * eshift_[6] + p[2] * eshift_[7];
2534 return esetshift_[5] + p[0] / 2 + p[1] * eshift_[12] + p[2] * eshift_[13];
2540 ttk::PeriodicImplicitTriangulation::getTriangleEdgeD3_1(
const SimplexId p[3],
2541 const int id)
const {
2544 if(p[0] / 2 == nbvoxels_[0])
2545 wrapXRight = -wrap_[0];
2546 if(p[2] == nbvoxels_[2])
2547 wrapZFront = -wrap_[2];
2550 return esetshift_[1] + p[0] / 2 + p[1] * eshift_[4] + p[2] * eshift_[5]
2553 return esetshift_[2] + p[0] / 2 + p[1] * eshift_[6]
2554 + (p[2] + 1) * eshift_[7] + wrapZFront;
2556 return esetshift_[5] + p[0] / 2 + p[1] * eshift_[12] + p[2] * eshift_[13];
2562 ttk::PeriodicImplicitTriangulation::getTriangleLinkF(
const SimplexId p[3],
2563 const int id)
const {
2568 if(p[0] / 2 == nbvoxels_[0])
2569 wrapXRight = -wrap_[0];
2570 if(p[1] == nbvoxels_[1])
2571 wrapYBottom = -wrap_[1];
2573 wrapZBack = wrap_[2];
2574 if(p[2] == nbvoxels_[2])
2575 wrapZFront = -wrap_[2];
2578 return p[0] / 2 + (p[1] + 1) * vshift_[0] + (p[2] + 1) * vshift_[1]
2579 + wrapYBottom + wrapZFront;
2581 return p[0] / 2 + p[1] * vshift_[0] + (p[2] - 1) * vshift_[1] + 1
2582 + wrapXRight + wrapZBack;
2588 ttk::PeriodicImplicitTriangulation::getTriangleLinkH(
const SimplexId p[3],
2589 const int id)
const {
2594 if(p[0] / 2 == nbvoxels_[0])
2595 wrapXRight = -wrap_[0];
2597 wrapYTop = wrap_[1];
2598 if(p[1] == nbvoxels_[1])
2599 wrapYBottom = -wrap_[1];
2600 if(p[2] == nbvoxels_[2])
2601 wrapZFront = -wrap_[2];
2604 return p[0] / 2 + (p[1] + 1) * vshift_[0] + (p[2] + 1) * vshift_[1]
2605 + wrapYBottom + wrapZFront;
2607 return p[0] / 2 + (p[1] - 1) * vshift_[0] + p[2] * vshift_[1] + 1
2608 + wrapXRight + wrapYTop;
2614 ttk::PeriodicImplicitTriangulation::getTriangleLinkC(
const SimplexId p[3],
2615 const int id)
const {
2621 wrapXLeft = wrap_[0];
2622 if(p[0] / 2 == nbvoxels_[0])
2623 wrapXRight = -wrap_[0];
2624 if(p[1] == nbvoxels_[1])
2625 wrapYBottom = -wrap_[1];
2626 if(p[2] == nbvoxels_[2])
2627 wrapZFront = -wrap_[2];
2630 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1] + 1 + wrapXRight;
2632 return p[0] / 2 + (p[1] + 1) * vshift_[0] + (p[2] + 1) * vshift_[1] - 1
2633 + wrapXLeft + wrapYBottom + wrapZFront;
2639 ttk::PeriodicImplicitTriangulation::getTriangleLinkD1(
const SimplexId p[3],
2640 const int id)
const {
2644 if(p[0] / 2 == nbvoxels_[0])
2645 wrapXRight = -wrap_[0];
2646 if(p[1] == nbvoxels_[1])
2647 wrapYBottom = -wrap_[1];
2648 if(p[2] == nbvoxels_[2])
2649 wrapZFront = -wrap_[2];
2653 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1];
2655 return p[0] / 2 + p[1] * vshift_[0] + (p[2] + 1) * vshift_[1] + 1
2656 + wrapXRight + wrapZFront;
2661 return p[0] / 2 + (p[1] + 1) * vshift_[0] + p[2] * vshift_[1]
2664 return p[0] / 2 + (p[1] + 1) * vshift_[0] + (p[2] + 1) * vshift_[1] + 1
2665 + wrapXRight + wrapYBottom + wrapZFront;
2672 ttk::PeriodicImplicitTriangulation::getTriangleLinkD2(
const SimplexId p[3],
2673 const int id)
const {
2677 if(p[0] / 2 == nbvoxels_[0])
2678 wrapXRight = -wrap_[0];
2679 if(p[1] == nbvoxels_[1])
2680 wrapYBottom = -wrap_[1];
2681 if(p[2] == nbvoxels_[2])
2682 wrapZFront = -wrap_[2];
2686 return p[0] / 2 + (p[1] + 1) * vshift_[0] + p[2] * vshift_[1] + 1
2687 + wrapXRight + wrapYBottom;
2689 return p[0] / 2 + p[1] * vshift_[0] + (p[2] + 1) * vshift_[1] + 1
2690 + wrapXRight + wrapZFront;
2695 return p[0] / 2 + (p[1] + 1) * vshift_[0] + p[2] * vshift_[1]
2698 return p[0] / 2 + p[1] * vshift_[0] + (p[2] + 1) * vshift_[1]
2706 ttk::PeriodicImplicitTriangulation::getTriangleLinkD3(
const SimplexId p[3],
2707 const int id)
const {
2711 if(p[0] / 2 == nbvoxels_[0])
2712 wrapXRight = -wrap_[0];
2713 if(p[1] == nbvoxels_[1])
2714 wrapYBottom = -wrap_[1];
2715 if(p[2] == nbvoxels_[2])
2716 wrapZFront = -wrap_[2];
2720 return p[0] / 2 + p[1] * vshift_[0] + (p[2] + 1) * vshift_[1]
2723 return p[0] / 2 + (p[1] + 1) * vshift_[0] + (p[2] + 1) * vshift_[1] + 1
2724 + wrapXRight + wrapYBottom + wrapZFront;
2729 return p[0] / 2 + p[1] * vshift_[0] + p[2] * vshift_[1];
2731 return p[0] / 2 + (p[1] + 1) * vshift_[0] + p[2] * vshift_[1] + 1
2732 + wrapXRight + wrapYBottom;
2739 ttk::PeriodicImplicitTriangulation::getTriangleStarF(
const SimplexId p[3],
2740 const int id)
const {
2743 wrapZBack = 6 * wrap_[2];
2747 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 1;
2749 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + (p[2] - 1) * tetshift_[1]
2755 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1];
2757 return p[0] * 3 + p[1] * tetshift_[0] + (p[2] - 1) * tetshift_[1] + 3
2765 ttk::PeriodicImplicitTriangulation::getTriangleStarH(
const SimplexId p[3],
2766 const int id)
const {
2769 wrapYTop = 6 * wrap_[1];
2773 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 3;
2775 return (p[0] - 1) * 3 + (p[1] - 1) * tetshift_[0] + p[2] * tetshift_[1]
2781 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 2;
2783 return p[0] * 3 + (p[1] - 1) * tetshift_[0] + p[2] * tetshift_[1] + 1
2791 ttk::PeriodicImplicitTriangulation::getTriangleStarC(
const SimplexId p[3],
2792 const int id)
const {
2795 wrapXLeft = 6 * wrap_[0];
2799 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 2;
2801 return (p[0] / 2 - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1]
2807 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1];
2809 return (p[0] / 2 - 1) * 6 + p[1] * tetshift_[0] + p[2] * tetshift_[1]
2817 ttk::PeriodicImplicitTriangulation::getTriangleStarD1(
const SimplexId p[3],
2818 const int id)
const {
2822 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 2;
2824 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 3;
2829 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 1;
2831 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 5;
2838 ttk::PeriodicImplicitTriangulation::getTriangleStarD2(
const SimplexId p[3],
2839 const int id)
const {
2843 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 5;
2845 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 4;
2850 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1];
2852 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 2;
2859 ttk::PeriodicImplicitTriangulation::getTriangleStarD3(
const SimplexId p[3],
2860 const int id)
const {
2864 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 3;
2866 return (p[0] - 1) * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 4;
2871 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1];
2873 return p[0] * 3 + p[1] * tetshift_[0] + p[2] * tetshift_[1] + 1;
2880 ttk::PeriodicImplicitTriangulation::getTetrahedronVertexABCG(
2881 const SimplexId p[3],
const int id)
const {
2885 if(p[0] == nbvoxels_[0])
2886 wrapXRight = -wrap_[0];
2887 if(p[1] == nbvoxels_[1])
2888 wrapYBottom = -wrap_[1];
2889 if(p[2] == nbvoxels_[2])
2890 wrapZFront = -wrap_[2];
2893 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1];
2895 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + 1 + wrapXRight;
2897 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2900 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2901 + vshift_[1] + wrapYBottom + wrapZFront;
2907 ttk::PeriodicImplicitTriangulation::getTetrahedronVertexBCDG(
2908 const SimplexId p[3],
const int id)
const {
2912 if(p[0] == nbvoxels_[0])
2913 wrapXRight = -wrap_[0];
2914 if(p[1] == nbvoxels_[1])
2915 wrapYBottom = -wrap_[1];
2916 if(p[2] == nbvoxels_[2])
2917 wrapZFront = -wrap_[2];
2920 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + 1 + wrapXRight;
2922 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2925 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0] + 1
2926 + wrapXRight + wrapYBottom;
2928 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2929 + vshift_[1] + wrapYBottom + wrapZFront;
2935 ttk::PeriodicImplicitTriangulation::getTetrahedronVertexABEG(
2936 const SimplexId p[3],
const int id)
const {
2940 if(p[0] == nbvoxels_[0])
2941 wrapXRight = -wrap_[0];
2942 if(p[1] == nbvoxels_[1])
2943 wrapYBottom = -wrap_[1];
2944 if(p[2] == nbvoxels_[2])
2945 wrapZFront = -wrap_[2];
2948 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1];
2950 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + 1 + wrapXRight;
2952 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2955 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2956 + vshift_[1] + wrapYBottom + wrapZFront;
2962 ttk::PeriodicImplicitTriangulation::getTetrahedronVertexBEFG(
2963 const SimplexId p[3],
const int id)
const {
2967 if(p[0] == nbvoxels_[0])
2968 wrapXRight = -wrap_[0];
2969 if(p[1] == nbvoxels_[1])
2970 wrapYBottom = -wrap_[1];
2971 if(p[2] == nbvoxels_[2])
2972 wrapZFront = -wrap_[2];
2975 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + 1 + wrapXRight;
2977 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1]
2980 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1] + 1
2981 + wrapXRight + wrapZFront;
2983 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
2984 + vshift_[1] + wrapYBottom + wrapZFront;
2990 ttk::PeriodicImplicitTriangulation::getTetrahedronVertexBFGH(
2991 const SimplexId p[3],
const int id)
const {
2995 if(p[0] == nbvoxels_[0])
2996 wrapXRight = -wrap_[0];
2997 if(p[1] == nbvoxels_[1])
2998 wrapYBottom = -wrap_[1];
2999 if(p[2] == nbvoxels_[2])
3000 wrapZFront = -wrap_[2];
3003 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + 1 + wrapXRight;
3005 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[1] + 1
3006 + wrapXRight + wrapZFront;
3008 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
3009 + vshift_[1] + wrapYBottom + wrapZFront;
3011 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
3012 + vshift_[1] + 1 + wrapXRight + wrapYBottom + wrapZFront;
3018 ttk::PeriodicImplicitTriangulation::getTetrahedronVertexBDGH(
3019 const SimplexId p[3],
const int id)
const {
3023 if(p[0] == nbvoxels_[0])
3024 wrapXRight = -wrap_[0];
3025 if(p[1] == nbvoxels_[1])
3026 wrapYBottom = -wrap_[1];
3027 if(p[2] == nbvoxels_[2])
3028 wrapZFront = -wrap_[2];
3031 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + 1 + wrapXRight;
3033 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0] + 1
3034 + wrapXRight + wrapYBottom;
3036 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
3037 + vshift_[1] + wrapYBottom + wrapZFront;
3039 return p[0] + p[1] * vshift_[0] + p[2] * vshift_[1] + vshift_[0]
3040 + vshift_[1] + 1 + wrapXRight + wrapYBottom + wrapZFront;
3046 ttk::PeriodicImplicitTriangulation::getTetrahedronEdgeABCG(
3047 const SimplexId p[3],
const int id)
const {
3049 if(p[1] == nbvoxels_[1])
3050 wrapYBottom = -wrap_[1];
3053 return p[0] + p[1] * eshift_[0] + p[2] * eshift_[1];
3055 return esetshift_[0] + p[0] + p[1] * eshift_[2] + p[2] * eshift_[3];
3057 return esetshift_[1] + p[0] + (p[1] + 1) * eshift_[4] + p[2] * eshift_[5]
3060 return esetshift_[2] + p[0] + p[1] * eshift_[6] + p[2] * eshift_[7];
3062 return esetshift_[3] + p[0] + p[1] * eshift_[8] + p[2] * eshift_[9];
3064 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
3070 ttk::PeriodicImplicitTriangulation::getTetrahedronEdgeBCDG(
3071 const SimplexId p[3],
const int id)
const {
3074 if(p[0] == nbvoxels_[0])
3075 wrapXRight = -wrap_[0];
3076 if(p[1] == nbvoxels_[1])
3077 wrapYBottom = -wrap_[1];
3080 return p[0] + (p[1] + 1) * eshift_[0] + p[2] * eshift_[1] + wrapYBottom;
3082 return esetshift_[0] + (p[0] + 1) + p[1] * eshift_[2] + p[2] * eshift_[3]
3085 return esetshift_[1] + p[0] + (p[1] + 1) * eshift_[4] + p[2] * eshift_[5]
3088 return esetshift_[2] + p[0] + p[1] * eshift_[6] + p[2] * eshift_[7];
3090 return esetshift_[4] + p[0] + (p[1] + 1) * eshift_[10]
3091 + p[2] * eshift_[11] + wrapYBottom;
3093 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
3099 ttk::PeriodicImplicitTriangulation::getTetrahedronEdgeABEG(
3100 const SimplexId p[3],
const int id)
const {
3102 if(p[2] == nbvoxels_[2])
3103 wrapZFront = -wrap_[2];
3106 return p[0] + p[1] * eshift_[0] + p[2] * eshift_[1];
3108 return esetshift_[0] + p[0] + p[1] * eshift_[2] + (p[2] + 1) * eshift_[3]
3111 return esetshift_[1] + p[0] + p[1] * eshift_[4] + p[2] * eshift_[5];
3113 return esetshift_[3] + p[0] + p[1] * eshift_[8] + p[2] * eshift_[9];
3115 return esetshift_[4] + p[0] + p[1] * eshift_[10] + p[2] * eshift_[11];
3117 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
3123 ttk::PeriodicImplicitTriangulation::getTetrahedronEdgeBEFG(
3124 const SimplexId p[3],
const int id)
const {
3127 if(p[0] == nbvoxels_[0])
3128 wrapXRight = -wrap_[0];
3129 if(p[2] == nbvoxels_[2])
3130 wrapZFront = -wrap_[2];
3133 return p[0] + p[1] * eshift_[0] + (p[2] + 1) * eshift_[1] + wrapZFront;
3135 return esetshift_[0] + p[0] + p[1] * eshift_[2] + (p[2] + 1) * eshift_[3]
3138 return esetshift_[1] + (p[0] + 1) + p[1] * eshift_[4] + p[2] * eshift_[5]
3141 return esetshift_[2] + p[0] + p[1] * eshift_[6] + (p[2] + 1) * eshift_[7]
3144 return esetshift_[4] + p[0] + p[1] * eshift_[10] + p[2] * eshift_[11];
3146 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
3152 ttk::PeriodicImplicitTriangulation::getTetrahedronEdgeBFGH(
3153 const SimplexId p[3],
const int id)
const {
3157 if(p[0] == nbvoxels_[0])
3158 wrapXRight = -wrap_[0];
3159 if(p[1] == nbvoxels_[1])
3160 wrapYBottom = -wrap_[1];
3161 if(p[2] == nbvoxels_[2])
3162 wrapZFront = -wrap_[2];
3165 return p[0] + (p[1] + 1) * eshift_[0] + (p[2] + 1) * eshift_[1]
3166 + wrapYBottom + wrapZFront;
3168 return esetshift_[0] + (p[0] + 1) + p[1] * eshift_[2]
3169 + (p[2] + 1) * eshift_[3] + wrapXRight + wrapZFront;
3171 return esetshift_[1] + (p[0] + 1) + p[1] * eshift_[4] + p[2] * eshift_[5]
3174 return esetshift_[2] + p[0] + p[1] * eshift_[6] + (p[2] + 1) * eshift_[7]
3177 return esetshift_[3] + (p[0] + 1) + p[1] * eshift_[8] + p[2] * eshift_[9]
3180 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
3186 ttk::PeriodicImplicitTriangulation::getTetrahedronEdgeBDGH(
3187 const SimplexId p[3],
const int id)
const {
3191 if(p[0] == nbvoxels_[0])
3192 wrapXRight = -wrap_[0];
3193 if(p[1] == nbvoxels_[1])
3194 wrapYBottom = -wrap_[1];
3195 if(p[2] == nbvoxels_[2])
3196 wrapZFront = -wrap_[2];
3199 return p[0] + (p[1] + 1) * eshift_[0] + (p[2] + 1) * eshift_[1]
3200 + wrapYBottom + wrapZFront;
3202 return esetshift_[0] + (p[0] + 1) + p[1] * eshift_[2] + p[2] * eshift_[3]
3205 return esetshift_[1] + (p[0] + 1) + (p[1] + 1) * eshift_[4]
3206 + p[2] * eshift_[5] + wrapXRight + wrapYBottom;
3208 return esetshift_[3] + (p[0] + 1) + p[1] * eshift_[8] + p[2] * eshift_[9]
3211 return esetshift_[4] + p[0] + (p[1] + 1) * eshift_[10]
3212 + p[2] * eshift_[11] + wrapYBottom;
3214 return esetshift_[5] + p[0] + p[1] * eshift_[12] + p[2] * eshift_[13];
3220 ttk::PeriodicImplicitTriangulation::getTetrahedronTriangleABCG(
3221 const SimplexId p[3],
const int id)
const {
3224 return p[0] * 2 + p[1] * tshift_[0] + p[2] * tshift_[1];
3226 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5];
3228 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9];
3230 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11];
3236 ttk::PeriodicImplicitTriangulation::getTetrahedronTriangleBCDG(
3237 const SimplexId p[3],
const int id)
const {
3240 return p[0] * 2 + p[1] * tshift_[0] + p[2] * tshift_[1] + 1;
3242 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11];
3244 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7];
3246 return (p[1] < nbvoxels_[1])
3247 ? tsetshift_[0] + p[0] * 2 + (p[1] + 1) * tshift_[2]
3249 : tsetshift_[0] + p[0] * 2 + (p[1] + 1) * tshift_[2]
3250 + p[2] * tshift_[3] - wrap_[1] * 2;
3256 ttk::PeriodicImplicitTriangulation::getTetrahedronTriangleABEG(
3257 const SimplexId p[3],
const int id)
const {
3260 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2] + p[2] * tshift_[3];
3262 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9];
3264 return tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4] + p[2] * tshift_[5]
3267 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7]
3274 ttk::PeriodicImplicitTriangulation::getTetrahedronTriangleBEFG(
3275 const SimplexId p[3],
const int id)
const {
3278 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7]
3281 return tsetshift_[0] + p[0] * 2 + p[1] * tshift_[2] + p[2] * tshift_[3]
3284 return (p[2] < nbvoxels_[2])
3285 ? p[0] * 2 + p[1] * tshift_[0] + (p[2] + 1) * tshift_[1]
3286 : p[0] * 2 + p[1] * tshift_[0] + (p[2] + 1) * tshift_[1]
3289 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11]
3296 ttk::PeriodicImplicitTriangulation::getTetrahedronTriangleBFGH(
3297 const SimplexId p[3],
const int id)
const {
3300 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9]
3303 return tsetshift_[4] + p[0] * 2 + p[1] * tshift_[10] + p[2] * tshift_[11]
3306 return (p[0] < nbvoxels_[0])
3307 ? tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4]
3308 + p[2] * tshift_[5] + 3
3309 : tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4]
3310 + p[2] * tshift_[5] + 3 - wrap_[0] * 2;
3312 return (p[2] < nbvoxels_[2])
3313 ? p[0] * 2 + p[1] * tshift_[0] + (p[2] + 1) * tshift_[1] + 1
3314 : p[0] * 2 + p[1] * tshift_[0] + (p[2] + 1) * tshift_[1] + 1
3321 ttk::PeriodicImplicitTriangulation::getTetrahedronTriangleBDGH(
3322 const SimplexId p[3],
const int id)
const {
3325 return (p[0] < nbvoxels_[0])
3326 ? tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4]
3327 + p[2] * tshift_[5] + 2
3328 : tsetshift_[1] + p[0] * 2 + p[1] * tshift_[4]
3329 + p[2] * tshift_[5] + 2 - wrap_[0] * 2;
3331 return tsetshift_[2] + p[0] * 2 + p[1] * tshift_[6] + p[2] * tshift_[7];
3333 return tsetshift_[3] + p[0] * 2 + p[1] * tshift_[8] + p[2] * tshift_[9]
3336 return (p[1] < nbvoxels_[1])
3337 ? tsetshift_[0] + p[0] * 2 + (p[1] + 1) * tshift_[2]
3338 + p[2] * tshift_[3] + 1
3339 : tsetshift_[0] + p[0] * 2 + (p[1] + 1) * tshift_[2]
3340 + p[2] * tshift_[3] + 1 - wrap_[1] * 2;
3346 ttk::PeriodicImplicitTriangulation::getTetrahedronNeighborABCG(
3354 return p[0] > 0 ? t - 1 : t - 1 + wrap_[0] * 6;
3356 return p[2] > 0 ? t - tetshift_[1] + 3
3357 : t - tetshift_[1] + 3 + wrap_[2] * 6;
3363 ttk::PeriodicImplicitTriangulation::getTetrahedronNeighborBCDG(
3371 return p[2] > 0 ? t - tetshift_[1] + 3
3372 : t - tetshift_[1] + 3 + wrap_[2] * 6;
3374 return p[1] < nbvoxels_[1] ? t + tetshift_[0] + 1
3375 : t + tetshift_[0] + 1 - wrap_[1] * 6;
3381 ttk::PeriodicImplicitTriangulation::getTetrahedronNeighborABEG(
3389 return p[0] > 0 ? t - 4 : t - 4 + wrap_[0] * 6;
3391 return p[1] > 0 ? t - tetshift_[0] - 1
3392 : t - tetshift_[0] - 1 + wrap_[1] * 6;
3398 ttk::PeriodicImplicitTriangulation::getTetrahedronNeighborBEFG(
3406 return p[1] > 0 ? t - tetshift_[0] + 2
3407 : t - tetshift_[0] + 2 + wrap_[1] * 6;
3409 return p[2] < nbvoxels_[2] ? t + tetshift_[1] - 3
3410 : t + tetshift_[1] - 3 - wrap_[2] * 6;
3416 ttk::PeriodicImplicitTriangulation::getTetrahedronNeighborBFGH(
3424 return p[0] < nbvoxels_[0] ? t + 4 : t + 4 - wrap_[0] * 6;
3426 return p[2] < nbvoxels_[2] ? t + tetshift_[1] - 3
3427 : t + tetshift_[1] - 3 - wrap_[2] * 6;
3433 ttk::PeriodicImplicitTriangulation::getTetrahedronNeighborBDGH(
3441 return p[0] < nbvoxels_[0] ? t + 1 : t + 1 - wrap_[0] * 6;
3443 return p[1] < nbvoxels_[1] ? t + tetshift_[0] - 2
3444 : t + tetshift_[0] - 2 - wrap_[1] * 6;
#define TTK_TRIANGULATION_INTERNAL(NAME)
#define ttkNotUsed(x)
Mark function/method parameters that are not used in the function body at all.
virtual int getVertexPointInternal(const SimplexId &ttkNotUsed(vertexId), float &ttkNotUsed(x), float &ttkNotUsed(y), float &ttkNotUsed(z)) const
bool hasPreconditionedTriangles_
virtual int getCellVertexInternal(const SimplexId &ttkNotUsed(cellId), const int &ttkNotUsed(localVertexId), SimplexId &ttkNotUsed(vertexId)) const
virtual int getEdgeIncenter(SimplexId edgeId, float incenter[3]) const
SimplexId TTK_TRIANGULATION_INTERNAL() getEdgeStarNumber(const SimplexId &edgeId) const override
int TTK_TRIANGULATION_INTERNAL() getVertexStar(const SimplexId &vertexId, const int &localStarId, SimplexId &starId) const override
int getTetrahedronVertex(const SimplexId &tetId, const int &localVertexId, SimplexId &vertexId) const override
int getTetrahedronTriangle(const SimplexId &tetId, const int &id, SimplexId &triangleId) const override
int getTriangleVertexInternal(const SimplexId &triangleId, const int &localVertexId, SimplexId &vertexId) const override
int getEdgeVertexInternal(const SimplexId &edgeId, const int &localVertexId, SimplexId &vertexId) const override
virtual int getTetraIncenter(SimplexId tetraId, float incenter[3]) const
int TTK_TRIANGULATION_INTERNAL() getEdgeStar(const SimplexId &edgeId, const int &localStarId, SimplexId &starId) const override
int TTK_TRIANGULATION_INTERNAL() getVertexLink(const SimplexId &vertexId, const int &localLinkId, SimplexId &linkId) const override
int TTK_TRIANGULATION_INTERNAL() getVertexNeighbor(const SimplexId &vertexId, const int &localNeighborId, SimplexId &neighborId) const override
virtual int getTriangleIncenter(SimplexId triangleId, float incenter[3]) const
int getVertexTriangleInternal(const SimplexId &vertexId, const int &id, SimplexId &triangleId) const override
int getTriangleEdgeInternal(const SimplexId &triangleId, const int &id, SimplexId &edgeId) const override
int getTetrahedronNeighbor(const SimplexId &tetId, const int &localNeighborId, SimplexId &neighborId) const override
int getVertexEdgeInternal(const SimplexId &vertexId, const int &id, SimplexId &edgeId) const override
int TTK_TRIANGULATION_INTERNAL() getTriangleLink(const SimplexId &triangleId, const int &localLinkId, SimplexId &linkId) const override
SimplexId TTK_TRIANGULATION_INTERNAL() getTriangleStarNumber(const SimplexId &triangleId) const override
int TTK_TRIANGULATION_INTERNAL() getTriangleStar(const SimplexId &triangleId, const int &localStarId, SimplexId &starId) const override
int TTK_TRIANGULATION_INTERNAL() getVertexPoint(const SimplexId &vertexId, float &x, float &y, float &z) const override
SimplexId getEdgeTriangleNumberInternal(const SimplexId &edgeId) const override
int getEdgeTriangleInternal(const SimplexId &edgeId, const int &id, SimplexId &triangleId) const override
int TTK_TRIANGULATION_INTERNAL() getEdgeLink(const SimplexId &edgeId, const int &localLinkId, SimplexId &linkId) const override
int getTetrahedronEdge(const SimplexId &tetId, const int &id, SimplexId &edgeId) const override
int getTriangleNeighbor(const SimplexId &triangleId, const int &localNeighborId, SimplexId &neighborId) const override
TTK triangulation class for grids with periodic boundary conditions implemented in all directions.
virtual int preconditionTetrahedronsInternal()=0
SimplexId TTK_TRIANGULATION_INTERNAL() getTriangleLinkNumber(const SimplexId &triangleId) const override
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getEdgeLinks() override
int getTriangleNeighbors(std::vector< std::vector< SimplexId > > &neighbors)
virtual int getTetrahedronNeighbor(const SimplexId &tetId, const int &localNeighborId, SimplexId &neighborId) const =0
int TTK_TRIANGULATION_INTERNAL() getCellVertex(const SimplexId &cellId, const int &localVertexId, SimplexId &vertexId) const override
int getCellTriangleInternal(const SimplexId &cellId, const int &id, SimplexId &triangleId) const override
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getTriangleLinks() override
int setInputGrid(const float &xOrigin, const float &yOrigin, const float &zOrigin, const float &xSpacing, const float &ySpacing, const float &zSpacing, const SimplexId &xDim, const SimplexId &yDim, const SimplexId &zDim) override
const std::vector< std::vector< SimplexId > > * getTriangleEdgesInternal() override
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getTriangleStars() override
SimplexId TTK_TRIANGULATION_INTERNAL() getEdgeLinkNumber(const SimplexId &edgeId) const override
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getVertexLinks() override
int getTetrahedronNeighbors(std::vector< std::vector< SimplexId > > &neighbors)
SimplexId getVertexEdgeNumberInternal(const SimplexId &vertexId) const override
SimplexId getCellEdgeNumberInternal(const SimplexId &cellId) const override
const std::vector< std::array< SimplexId, 2 > > *TTK_TRIANGULATION_INTERNAL() getEdges() override
bool TTK_TRIANGULATION_INTERNAL() isTriangleOnBoundary(const SimplexId &triangleId) const override
int TTK_TRIANGULATION_INTERNAL() getDimensionality() const override
int getTetrahedronEdges(std::vector< std::vector< SimplexId > > &edges) const
bool TTK_TRIANGULATION_INTERNAL() isEdgeOnBoundary(const SimplexId &edgeId) const override
SimplexId getTriangleNeighborNumber(const SimplexId &triangleId) const
bool hasPreconditionedVerticesAndCells_
const std::array< ttk::SimplexId, 3 > & getGridDimensions() const override
SimplexId tetrahedronNumber_
virtual int getTetrahedronVertex(const SimplexId &tetId, const int &localVertexId, SimplexId &vertexId) const =0
SimplexId triangleNumber_
const std::vector< std::vector< SimplexId > > * getEdgeTrianglesInternal() override
SimplexId TTK_TRIANGULATION_INTERNAL() getNumberOfVertices() const override
int preconditionTrianglesInternal() override=0
SimplexId TTK_TRIANGULATION_INTERNAL() getCellVertexNumber(const SimplexId &cellId) const override
int preconditionEdgesInternal() override=0
virtual int getTriangleNeighbor(const SimplexId &triangleId, const int &localNeighborId, SimplexId &neighborId) const =0
int preconditionVerticesAndCells()
SimplexId TTK_TRIANGULATION_INTERNAL() getVertexStarNumber(const SimplexId &vertexId) const override
SimplexId TTK_TRIANGULATION_INTERNAL() getCellNeighborNumber(const SimplexId &cellId) const override
bool isPowerOfTwo(unsigned long long int v, unsigned long long int &r)
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getVertexStars() override
PeriodicImplicitTriangulation(const PeriodicImplicitTriangulation &)=default
virtual int getTetrahedronEdge(const SimplexId &tetId, const int &id, SimplexId &edgeId) const =0
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getEdgeStars() override
virtual int getTetrahedronTriangle(const SimplexId &tetId, const int &id, SimplexId &triangleId) const =0
PeriodicImplicitTriangulation & operator=(const PeriodicImplicitTriangulation &)=default
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getCellNeighbors() override
const std::vector< std::vector< SimplexId > > * getVertexEdgesInternal() override
~PeriodicImplicitTriangulation() override
SimplexId getTriangleEdgeNumberInternal(const SimplexId &ttkNotUsed(triangleId)) const override
PeriodicImplicitTriangulation & operator=(PeriodicImplicitTriangulation &&)=default
SimplexId getCellTriangleNumberInternal(const SimplexId &ttkNotUsed(cellId)) const override
PeriodicImplicitTriangulation()
const std::vector< std::array< SimplexId, 3 > > *TTK_TRIANGULATION_INTERNAL() getTriangles() override
SimplexId getVertexTriangleNumberInternal(const SimplexId &vertexId) const override
SimplexId TTK_TRIANGULATION_INTERNAL() getVertexLinkNumber(const SimplexId &vertexId) const override
int getTetrahedronTriangles(std::vector< std::vector< SimplexId > > &triangles) const
const std::vector< std::vector< SimplexId > > * getCellEdgesInternal() override
virtual int preconditionVerticesInternal()=0
int getCellEdgeInternal(const SimplexId &cellId, const int &id, SimplexId &edgeId) const override
SimplexId getNumberOfTrianglesInternal() const override
bool TTK_TRIANGULATION_INTERNAL() isVertexOnBoundary(const SimplexId &vertexId) const override
const std::vector< std::vector< SimplexId > > *TTK_TRIANGULATION_INTERNAL() getVertexNeighbors() override
SimplexId getTetrahedronNeighborNumber(const SimplexId &tetId) const
SimplexId TTK_TRIANGULATION_INTERNAL() getNumberOfCells() const override
SimplexId TTK_TRIANGULATION_INTERNAL() getVertexNeighborNumber(const SimplexId &vertexId) const override
int TTK_TRIANGULATION_INTERNAL() getCellNeighbor(const SimplexId &cellId, const int &localNeighborId, SimplexId &neighborId) const override
PeriodicImplicitTriangulation(PeriodicImplicitTriangulation &&)=default
const std::vector< std::vector< SimplexId > > * getCellTrianglesInternal() override
const std::vector< std::vector< SimplexId > > * getVertexTrianglesInternal() override
int preconditionCellsInternal()
bool isEmpty() const override
int getCellVTKIDInternal(const int &ttkId, int &vtkId) const override
SimplexId getNumberOfEdgesInternal() const override
RegularGridTriangulation is an abstract subclass of ttk::AbstractTriangulation that exposes a common ...
virtual void tetrahedronToPosition(const SimplexId tetrahedron, SimplexId p[3]) const =0
virtual void vertexToPosition(const SimplexId vertex, SimplexId p[3]) const =0
virtual void triangleToPosition2d(const SimplexId triangle, SimplexId p[2]) const =0
std::array< SimplexId, 3 > dimensions_
virtual void vertexToPosition2d(const SimplexId vertex, SimplexId p[2]) const =0
virtual void triangleToPosition(const SimplexId triangle, const int k, SimplexId p[3]) const =0
T distance(const T *p0, const T *p1, const int &dimension=3)
int SimplexId
Identifier type for simplices of any dimension.