+ else if (nodebox.type == NODEBOX_CONNECTED)
+ {
+ size_t boxes_size = boxes.size();
+ boxes_size += nodebox.fixed.size();
+ const auto &c = nodebox.getConnected();
+
+ if (neighbors & 1)
+ boxes_size += c.connect_top.size();
+ else
+ boxes_size += c.disconnected_top.size();
+
+ if (neighbors & 2)
+ boxes_size += c.connect_bottom.size();
+ else
+ boxes_size += c.disconnected_bottom.size();
+
+ if (neighbors & 4)
+ boxes_size += c.connect_front.size();
+ else
+ boxes_size += c.disconnected_front.size();
+
+ if (neighbors & 8)
+ boxes_size += c.connect_left.size();
+ else
+ boxes_size += c.disconnected_left.size();
+
+ if (neighbors & 16)
+ boxes_size += c.connect_back.size();
+ else
+ boxes_size += c.disconnected_back.size();
+
+ if (neighbors & 32)
+ boxes_size += c.connect_right.size();
+ else
+ boxes_size += c.disconnected_right.size();
+
+ if (neighbors == 0)
+ boxes_size += c.disconnected.size();
+
+ if (neighbors < 4)
+ boxes_size += c.disconnected_sides.size();
+
+ boxes.reserve(boxes_size);
+
+#define BOXESPUSHBACK(c) \
+ for (std::vector<aabb3f>::const_iterator \
+ it = (c).begin(); \
+ it != (c).end(); ++it) \
+ (boxes).push_back(*it);
+
+ BOXESPUSHBACK(nodebox.fixed);
+
+ if (neighbors & 1) {
+ BOXESPUSHBACK(c.connect_top);
+ } else {
+ BOXESPUSHBACK(c.disconnected_top);
+ }
+
+ if (neighbors & 2) {
+ BOXESPUSHBACK(c.connect_bottom);
+ } else {
+ BOXESPUSHBACK(c.disconnected_bottom);
+ }
+
+ if (neighbors & 4) {
+ BOXESPUSHBACK(c.connect_front);
+ } else {
+ BOXESPUSHBACK(c.disconnected_front);
+ }
+
+ if (neighbors & 8) {
+ BOXESPUSHBACK(c.connect_left);
+ } else {
+ BOXESPUSHBACK(c.disconnected_left);
+ }
+
+ if (neighbors & 16) {
+ BOXESPUSHBACK(c.connect_back);
+ } else {
+ BOXESPUSHBACK(c.disconnected_back);
+ }
+
+ if (neighbors & 32) {
+ BOXESPUSHBACK(c.connect_right);
+ } else {
+ BOXESPUSHBACK(c.disconnected_right);
+ }
+
+ if (neighbors == 0) {
+ BOXESPUSHBACK(c.disconnected);
+ }
+
+ if (neighbors < 4) {
+ BOXESPUSHBACK(c.disconnected_sides);
+ }
+
+ }