LcdFont *LcdFontRenderClass::getFont(const char *family, const char *style, int size) { FTC_FaceID id=getFaceID(family, style); if (!id) return 0; return new LcdFont(framebuffer, this, id, size); }
void EFAFragment3D::removeInvalidEmbeddedNodes(std::map<unsigned int, EFANode *> & EmbeddedNodes) { // N.B. this method is only called before we update fragments // N.B. an embedded node is valid IF at least one of its host faces is exterior and has more than // 1 cuts // TODO: the invalid cases are generalized from 2D. The method may need improvements in 3D if (hasFaceWithOneCut()) { // build a local inverse map for all emb cut nodes in this fragment std::map<EFANode *, std::vector<EFAFace *>> emb_inverse_map; for (unsigned int i = 0; i < _faces.size(); ++i) { for (unsigned int j = 0; j < _faces[i]->numEdges(); ++j) { if (_faces[i]->getEdge(j)->hasIntersection()) { EFANode * emb_node = _faces[i]->getEdge(j)->getEmbeddedNode(0); emb_inverse_map[emb_node].push_back(_faces[i]); } } // i } // j // find all invalid embedded nodes std::vector<EFANode *> invalid_emb; std::map<EFANode *, std::vector<EFAFace *>>::iterator it; for (it = emb_inverse_map.begin(); it != emb_inverse_map.end(); ++it) { EFANode * emb_node = it->first; std::vector<EFAFace *> & emb_faces = it->second; if (emb_faces.size() != 2) EFAError("one embedded node must be owned by 2 faces"); unsigned int counter = 0; for (unsigned int i = 0; i < emb_faces.size(); ++i) { unsigned int face_id = getFaceID(emb_faces[i]); if (!isFaceInterior(face_id) && emb_faces[i]->hasIntersection()) counter += 1; // count the appropriate emb's faces } if (counter == 0) invalid_emb.push_back(emb_node); } // delete all invalid emb nodes for (unsigned int i = 0; i < invalid_emb.size(); ++i) { Efa::deleteFromMap(EmbeddedNodes, invalid_emb[i]); _host_elem->removeEmbeddedNode(invalid_emb[i], true); // also remove from neighbors } // i } }
float FontManager::getStrHeight(std::string face, float size, std::string text) { return getStrHeight(getFaceID(face), size, text); }
void FontManager::drawString(float x, float y, float z, std::string face, float size, std::string text) { drawString(x, y, z, getFaceID(face), size, text); }