void QhullSet_test:: t_qhullsetbase() { RboxPoints rcube("c"); { Qhull q(rcube,"QR0"); // triangulation of rotated unit cube // Fake an empty set. Default constructor not defined. No memory allocation. QhullFacet f4 = q.beginFacet(); QhullFacetSet fs = f4.neighborFacets(); fs.defineAs(q.qhullQh()->other_points); // Force an empty set QVERIFY(fs.isEmpty()); QVERIFY(fs.empty()); QCOMPARE(fs.count(), 0); QCOMPARE(fs.size(), 0u); QCOMPARE(fs.begin(), fs.end()); // beginPointer(), endPointer() QVERIFY(QhullSetBase::isEmpty(fs.getSetT())); QhullRidgeSet rs = f4.ridges(); QVERIFY(!rs.isEmpty()); QVERIFY(!rs.empty()); QCOMPARE(rs.count(), 4); QCOMPARE(rs.size(), 4u); QVERIFY(rs.begin()!=rs.end()); QVERIFY(!QhullSetBase::isEmpty(rs.getSetT())); QhullRidgeSet rs2= rs; // copy constructor // rs= rs2; // disabled. Would not copy ridges QCOMPARE(rs2, rs); QCOMPARE(q.facetCount(), 6); QhullFacet f = q.beginFacet(); QhullFacetSet fs2 = f.neighborFacets(); QCOMPARE(fs2.count(), 4); QCOMPARE(fs2.size(), 4u); QVERIFY(!fs2.isEmpty()); QVERIFY(!QhullSetBase::isEmpty(fs2.getSetT())); QVERIFY(!fs2.empty()); QVERIFY(fs!=fs2); setT *s= fs2.getSetT(); fs.defineAs(s); QVERIFY(fs==fs2); QCOMPARE(fs[1], fs2[1]); // elementPointer QhullFacetSet fs3(fs2); QVERIFY(fs3==fs); // fs= fs2; // disabled. Would not copy facets QhullFacetSet fs4= fs2; // copy constructor QVERIFY(fs4==fs2); } }//t_qhullsetbase
//! Return True if nextRidge3d //! Simplicial facets may have incomplete ridgeSets //! Does not use qh_qh or qh_errexit() bool QhullRidge:: hasNextRidge3d(const QhullFacet f) const { vertexT *v= 0; ridgeT *ridge= qh_nextridge3d(getRidgeT(), f.getFacetT(), &v); return (ridge!=0); }//hasNextRidge3d
//! Print facet identifiers to stream. Space prefix. From qh_printfacetheader [io.c] ostream & operator<<(ostream &os, const QhullFacetSet::PrintIdentifiers &p) { os << p.print_message; for(QhullFacetSet::const_iterator i=p.facet_set->begin(); i!=p.facet_set->end(); ++i){ const QhullFacet f= *i; if(f.getFacetT()==qh_MERGEridge){ os << " MERGE"; }else if(f.getFacetT()==qh_DUPLICATEridge){ os << " DUP"; }else if(p.facet_set->isSelectAll() || f.isGood()){ os << " f" << f.id(); } } os << endl; return os; }//<<QhullFacetSet::PrintIdentifiers
//! Return True if nextRidge3d //! Simplicial facets may have incomplete ridgeSets //! Does not use qh_errexit() bool QhullRidge:: hasNextRidge3d(const QhullFacet &f) const { if(!qh_qh){ return false; } vertexT *v= 0; // Does not call qh_errexit(), TRY_QHULL_ not needed ridgeT *ridge= qh_nextridge3d(getRidgeT(), f.getFacetT(), &v); return (ridge!=0); }//hasNextRidge3d
//! Return next ridge and optional vertex for a 3d facet and ridge //! Does not use qh_qh or qh_errexit() QhullRidge QhullRidge:: nextRidge3d(const QhullFacet f, QhullVertex *nextVertex) const { vertexT *v= 0; ridgeT *ridge= qh_nextridge3d(getRidgeT(), f.getFacetT(), &v); if(!ridge){ throw QhullError(10030, "Qhull error nextRidge3d: missing next ridge for facet %d ridge %d. Does facet contain ridge?", f.id(), id()); } if(nextVertex!=0){ *nextVertex= QhullVertex(v); } return QhullRidge(ridge); }//nextRidge3d
//! Return next ridge and optional vertex for a 3d facet and ridge //! Does not use qh_errexit() QhullRidge QhullRidge:: nextRidge3d(const QhullFacet &f, QhullVertex *nextVertex) const { vertexT *v= 0; ridgeT *ridge= 0; if(qh_qh){ // Does not call qh_errexit(), TRY_QHULL_ not needed ridge= qh_nextridge3d(getRidgeT(), f.getFacetT(), &v); if(!ridge){ throw QhullError(10030, "Qhull error nextRidge3d: missing next ridge for facet %d ridge %d. Does facet contain ridge?", f.id(), id()); } } if(nextVertex!=0){ *nextVertex= QhullVertex(qh_qh, v); } return QhullRidge(qh_qh, ridge); }//nextRidge3d