if (num_loops == 1) { vID = new LWPntID[num_vertices]; if (num_vertices > 0) { pntID = new LWPntID[num_vertices]; std::vector vertices(num_vertices); SULoopGetVertices(face_loop, num_vertices, &vertices[0], &num_vertices); for (size_t i = 0; i < num_vertices; i++) { SUPoint3D su_point; SUVertexRef vertex_ref = vertices[i]; SUVertexGetPosition(vertex_ref, &su_point); x = su_point.x; y = su_point.y; z = su_point.z; // Apply transformations if (transforms.size() > 0){ size_t num_trans = transforms.size(); size_t tx = transforms.size(); for (size_t t = num_trans; t > 0; t--){ tx--; skptran->tran[0] = transforms[tx].values[0]; skptran->tran[1] = transforms[tx].values[1]; skptran->tran[2] = transforms[tx].values[2]; skptran->tran[3] = transforms[tx].values[3]; skptran->tran[4] = transforms[tx].values[4]; skptran->tran[5] = transforms[tx].values[5]; skptran->tran[6] = transforms[tx].values[6]; skptran->tran[7] = transforms[tx].values[7]; skptran->tran[8] = transforms[tx].values[8]; skptran->tran[9] = transforms[tx].values[9]; skptran->tran[10] = transforms[tx].values[10]; skptran->tran[11] = transforms[tx].values[11]; skptran->tran[12] = transforms[tx].values[12]; skptran->tran[13] = transforms[tx].values[13]; skptran->tran[14] = transforms[tx].values[14]; skptran->tran[15] = transforms[tx].values[15]; lwpos[0] = (x*skptran->tran[0]) + (y*skptran->tran[4]) + (z*skptran->tran[8]) + (w*skptran->tran[12]); lwpos[1] = (x*skptran->tran[1]) + (y*skptran->tran[5]) + (z*skptran->tran[9]) + (w*skptran->tran[13]); lwpos[2] = (x*skptran->tran[2]) + (y*skptran->tran[6]) + (z*skptran->tran[10]) + (w*skptran->tran[14]); w = (x*skptran->tran[3]) + (y*skptran->tran[7]) + (z*skptran->tran[11]) + (w*skptran->tran[15]); lwpos[0] /= w; lwpos[1] /= w; lwpos[2] /= w; x = 0; y = 0; z = 0; w = 1; x = lwpos[0]; y = lwpos[1]; z = lwpos[2]; w = 1; } } lwpos[0] = (x*lwtran->m10) + (y*lwtran->m11) + (z*lwtran->m12) + (w*lwtran->m13); lwpos[1] = (x*lwtran->m20) + (y*lwtran->m21) + (z*lwtran->m22) + (w*lwtran->m23); lwpos[2] = (x*lwtran->m30) + (y*lwtran->m31) + (z*lwtran->m32) + (w*lwtran->m33); w = (x*lwtran->m40) + (y*lwtran->m41) + (z*lwtran->m42) + (w*lwtran->m43); lwpos[0] /= w; lwpos[1] /= w; lwpos[2] /= w; lwpos[0] /= LWSCALE; lwpos[1] /= LWSCALE; lwpos[2] /= LWSCALE; if (!(pntID[i] = local->point(local->data, lwpos))) return 1; if (has_front_text){ SUUVQ uvq; if (SUUVHelperGetFrontUVQ(uv_helper, &su_point, &uvq) == SU_ERROR_NONE){ valarray[0] = uvq.u; valarray[1] = uvq.v; local->vmap(local->data, LWVMAP_TXUV, 2, vmapname.c_str()); local->vmapVal(local->data, pntID[i], valarray); } } } } }