/* int OpenModel(std::string modelName){ return _imp->OpenModel(modelName); } std::vector<std::pair<ShapeType, int> > getList(int model_no){ return _imp->getList(model_no); }*/ Feature* generate(std::vector< std::pair<ShapeType, int> >:: iterator iter, int model_no, Imp* imp){ Feature* fOld = manager[iter->first]; if(fOld == NULL){ char msg[100]; sprintf(msg, "(%d)", iter->first); throw xbug("Type " + std::string(msg) + " can't be created"); } Feature* f = fOld->clone(); f->setAttribute(model_no, iter->second, imp); return f; /* switch(iter->first){ case SLOT: return new SlotFeature(model_no, iter->second, _imp) ; case HOLE: return new HoleFeature(model_no, iter->second, _imp) ; case CUTOUT: return new CutoutFeature(model_no, iter->second, _imp) ; case IRREGULAR: return new IrregularFeature(model_no, iter->second, _imp) ; case SPECIAL: return new SpecialFeature(model_no, iter->second, _imp) ; case TRIANGLE: return new TriangleFeature(model_no, iter->second, _imp); default: return NULL; }*/ }
void testIntersect() { Feature a; a.setStart(10); a.setEnd(100); a.setAttribute("attr1", "val1"); a.setAttribute("attr2", "val2a"); Feature b; b.setStart(90); b.setEnd(200); a.setAttribute("attr1", "val1"); a.setAttribute("attr2", "val2b"); b.setAttribute("attr3", "val3"); b.setAttribute("attr4", "val4"); Feature c = a.intersect(b); FeatureAttributeMap const& attrs = c.getAttributes(); CPPUNIT_ASSERT_EQUAL((size_t)4, attrs.size()); FeatureAttributeMap::const_iterator attrs_iter = attrs.begin(); FeatureAttributeMap::const_iterator attrs_end = attrs.end(); size_t totalValues = 0; while (attrs_iter != attrs_end) { std::string const& name = attrs_iter->first; FeatureAttributeValues const& values = attrs_iter->second; size_t nValues = values.size(); totalValues += nValues; if (name == "attr1") CPPUNIT_ASSERT_EQUAL((size_t)1, nValues); else if (name == "attr2") CPPUNIT_ASSERT_EQUAL((size_t)2, nValues); else if (name == "attr3") CPPUNIT_ASSERT_EQUAL((size_t)1, nValues); else if (name == "attr4") CPPUNIT_ASSERT_EQUAL((size_t)1, nValues); ++attrs_iter; } CPPUNIT_ASSERT_EQUAL((size_t)5, totalValues); }