// Test face for (almost) convexeness. Allows certain convexity before // complaining. // For every two consecutive edges calculate the normal. If it differs too // much from the average face normal complain. bool Foam::combineFaces::convexFace ( const scalar minConcaveCos, const pointField& points, const face& f ) { // Get outwards pointing normal of f. vector n = f.normal(points); n /= mag(n); // Get edge from f[0] to f[size-1]; vector ePrev(points[f.first()] - points[f.last()]); scalar magEPrev = mag(ePrev); ePrev /= magEPrev + VSMALL; forAll(f, fp0) { // Get vertex after fp label fp1 = f.fcIndex(fp0); // Normalized vector between two consecutive points vector e10(points[f[fp1]] - points[f[fp0]]); scalar magE10 = mag(e10); e10 /= magE10 + VSMALL; if (magEPrev > SMALL && magE10 > SMALL) { vector edgeNormal = ePrev ^ e10; if ((edgeNormal & n) < 0) { // Concave. Check angle. if ((ePrev & e10) < minConcaveCos) { return false; } } } ePrev = e10; magEPrev = magE10; }
void HistoryWindow::fill() { log(L_DEBUG, "Fill"); if (m_it == NULL) m_it = new HistoryIterator(m_id); if (m_progress == NULL){ m_progress = new HistoryProgressBar(m_status); m_status->addWidget(m_progress, 1); } m_it->setFilter(m_filter); m_progress->setTotalSteps(CorePlugin::m_plugin->getHistoryPage()); m_progress->setProgress(0); m_progress->show(); m_nMessages = 0; if (m_bDirection){ m_it->end(); }else{ m_it->begin(); } if (m_states.size()){ m_it->setState(m_states[m_page].c_str()); }else{ m_states.push_back(m_it->state()); } m_view->setText(QString::null); QTimer::singleShot(0, this, SLOT(next())); Command cmd; cmd->id = CmdHistoryNext; cmd->flags = COMMAND_DISABLED; cmd->param = (void*)m_id; Event eNext(EventCommandDisabled, cmd); eNext.process(); cmd->id = CmdHistoryPrev; cmd->flags = (m_page > 0) ? 0 : COMMAND_DISABLED; Event ePrev(EventCommandDisabled, cmd); ePrev.process(); }