void PolyMolecule::computeNormals() { m_FaceNormals.fill(vec3_t(0,0,0), m_Faces.size()); m_NodeNormals.fill(vec3_t(0,0,0), m_Nodes.size()); for (int i = 0; i < m_Faces.size(); ++i) { QVector<vec3_t> x(m_Faces[i].size() + 1); vec3_t x_face(0,0,0); for (int j = 0; j < m_Faces[i].size(); ++j) { x[j] = getXNode(m_Faces[i][j]); x_face += x[j]; } x.last() = x.first(); x_face *= 1.0/m_Faces[i].size(); m_FaceNormals[i] = vec3_t(0,0,0); for (int j = 0; j < m_Faces[i].size(); ++j) { m_FaceNormals[i] += triNormal(x_face, x[j], x[j+1]); } for (int j = 0; j < m_Faces[i].size(); ++j) { vec3_t n = m_FaceNormals[i]; //n.normalise(); m_NodeNormals[m_Faces[i][j]] += n; } } for (int i = 0; i < m_Nodes.size(); ++i) { m_NodeNormals[i].normalise(); } }
static void x_analyze(x_display *xdpy, int fam) { int i, j, n, face, pixsize, nsizes; char *name; if (tmp_fonts) tmp_free(); tmp_fonts = XListFonts(xdpy->dpy, pattern[((unsigned int)fam)>>2], 1024, &n); for (i=0 ; i<n ; i++) { name = x_face(tmp_fonts[i], &face); if (!name) continue; /* extract pixels field */ pixsize = 0; if (name[0]!='*') while (name[0] && name[0]>='0' && name[0]<='9') pixsize = 10*pixsize + *(name++) - '0'; else name++; if (name[0]!='-') continue; /* protect against superlong font names */ if (!pixsize && strlen(tmp_fonts[i])>120) continue; face += fam; nsizes = xdpy->available[face].nsizes; if (x_lookup(pixsize, xdpy->available[face].sizes, nsizes)) continue; if (nsizes%12==0) { int *sizes = xdpy->available[face].sizes; char **names = xdpy->available[face].names; xdpy->available[face].sizes = p_realloc(sizes, sizeof(int)*(nsizes+12)); if (!xdpy->available[face].sizes) { xdpy->available[face].sizes = sizes; return; } xdpy->available[face].names = p_realloc(names,sizeof(char*)*(nsizes+13)); if (!xdpy->available[face].names) { xdpy->available[face].names = names; return; } } j = x_insert(pixsize, xdpy->available[face].sizes, xdpy->available[face].names, nsizes); xdpy->available[face].nsizes++; if (pixsize) { xdpy->available[face].names[j] = p_strcpy(tmp_fonts[i]); } else { /* scalable font needs wildcard name */ char nm[128], *pnm = nm; int n = 7; name = tmp_fonts[i]; while (n--) while ((*(pnm++)= *(name++))!='-'); /* skip over pixels, points fields */ *(pnm++)= '*'; *(pnm++)= '-'; *(pnm++)= '*'; *(pnm++)= '-'; for (n=2 ; n-- ;) while (name[0] && *(name++)!='-'); /* copy hres, vres, spacing fields */ for (n=3 ; n-- ;) while (name[0] && (*(pnm++)= *(name++))!='-'); /* skip over average width field */ *(pnm++)= '*'; *(pnm++)= '-'; while (name[0] && *(name++)!='-'); /* copy remainder (character set fields) */ while ((*(pnm++)= *(name++))); xdpy->available[face].names[j] = p_strcpy(nm); } } tmp_free(); }