void STEPWrapper::printEntityAggregate(STEPaggregate *sa, int level) { std::string strVal; for (int i = 0; i < level; i++) { std::cout << " "; } std::cout << "Aggregate:" << sa->asStr(strVal) << std::endl; EntityNode *sn = (EntityNode *)sa->GetHead(); SDAI_Application_instance *sse; while (sn != NULL) { sse = (SDAI_Application_instance *)sn->node; if (((sse->eDesc->Type() == SET_TYPE) || (sse->eDesc->Type() == LIST_TYPE)) && (sse->eDesc->BaseType() == ENTITY_TYPE)) { printEntityAggregate((STEPaggregate *)sse, level + 2); } else if (sse->eDesc->Type() == ENTITY_TYPE) { printEntity(sse, level + 2); } else { std::cout << "Instance Type not handled:" << std::endl; } //std::cout << "sn - " << sn->asStr(attrval) << std::endl; sn = (EntityNode *)sn->NextNode(); } //std::cout << std::endl << std::endl; }
LIST_OF_ENTITIES * STEPWrapper::getListOfEntities(SDAI_Application_instance *sse, const char *name) { LIST_OF_ENTITIES *l = new LIST_OF_ENTITIES; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrval; std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { STEPaggregate *sa = (STEPaggregate *)attr->ptr.a; EntityNode *sn = (EntityNode *)sa->GetHead(); SDAI_Application_instance *se; while (sn != NULL) { se = (SDAI_Application_instance *)sn->node; l->push_back(se); sn = (EntityNode *)sn->NextNode(); } break; } } return l; }
LIST_OF_PATCHES * STEPWrapper::parseListOfPatchEntities(const char *in) { LIST_OF_PATCHES *l = new LIST_OF_PATCHES; ErrorDescriptor errdesc; EntityAggregate *ag = new EntityAggregate(); ag->StrToVal(in, &errdesc, SCHEMA_NAMESPACE::e_cartesian_point, instance_list, 0); EntityNode *sn = (EntityNode *)ag->GetHead(); SDAI_Application_instance *sse; while (sn != NULL) { sse = (SDAI_Application_instance *)sn->node; SurfacePatch *aCP = dynamic_cast<SurfacePatch *>(Factory::CreateObject(this,sse)); if (aCP != NULL) { l->push_back(aCP); } else { std::cout << "Error loading SurfacePatch." << std::endl; } sn = (EntityNode *)sn->NextNode(); } delete ag; return l; }