+ int plane = MTL_MIRROR_AUTO;
+
+ struct ts_attr *aplane = ts_get_attr(cn, "plane");
+ if(aplane) {
+ if(aplane->val.type == TS_NUMBER) {
+ plane = MTL_MIRROR_AABB_PX + aplane->val.inum;
+ } else {
+ char csign, caxis;
+ if(sscanf(aplane->val.str, "aabb%c%c", &csign, &caxis) != 2 || (csign != '+' && csign != '-')) {
+ error_log("invalid reflect plane specifier: %s\n", aplane->val.str);
+ continue;
+ }
+
+ switch(tolower(caxis)) {
+ case 'x':
+ plane = csign == '+' ? MTL_MIRROR_AABB_PX : MTL_MIRROR_AABB_NX;
+ break;
+ case 'y':
+ plane = csign == '+' ? MTL_MIRROR_AABB_PY : MTL_MIRROR_AABB_NY;
+ break;
+ case 'z':
+ plane = csign == '+' ? MTL_MIRROR_AABB_PZ : MTL_MIRROR_AABB_NZ;
+ break;
+ default:
+ error_log("invalid reflect plane specifier: %s\n", aplane->val.str);
+ continue;
+ }
+ }
+ }