void PlnrExpVanderpauw::faces( DbsPlnr* dbsplnr , const ubigint refPlnrMDevice , const ubigint refSruAll , const ListPlnrMVertex& vtxs , const ListPlnrMLineguide& lgs , const ListPlnrMArcguide& ags , ListPlnrMFace& fces ) { vector<ubigint> strrefs; vector<string> fsrefs; vector<string> vsrefsstrs; vector<string> rtesstrs; vector<string> gsrefsstrs; vector<string> dirsstrs; strrefs.push_back(refSruAll); fsrefs.push_back("f0"); vsrefsstrs.push_back("v1; v2; v10;v9; v12;v11;v15;v16;v13;v14;v6; v5; v8; v7; v3; v4"); rtesstrs.push_back ("lgd;lgd;lgd;agd;lgd;lgd;lgd;agd;lgd;lgd;lgd;agd;lgd;lgd;lgd;agd"); gsrefsstrs.push_back("l8; l1; l9; a2; l2; l10;l3; a3; l9; l4; l8; a1; l3; l7; l2; a0"); dirsstrs.push_back ("fwd;fwd;bwd;fwd;bwd;fwd;fwd;fwd;bwd;bwd;fwd;fwd;fwd;bwd;bwd;fwd"); addFaces(dbsplnr, 0, strrefs, fsrefs, vsrefsstrs, rtesstrs, gsrefsstrs, dirsstrs, vtxs, lgs, ags, fces); };
//----------------------------------------------------------------------------- void VisibleBspLeavesSearch::enumVisibleBspLeaves(Bsp::NodeBase* _nodeBase, const size_t* _planeIndices) { CameraInfo::PlaneIndices planeIndices2; if(mCameraInfo->isVisibleBox(_nodeBase->getBoundingBoxCenter(), _nodeBase->getBoundingBoxHalfSize(), _planeIndices, planeIndices2)) { if(_nodeBase->isLeaf()) { Bsp::Leaf* leaf = static_cast<Bsp::Leaf*>(_nodeBase); /* bool found = false; for(size_t i = 0; i != mBsp->getNumSectors(); ++i) { const Bsp::Sector& sector = mBsp->getSector(1); const vector<Bsp::Leaf*>::type& leaves = sector.getVisibleLeaves(); if(std::find(leaves.begin(), leaves.end(), leaf) != leaves.end()) { found = true; break; } } if(found)*/ addFaces(leaf->getFirstFaceIndex(), leaf->getNumFaceIndices()); findVisibleSceneNodes(leaf, planeIndices2); } else { Bsp::Node* node = static_cast<Bsp::Node*>(_nodeBase); enumVisibleBspLeaves(node->getBack(), planeIndices2); enumVisibleBspLeaves(node->getFront(), planeIndices2); } } }
void PlnrExpWgbendneg::faces( DbsPlnr* dbsplnr , const ubigint refPlnrMDevice , const ubigint refSruAll , const ListPlnrMVertex& vtxs , const ListPlnrMLineguide& lgs , const ListPlnrMArcguide& ags , ListPlnrMFace& fces ) { vector<ubigint> strrefs; vector<string> fsrefs; vector<string> vsrefsstrs; vector<string> rtesstrs; vector<string> gsrefsstrs; vector<string> dirsstrs; strrefs.push_back(refSruAll); fsrefs.push_back("f0"); vsrefsstrs.push_back("vsw;vnw;v1; v3"); rtesstrs.push_back ("agd;lgd;agd;lgd"); gsrefsstrs.push_back("a1; l0; a0; l1"); dirsstrs.push_back ("fwd;bwd;bwd;fwd"); strrefs.push_back(refSruAll); fsrefs.push_back("f1"); vsrefsstrs.push_back("v4; v2; vne;vse"); rtesstrs.push_back ("agd;lgd;agd;lgd"); gsrefsstrs.push_back("a3; l0; a2; l1"); dirsstrs.push_back ("fwd;bwd;bwd;fwd"); addFaces(dbsplnr, 0, strrefs, fsrefs, vsrefsstrs, rtesstrs, gsrefsstrs, dirsstrs, vtxs, lgs, ags, fces); };
void FontContext::addFont(const FontDescription& _ft, alfons::InputSource _source) { // NB: Synchronize for calls from download thread std::lock_guard<std::mutex> lock(m_fontMutex); for (size_t i = 0; i < s_fontRasterSizes.size(); i++) { auto font = m_alfons.getFont(_ft.alias, s_fontRasterSizes[i]); font->addFace(m_alfons.addFontFace(_source, s_fontRasterSizes[i])); // add fallbacks from default font font->addFaces(*m_font[i]); } }
void ACIS_Internals::loadSAT(std::string fileName, GModel *gm) { FILE *f = Fopen (fileName.c_str(), "r"); if (!f){ return; } outcome prout = api_restore_entity_list(f,1,entities); if (!prout.ok()){ Msg::Error("Unable to load ACIS FILE %d",fileName.c_str()); fclose(f); return; } Msg::Info("ACIS FILE %d Loaded",fileName.c_str()); ENTITY *e; entities.init(); while((e = entities.next())){ // printf("an entity\n"); if (is_VERTEX(e)){ // printf("VERTEX FOUND\n"); } if (is_BODY(e)){ api_split_periodic_faces(e); { ENTITY_LIST vertex_list; outcome prout = api_get_vertices (e,vertex_list); addVertices (gm,vertex_list); printf("BODY COUNT %d !\n",vertex_list.count()); } { ENTITY_LIST edge_list; outcome prout = api_get_edges (e,edge_list); addEdges (gm,edge_list); printf("BODY COUNT %d !\n",edge_list.count()); } { ENTITY_LIST face_list; outcome prout = api_get_faces(e,face_list); addFaces (gm,face_list); printf("BODY COUNT %d !\n",face_list.count()); } } } }
void carveHole(GRegion *gr, int num, double distance, std::vector<int> &surfaces) { Msg::Info("Carving hole %d from surface %d at distance %g", num, surfaces[0], distance); GModel *m = gr->model(); // add all points from carving surfaces into kdtree int numnodes = 0; for(unsigned int i = 0; i < surfaces.size(); i++){ GFace *gf = m->getFaceByTag(surfaces[i]); if(!gf){ Msg::Error("Unknown carving surface %d", surfaces[i]); return; } numnodes += gf->mesh_vertices.size(); } ANNpointArray kdnodes = annAllocPts(numnodes, 3); int k = 0; for(unsigned int i = 0; i < surfaces.size(); i++){ GFace *gf = m->getFaceByTag(surfaces[i]); for(unsigned int j = 0; j < gf->mesh_vertices.size(); j++){ kdnodes[k][0] = gf->mesh_vertices[j]->x(); kdnodes[k][1] = gf->mesh_vertices[j]->y(); kdnodes[k][2] = gf->mesh_vertices[j]->z(); k++; } } ANNkd_tree *kdtree = new ANNkd_tree(kdnodes, numnodes, 3); // remove the volume elements that are within 'distance' of the // carved surface carveHole(gr->tetrahedra, distance, kdtree); carveHole(gr->hexahedra, distance, kdtree); carveHole(gr->prisms, distance, kdtree); carveHole(gr->pyramids, distance, kdtree); delete kdtree; annDeallocPts(kdnodes); // TODO: remove any interior elements left inside the carved surface // (could shoot a line from each element's barycenter and count // intersections o see who's inside) // generate discrete boundary mesh of the carved hole GFace *gf = m->getFaceByTag(num); if(!gf) return; std::set<MFace, Less_Face> faces; std::list<GFace*> f = gr->faces(); for(std::list<GFace*>::iterator it = f.begin(); it != f.end(); it++){ addFaces((*it)->triangles, faces); addFaces((*it)->quadrangles, faces); } addFaces(gr->tetrahedra, faces); addFaces(gr->hexahedra, faces); addFaces(gr->prisms, faces); addFaces(gr->pyramids, faces); std::set<MVertex*> verts; for(std::set<MFace, Less_Face>::iterator it = faces.begin(); it != faces.end(); it++){ for(int i = 0; i < it->getNumVertices(); i++){ it->getVertex(i)->setEntity(gf); verts.insert(it->getVertex(i)); } if(it->getNumVertices() == 3) gf->triangles.push_back(new MTriangle(it->getVertex(0), it->getVertex(1), it->getVertex(2))); else if(it->getNumVertices() == 4) gf->quadrangles.push_back(new MQuadrangle(it->getVertex(0), it->getVertex(1), it->getVertex(2), it->getVertex(3))); } }
std::shared_ptr<alfons::Font> FontContext::getFont(const std::string& _family, const std::string& _style, const std::string& _weight, float _size) { // Pick the smallest font that does not scale down too much float fontSize = s_fontRasterSizes.back(); size_t sizeIndex = s_fontRasterSizes.size() - 1; auto fontSizeItr = std::lower_bound(s_fontRasterSizes.begin(), s_fontRasterSizes.end(), _size); if (fontSizeItr != s_fontRasterSizes.end()) { fontSize = *fontSizeItr; sizeIndex = fontSizeItr - s_fontRasterSizes.begin(); } std::lock_guard<std::mutex> lock(m_fontMutex); auto font = m_alfons.getFont(FontDescription::Alias(_family, _style, _weight), fontSize); if (font->hasFaces()) { return font; } // First, try to load from the system fonts. bool useFallbackFont = false; auto systemFontHandle = m_platform->systemFont(_family, _weight, _style); alfons::InputSource source; switch (systemFontHandle.tag) { case FontSourceHandle::FontPath: source = alfons::InputSource(systemFontHandle.fontPath.path()); break; case FontSourceHandle::FontName: source = alfons::InputSource(systemFontHandle.fontName, true); break; case FontSourceHandle::FontLoader: { auto& loader = systemFontHandle.fontLoader; auto fontData = loader(); if (fontData.size() > 0) { source = alfons::InputSource(loader); } else { useFallbackFont = true; } break; } case FontSourceHandle::None: default: useFallbackFont = true; } if (!useFallbackFont) { font->addFace(m_alfons.addFontFace(source, fontSize)); if (m_font[sizeIndex]) { font->addFaces(*m_font[sizeIndex]); } } else { LOGD("Loading fallback font for Family: %s, Style: %s, Weight: %s, Size %f", _family.c_str(), _style.c_str(), _weight.c_str(), _size); // Add fallbacks from default font. if (m_font[sizeIndex]) { font->addFaces(*m_font[sizeIndex]); } } return font; }
void PlnrExpRtresneg::faces( DbsPlnr* dbsplnr , const ubigint x1RefPlnrMDesign , const ubigint refPlnrMDevice , const bool wg2 , const ubigint refSruAll , const ListPlnrMVertex& vtxs , const ListPlnrMLineguide& lgs , const ListPlnrMArcguide& ags , ListPlnrMFace& fces ) { vector<ubigint> strrefs; vector<string> fsrefs; vector<string> vsrefsstrs; vector<string> rtesstrs; vector<string> gsrefsstrs; vector<string> dirsstrs; strrefs.push_back(refSruAll); fsrefs.push_back("f0"); if (wg2) { vsrefsstrs.push_back("v7; v25;v17;v2; v3; v14;v22;v8"); rtesstrs.push_back ("lgd;agd;lgd;lgd;lgd;agd;lgd;lgd"); gsrefsstrs.push_back("l12;a3; l3; l17;l4; a2; l11;l17"); dirsstrs.push_back ("bwd;fwd;fwd;fwd;bwd;bwd;fwd;fwd"); } else { vsrefsstrs.push_back("v6; v21;v17;v2; v3; v14;v22;v8"); rtesstrs.push_back ("lgd;agd;lgd;lgd;lgd;agd;lgd;lgd"); gsrefsstrs.push_back("l13;a3; l3; l17;l4; a2; l11;l17"); dirsstrs.push_back ("bwd;fwd;fwd;fwd;bwd;bwd;fwd;fwd"); }; strrefs.push_back(refSruAll); fsrefs.push_back("f1"); vsrefsstrs.push_back("v9; v23;v15;v4; v5; v16;v24;v10"); rtesstrs.push_back ("lgd;agd;lgd;lgd;lgd;agd;lgd;lgd"); gsrefsstrs.push_back("l9; a1; l6; l17;l7; a0; l8; l17"); dirsstrs.push_back ("bwd;fwd;fwd;fwd;bwd;bwd;fwd;fwd"); strrefs.push_back(refSruAll); fsrefs.push_back("f2"); vsrefsstrs.push_back("v9; v10;v40;v32;v5; v4; v31;v39"); rtesstrs.push_back ("lgd;lgd;agd;lgd;lgd;lgd;agd;lgd"); gsrefsstrs.push_back("l17;l8; a4; l7; l17;l6; a5; l9"); dirsstrs.push_back ("bwd;fwd;bwd;bwd;bwd;fwd;fwd;fwd"); strrefs.push_back(refSruAll); fsrefs.push_back("f3"); if (wg2) { vsrefsstrs.push_back("v7; v8; v38;v30;v3; v2; v33;v41"); rtesstrs.push_back ("lgd;lgd;agd;lgd;lgd;lgd;agd;lgd"); gsrefsstrs.push_back("l17;l11;a6; l4; l17;l3; a7; l12"); dirsstrs.push_back ("bwd;fwd;bwd;bwd;bwd;fwd;fwd;fwd"); } else { vsrefsstrs.push_back("v6; v8; v38;v30;v3; v2; v33;v37"); rtesstrs.push_back ("lgd;lgd;agd;lgd;lgd;lgd;agd;lgd"); gsrefsstrs.push_back("l17;l11;a6; l4; l17;l3; a7; l13"); dirsstrs.push_back ("bwd;fwd;bwd;bwd;bwd;fwd;fwd;fwd"); }; strrefs.push_back(refSruAll); fsrefs.push_back("f4"); vsrefsstrs.push_back("vwg1nw;v20;v36;vwg1sw"); rtesstrs.push_back ("lgd; lgd;lgd;lgd"); gsrefsstrs.push_back("l16; l0; l18;l1"); dirsstrs.push_back ("bwd; fwd;fwd;bwd"); strrefs.push_back(refSruAll); fsrefs.push_back("f5"); vsrefsstrs.push_back("v18;v19;vwg1ne;v17"); rtesstrs.push_back ("lgd;lgd;lgd; agd"); gsrefsstrs.push_back("l5; l16;l3; a3"); dirsstrs.push_back ("bwd;bwd;fwd; bwd"); strrefs.push_back(refSruAll); fsrefs.push_back("f6"); vsrefsstrs.push_back("v34;v33;vwg1se;v35"); rtesstrs.push_back ("agd;lgd;lgd; lgd"); gsrefsstrs.push_back("a7; l3; l18; l5"); dirsstrs.push_back ("bwd;fwd;fwd; bwd"); if (wg2) { strrefs.push_back(refSruAll); fsrefs.push_back("f7"); vsrefsstrs.push_back("vwg2ne;v28;v44;vwg2se"); rtesstrs.push_back ("lgd; lgd;lgd;lgd"); gsrefsstrs.push_back("l16; l15;l18;l14"); dirsstrs.push_back ("fwd; fwd;bwd;bwd"); strrefs.push_back(refSruAll); fsrefs.push_back("f8"); vsrefsstrs.push_back("v25;vwg2nw;v27;v26"); rtesstrs.push_back ("lgd;lgd; lgd;agd"); gsrefsstrs.push_back("l12;l16; l10;a3"); dirsstrs.push_back ("bwd;bwd; fwd;bwd"); strrefs.push_back(refSruAll); fsrefs.push_back("f9"); vsrefsstrs.push_back("v41;v42;v43;vwg2sw"); rtesstrs.push_back ("agd;lgd;lgd;lgd"); gsrefsstrs.push_back("a7; l10;l18;l12"); dirsstrs.push_back ("bwd;fwd;fwd;bwd"); }; addFaces(dbsplnr, x1RefPlnrMDesign, strrefs, fsrefs, vsrefsstrs, rtesstrs, gsrefsstrs, dirsstrs, vtxs, lgs, ags, fces); };
void PlnrExpCorner::faces( DbsPlnr* dbsplnr , const ubigint x1RefPlnrMDesign , const ubigint refPlnrMDevice , const bool sq , const ubigint refSruPos , const ubigint refSruNeg , const ubigint refSruAlnpos , const ubigint refSruAlnneg , const ubigint refSruSprpos , const ubigint refSruSprneg , const ListPlnrMVertex& vtxs , const ListPlnrMLineguide& lgs , ListPlnrMFace& fces ) { ListPlnrMArcguide ags; vector<ubigint> srurefs; vector<string> fsrefs; vector<string> vsrefsstrs; vector<string> rtesstrs; vector<string> gsrefsstrs; vector<string> dirsstrs; // -- cross (and square) // - positive tone srurefs.push_back(refSruPos); fsrefs.push_back("f0"); vsrefsstrs.push_back("v0; v1; v2; v3; v4; v5"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l13;l20;l12;l15;l7; l14"); dirsstrs.push_back ("fwd;bwd;bwd;bwd;bwd;fwd"); if (sq) { srurefs.push_back(refSruPos); fsrefs.push_back("f3"); vsrefsstrs.push_back("v32;v34;v35;v37"); rtesstrs.push_back ("lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l3; l27;l2; l25"); dirsstrs.push_back ("fwd;bwd;bwd;fwd"); }; // - negative tone if (!sq) { srurefs.push_back(refSruNeg); fsrefs.push_back("f6"); vsrefsstrs.push_back("v1; v15;v23;v19;v5; v4; v3; v2"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l13;l22;l0; l14;l7; l15;l12;l20"); dirsstrs.push_back ("fwd;bwd;bwd;fwd;fwd;fwd;fwd;fwd"); }; if (sq) { srurefs.push_back(refSruNeg); fsrefs.push_back("f6"); vsrefsstrs.push_back("v1; v15;v22;v20;v25;v19;v5; v4; v3; v2"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l13;l22;l5; l23;l0; l14;l7; l15;l12;l20"); dirsstrs.push_back ("fwd;bwd;bwd;bwd;bwd;fwd;fwd;fwd;fwd;fwd"); srurefs.push_back(refSruNeg); fsrefs.push_back("f7"); vsrefsstrs.push_back("v20;v21;v33;v32;v37;v36;v24;v25"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l5; l26;l3; l25;l2; l26;l0; l23"); dirsstrs.push_back ("fwd;bwd;bwd;bwd;fwd;bwd;bwd;fwd"); srurefs.push_back(refSruNeg); fsrefs.push_back("f8"); vsrefsstrs.push_back("v21;v22;v23;v24;v36;v35;v34;v33"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l5; l22;l0; l26;l2; l27;l3; l26"); dirsstrs.push_back ("fwd;bwd;bwd;fwd;fwd;fwd;bwd;fwd"); }; // -- aligmnent around cross (and square) // - positive tone srurefs.push_back(refSruAlnpos); fsrefs.push_back("f1"); vsrefsstrs.push_back("v0; v6; v7; v8; v9; v10;v11;v12;v13;v14"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l13;l21;l10;l19;l11;l16;l8; l17;l6; l14"); dirsstrs.push_back ("fwd;bwd;bwd;fwd;bwd;bwd;fwd;bwd;bwd;fwd"); if (sq) { srurefs.push_back(refSruAlnpos); fsrefs.push_back("f4"); vsrefsstrs.push_back("v26;v28;v29;v31"); rtesstrs.push_back ("lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l4; l28;l1; l24"); dirsstrs.push_back ("fwd;bwd;bwd;fwd"); }; // - negative tone if (!sq) { srurefs.push_back(refSruAlnneg); fsrefs.push_back("f9"); vsrefsstrs.push_back("v6; v15;v23;v19;v14;v13;v12;v11;v10;v9; v8; v7"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l13;l22;l0; l14;l6; l17;l8; l16;l11;l19;l10;l21"); dirsstrs.push_back ("fwd;bwd;bwd;fwd;fwd;fwd;bwd;fwd;fwd;bwd;fwd;fwd"); }; if (sq) { srurefs.push_back(refSruAlnneg); fsrefs.push_back("f9"); vsrefsstrs.push_back("v6; v15;v22;v20;v25;v19;v14;v13;v12;v11;v10;v9; v8; v7"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l13;l22;l5; l23;l0; l14;l6; l17;l8; l16;l11;l19;l10;l21"); dirsstrs.push_back ("fwd;bwd;bwd;bwd;bwd;fwd;fwd;fwd;bwd;fwd;fwd;bwd;fwd;fwd"); srurefs.push_back(refSruAlnneg); fsrefs.push_back("f10"); vsrefsstrs.push_back("v20;v21;v27;v26;v31;v30;v24;v25"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l5; l26;l4; l24;l1; l26;l0; l23"); dirsstrs.push_back ("fwd;bwd;bwd;bwd;fwd;bwd;bwd;fwd"); srurefs.push_back(refSruAlnneg); fsrefs.push_back("f11"); vsrefsstrs.push_back("v21;v22;v23;v24;v30;v29;v28;v27"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l5; l22;l0; l26;l1; l28;l4; l26"); dirsstrs.push_back ("fwd;bwd;bwd;fwd;fwd;fwd;bwd;fwd"); }; // -- spare around cross (and square) & alignment // - positive tone srurefs.push_back(refSruSprpos); fsrefs.push_back("f2"); vsrefsstrs.push_back("v0; v15;v16;v17;v18;v19"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l13;l22;l9; l18;l0; l14"); dirsstrs.push_back ("fwd;bwd;bwd;bwd;bwd;fwd"); if (sq) { srurefs.push_back(refSruSprpos); fsrefs.push_back("f5"); vsrefsstrs.push_back("v20;v22;v23;v25"); rtesstrs.push_back ("lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l5; l22;l0; l23"); dirsstrs.push_back ("fwd;bwd;bwd;fwd"); }; // - negative tone if (sq) { srurefs.push_back(refSruSprneg); fsrefs.push_back("f12"); vsrefsstrs.push_back("v17;v16;v22;v20;v25;v18"); rtesstrs.push_back ("lgd;lgd;lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l9; l22;l5; l23;l0; l18"); dirsstrs.push_back ("fwd;bwd;bwd;bwd;bwd;fwd"); } else { srurefs.push_back(refSruSprneg); fsrefs.push_back("f12"); vsrefsstrs.push_back("v17;v16;v23;v18"); rtesstrs.push_back ("lgd;lgd;lgd;lgd"); gsrefsstrs.push_back("l9; l22;l0; l18"); dirsstrs.push_back ("fwd;bwd;bwd;fwd"); }; addFaces(dbsplnr, x1RefPlnrMDesign, srurefs, fsrefs, vsrefsstrs, rtesstrs, gsrefsstrs, dirsstrs, vtxs, lgs, ags, fces); };