MCPcopy Create free account
hub / github.com/alandefreitas/matplotplusplus / get_exit_edge

Method get_exit_edge

source/matplot/util/contourc.cpp:1134–1212  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1132 }
1133
1134 Edge QuadContourGenerator::get_exit_edge(const QuadEdge &quad_edge,
1135 Dir dir) const {
1136 assert(quad_edge.quad >= 0 && quad_edge.quad < _n &&
1137 "Quad index out of bounds");
1138 assert(quad_edge.edge != Edge::Edge_None && "Invalid edge");
1139
1140 const long &quad = quad_edge.quad;
1141 const Edge &edge = quad_edge.edge;
1142 if (EXISTS_ANY_CORNER(quad)) {
1143 // Corner directions are always left or right. A corner is a
1144 // triangle, entered via one edge so the other two edges are the
1145 // left and right ones.
1146 switch (edge) {
1147 case Edge::Edge_E:
1148 return (
1149 EXISTS_SE_CORNER(quad)
1150 ? (dir == Dir::Dir_Left ? Edge::Edge_S : Edge::Edge_NW)
1151 : (dir == Dir::Dir_Right ? Edge::Edge_N
1152 : Edge::Edge_SW));
1153 case Edge::Edge_N:
1154 return (
1155 EXISTS_NW_CORNER(quad)
1156 ? (dir == Dir::Dir_Right ? Edge::Edge_W : Edge::Edge_SE)
1157 : (dir == Dir::Dir_Left ? Edge::Edge_E
1158 : Edge::Edge_SW));
1159 case Edge::Edge_W:
1160 return (
1161 EXISTS_SW_CORNER(quad)
1162 ? (dir == Dir::Dir_Right ? Edge::Edge_S : Edge::Edge_NE)
1163 : (dir == Dir::Dir_Left ? Edge::Edge_N
1164 : Edge::Edge_SE));
1165 case Edge::Edge_S:
1166 return (
1167 EXISTS_SW_CORNER(quad)
1168 ? (dir == Dir::Dir_Left ? Edge::Edge_W : Edge::Edge_NE)
1169 : (dir == Dir::Dir_Right ? Edge::Edge_E
1170 : Edge::Edge_NW));
1171 case Edge::Edge_NE:
1172 return (dir == Dir::Dir_Left ? Edge::Edge_S : Edge::Edge_W);
1173 case Edge::Edge_NW:
1174 return (dir == Dir::Dir_Left ? Edge::Edge_E : Edge::Edge_S);
1175 case Edge::Edge_SW:
1176 return (dir == Dir::Dir_Left ? Edge::Edge_N : Edge::Edge_E);
1177 case Edge::Edge_SE:
1178 return (dir == Dir::Dir_Left ? Edge::Edge_W : Edge::Edge_N);
1179 default:
1180 assert(0 && "Invalid edge");
1181 return Edge::Edge_None;
1182 }
1183 } else {
1184 // A full quad has four edges, entered via one edge so that other
1185 // three edges correspond to left, straight and right directions.
1186 switch (edge) {
1187 case Edge::Edge_E:
1188 return (dir == Dir::Dir_Left
1189 ? Edge::Edge_S
1190 : (dir == Dir::Dir_Right ? Edge::Edge_N
1191 : Edge::Edge_W));

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected