LIST_OF_SELECTS * STEPWrapper::getListOfSelects(SDAI_Application_instance *sse, const char *name) { LIST_OF_SELECTS *l = new LIST_OF_SELECTS; std::string attrval; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { SelectAggregate *sa = (SelectAggregate *)attr->ptr.a; SelectNode *sn = (SelectNode *)sa->GetHead(); while (sn) { l->push_back(sn->node); sn = (SelectNode *)sn->NextNode(); } break; } } return l; }
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_STRINGS * STEPWrapper::getAttributes(SDAI_Application_instance *sse) { LIST_OF_STRINGS *l = new LIST_OF_STRINGS; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string name = attr->Name(); l->push_back(name); } return l; }
LIST_OF_STRINGS * STEPWrapper::getAttributes(int STEPid) { LIST_OF_STRINGS *l = new LIST_OF_STRINGS; SDAI_Application_instance *sse = instance_list->FindFileId(STEPid)->GetSTEPentity(); sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string name = attr->Name(); l->push_back(name); } return l; }
void STEPWrapper::printEntity(SDAI_Application_instance *se, int level) { for (int i = 0; i < level; i++) { std::cout << " "; } std::cout << "Entity:" << se->EntityName() << "(" << se->STEPfile_id << ")" << std::endl; for (int i = 0; i < level; i++) { std::cout << " "; } std::cout << "Description:" << se->eDesc->Description() << std::endl; for (int i = 0; i < level; i++) { std::cout << " "; } std::cout << "Entity Type:" << se->eDesc->Type() << std::endl; for (int i = 0; i < level; i++) { std::cout << " "; } std::cout << "Attributes:" << std::endl; STEPattribute *attr; se->ResetAttributes(); while ((attr = se->NextAttribute()) != NULL) { std::string attrval; for (int i = 0; i <= level; i++) { std::cout << " "; } std::cout << attr->Name() << ": " << attr->asStr(attrval) << " TypeName: " << attr->TypeName() << " Type: " << attr->Type() << std::endl; if (attr->Type() == 256) { if (attr->IsDerived()) { for (int i = 0; i <= level; i++) { std::cout << " "; } std::cout << " ********* DERIVED *********" << std::endl; } else { printEntity(*(attr->ptr.c), level + 2); } } else if ((attr->Type() == SET_TYPE) || (attr->Type() == LIST_TYPE)) { STEPaggregate *sa = (STEPaggregate *)(attr->ptr.a); // std::cout << "aggr:" << sa->asStr(attrval) << " BaseType:" << attr->BaseType() << std::endl; if (attr->BaseType() == ENTITY_TYPE) { printEntityAggregate(sa, level + 2); } } } //std::cout << std::endl << std::endl; }
double STEPWrapper::getRealAttribute(SDAI_Application_instance *sse, const char *name) { double retValue = 0.0; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { retValue = *attr->ptr.r; break; } } return retValue; }
SDAI_Select * STEPWrapper::getSelectAttribute(SDAI_Application_instance *sse, const char *name) { SDAI_Select *retValue = NULL; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { retValue = (SDAI_Select *)attr->ptr.sh; break; } } return retValue; }
LIST_OF_LIST_OF_POINTS * STEPWrapper::getListOfListOfPoints(int STEPid, const char *attrName) { LIST_OF_LIST_OF_POINTS *l = new LIST_OF_LIST_OF_POINTS; SDAI_Application_instance *sse = instance_list->FindFileId(STEPid)->GetSTEPentity(); sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrval; std::string name = attr->Name(); if (name.compare(attrName) == 0) { ErrorDescriptor errdesc; //std::cout << attr->asStr(attrval) << std::endl; //std::cout << attr->TypeName() << std::endl; GenericAggregate_ptr gp = (GenericAggregate_ptr)attr->ptr.a; STEPnode *sn = (STEPnode *)gp->GetHead(); //EntityAggregate *ag = new EntityAggregate(); const char *eaStr; LIST_OF_POINTS *points; while (sn != NULL) { //sn->STEPwrite(std::cout); //std::cout << std::endl; eaStr = sn->asStr(attrval); points = parseListOfPointEntities(eaStr); l->push_back(points); sn = (STEPnode *)sn->NextNode(); } break; } } return l; }
double STEPWrapper::getRealAttribute(int STEPid, const char *name) { double retValue = 0.0; SDAI_Application_instance *sse = instance_list->FindFileId(STEPid)->GetSTEPentity(); sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { retValue = *attr->ptr.r; break; } } return retValue; }
int STEPWrapper::getEnumAttribute(SDAI_Application_instance *sse, const char *name) { int retValue = 0; std::string attrval; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { retValue = (*attr->ptr.e).asInt(); //std::cout << "debug enum: " << (*attr->ptr.e).asStr(attrval) << std::endl; break; } } return retValue; }
Boolean STEPWrapper::getBooleanAttribute(SDAI_Application_instance *sse, const char *name) { Boolean retValue = BUnset; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { retValue = (Boolean)(*attr->ptr.e).asInt(); if (retValue > BUnset) { retValue = BUnset; } break; } } return retValue; }
Logical STEPWrapper::getLogicalAttribute(SDAI_Application_instance *sse, const char *name) { Logical retValue = LUnknown; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { retValue = (Logical)(*attr->ptr.e).asInt(); if (retValue > LUnknown) { retValue = LUnknown; } break; } } return retValue; }
std::string STEPWrapper::getStringAttribute(SDAI_Application_instance *sse, const char *name) { std::string retValue = ""; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrval; std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { const char *str = attr->asStr(attrval); if (str != NULL) { retValue = str; } break; } } return retValue; }
std::string STEPWrapper::getStringAttribute(int STEPid, const char *name) { std::string retValue = ""; SDAI_Application_instance *sse = instance_list->FindFileId(STEPid)->GetSTEPentity(); sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrval; std::string attrname = attr->Name(); if (attrname.compare(name) == 0) { retValue = attr->asStr(attrval); //if (retValue.empty()) // std::cout << "String retValue:" << retValue << ":" << std::endl; break; } } return retValue; }
SDAI_Application_instance * STEPWrapper::getEntityAttribute(SDAI_Application_instance *sse, const char *name) { SDAI_Application_instance *retValue = NULL; sse->ResetAttributes(); STEPattribute *attr; while ((attr = sse->NextAttribute()) != NULL) { std::string attrname = attr->Name(); if (attr->Nullable() && attr->is_null() && !attr->IsDerived()) { continue; } if (attrname.compare(name) == 0) { std::string attrval; //std::cout << "attr:" << name << ":" << attr->TypeName() << ":" << attr->Name() << std::endl; //std::cout << "attr:" << attr->asStr(attrval) << std::endl; retValue = (SDAI_Application_instance *)*attr->ptr.c; break; } } return retValue; }
STEPentity * Create_Rational_Surface_Aggregate(ON_NurbsSurface *nsurface, ON_Brep_Info_AP203 *info) { STEPattribute *attr; STEPcomplex *stepcomplex; const char *entNmArr[8] = {"bounded_surface", "b_spline_surface", "b_spline_surface_with_knots", "surface", "geometric_representation_item", "rational_b_spline_surface", "representation_item", "*"}; STEPcomplex *complex_entity = new STEPcomplex(info->registry, (const char **)entNmArr, info->registry->GetEntityCnt() + 1); /* stepcomplex = complex_entity->head; stepcomplex->ResetAttributes(); while (stepcomplex) { std::cout << stepcomplex->EntityName() << "\n"; while ((attr = stepcomplex->NextAttribute()) != NULL) { std::cout << " " << attr->Name() << "," << attr->NonRefType() << "\n"; } stepcomplex = stepcomplex->sc; stepcomplex->ResetAttributes(); } */ /* Set b_spline_surface data */ stepcomplex = complex_entity->EntityPart("b_spline_surface"); stepcomplex->ResetAttributes(); while ((attr = stepcomplex->NextAttribute()) != NULL) { if (!bu_strcmp(attr->Name(), "u_degree")) attr->ptr.i = new SDAI_Integer(nsurface->Degree(0)); if (!bu_strcmp(attr->Name(), "v_degree")) attr->ptr.i = new SDAI_Integer(nsurface->Degree(1)); if (!bu_strcmp(attr->Name(), "control_points_list")) { GenericAggregate *control_pnts= new GenericAggregate(); ON_NurbsSurfaceCV_Initialize(nsurface, complex_entity, info); attr->ptr.a = control_pnts; info->surf_genagg[(STEPentity*)complex_entity] = control_pnts; } if (!bu_strcmp(attr->Name(), "surface_form")) attr->ptr.e = new SdaiB_spline_surface_form_var(B_spline_surface_form__unspecified); if (!bu_strcmp(attr->Name(), "u_closed")) attr->ptr.e = new SDAI_LOGICAL((Logical)(nsurface->IsClosed(0))); if (!bu_strcmp(attr->Name(), "v_closed")) attr->ptr.e = new SDAI_LOGICAL((Logical)(nsurface->IsClosed(1))); if (!bu_strcmp(attr->Name(), "self_intersect")) attr->ptr.e = new SDAI_LOGICAL(LFalse); } /* Set knots */ stepcomplex = complex_entity->EntityPart("b_spline_surface_with_knots"); stepcomplex->ResetAttributes(); IntAggregate *u_multiplicities = new IntAggregate(); IntAggregate *v_multiplicities = new IntAggregate(); RealAggregate *u_knots = new RealAggregate(); RealAggregate *v_knots = new RealAggregate(); ON_NurbsSurfaceKnots_to_Aggregates(u_multiplicities, v_multiplicities, u_knots, v_knots, nsurface); while ((attr = stepcomplex->NextAttribute()) != NULL) { if (!bu_strcmp(attr->Name(), "u_multiplicities")) attr->ptr.a = u_multiplicities; if (!bu_strcmp(attr->Name(), "v_multiplicities")) attr->ptr.a = v_multiplicities; if (!bu_strcmp(attr->Name(), "u_knots")) attr->ptr.a = u_knots; if (!bu_strcmp(attr->Name(), "v_knots")) attr->ptr.a = v_knots; if (!bu_strcmp(attr->Name(), "knot_spec")) attr->ptr.e = new SdaiKnot_type_var(Knot_type__unspecified); } /* Set weights */ stepcomplex = complex_entity->EntityPart("rational_b_spline_surface"); stepcomplex->ResetAttributes(); while ((attr = stepcomplex->NextAttribute()) != NULL) { if (!bu_strcmp(attr->Name(), "weights_data")) { GenericAggregate *weights = new GenericAggregate(); for (int i = 0; i < nsurface->CVCount(0); i++) { std::ostringstream ss; ss << "("; for (int j = 0; j < nsurface->CVCount(1); j++) { if (j != 0) ss << ", "; ss << nsurface->Weight(i,j); } ss << ")"; std::string str = ss.str(); weights->AddNode(new GenericAggrNode(str.c_str())); } attr->ptr.a = weights; } } /* Representation item */ stepcomplex = complex_entity->EntityPart("representation_item"); stepcomplex->ResetAttributes(); while ((attr = stepcomplex->NextAttribute()) != NULL) { //std::cout << " " << attr->Name() << "," << attr->NonRefType() << "\n"; if (!bu_strcmp(attr->Name(), "name")) attr->StrToVal("''"); } return (STEPentity *)complex_entity; }
STEPcomplex * STEPutil::Geometric_Context( const LenEnum & len, const AngEnum & angle, const char * tolstr ) { int instance_cnt = 0; STEPattribute * attr; STEPcomplex * stepcomplex; SdaiDimensional_exponents * dimensional_exp = new SdaiDimensional_exponents(); dimensional_exp->length_exponent_( 0.0 ); dimensional_exp->mass_exponent_( 0.0 ); dimensional_exp->time_exponent_( 0.0 ); dimensional_exp->electric_current_exponent_( 0.0 ); dimensional_exp->thermodynamic_temperature_exponent_( 0.0 ); dimensional_exp->amount_of_substance_exponent_( 0.0 ); dimensional_exp->luminous_intensity_exponent_( 0.0 ); instance_list->Append( ( SDAI_Application_instance * ) dimensional_exp, completeSE ); instance_cnt++; STEPcomplex * ua_length; // First set up metric units if appropriate. Default to mm. // If imperial units, set up mm to be used as base to define imperial units. Si_prefix pfx = Si_prefix__milli; switch( len ) { case u_CM: pfx = Si_prefix__centi; break; case u_M: pfx = Si_prefix_unset; break; case u_MM: case u_IN: case u_FT: case u_YD: break; } const char * ua_length_types[4] = { "length_unit", "named_unit", "si_unit", "*" }; ua_length = new STEPcomplex( registry, ( const char ** ) ua_length_types, instance_cnt ); stepcomplex = ua_length->head; while( stepcomplex ) { if( !strcmp( stepcomplex->EntityName(), "Si_Unit" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "prefix" ) ) { attr->Raw()->e = new SdaiSi_prefix_var( pfx ); } if( !strcmp( attr->Name(), "name" ) ) { attr->Raw()->e = new SdaiSi_unit_name_var( Si_unit_name__metre ); } } } stepcomplex = stepcomplex->sc; } instance_list->Append( ( SDAI_Application_instance * ) ua_length, completeSE ); instance_cnt++; // If imperial, create conversion based unit. if( len >= u_IN ) { STEPcomplex * len_mm = ua_length; char lenname[10]; lenname[0] = '\0'; double lenconv; switch( len ) { case u_IN: strcat( lenname, "'INCH'\0" ); lenconv = 25.4; break; case u_FT: strcat( lenname, "'FOOT'\0" ); lenconv = 25.4 * 12.0; break; case u_YD: strcat( lenname, "'YARD'\0" ); lenconv = 25.4 * 36.0; break; case u_MM: case u_CM: case u_M: break; } SdaiUnit * len_unit = new SdaiUnit( ( SdaiNamed_unit * ) len_mm ); SdaiMeasure_value * len_measure_value = new SdaiMeasure_value( lenconv, config_control_design::t_measure_value ); len_measure_value->SetUnderlyingType( config_control_design::t_length_measure ); SdaiLength_measure_with_unit * len_measure_with_unit = new SdaiLength_measure_with_unit(); len_measure_with_unit->value_component_( len_measure_value ); len_measure_with_unit->unit_component_( len_unit ); instance_list->Append( ( SDAI_Application_instance * ) len_measure_with_unit, completeSE ); instance_cnt++; SdaiDimensional_exponents * dimensional_exp_len = new SdaiDimensional_exponents(); dimensional_exp_len->length_exponent_( 1.0 ); dimensional_exp_len->mass_exponent_( 0.0 ); dimensional_exp_len->time_exponent_( 0.0 ); dimensional_exp_len->electric_current_exponent_( 0.0 ); dimensional_exp_len->thermodynamic_temperature_exponent_( 0.0 ); dimensional_exp_len->amount_of_substance_exponent_( 0.0 ); dimensional_exp_len->luminous_intensity_exponent_( 0.0 ); instance_list->Append( ( SDAI_Application_instance * ) dimensional_exp_len, completeSE ); instance_cnt++; const char * ua_conv_len_types[4] = { "conversion_based_unit", "named_unit", "length_unit", "*" }; ua_length = new STEPcomplex( registry, ( const char ** ) ua_conv_len_types, instance_cnt ); stepcomplex = ua_length->head; while( stepcomplex ) { if( !strcmp( stepcomplex->EntityName(), "Conversion_Based_Unit" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "name" ) ) { attr->StrToVal( lenname ); } if( !strcmp( attr->Name(), "conversion_factor" ) ) { attr->Raw()->c = new( STEPentity * ); *( attr->Raw()->c ) = ( STEPentity * )( len_measure_with_unit ); } } } if( !strcmp( stepcomplex->EntityName(), "Named_Unit" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "dimensions" ) ) { attr->Raw()->c = new( STEPentity * ); *( attr->Raw()->c ) = ( STEPentity * )( dimensional_exp_len ); } } } stepcomplex = stepcomplex->sc; } instance_list->Append( ( SDAI_Application_instance * ) ua_length, completeSE ); instance_cnt++; } SdaiUncertainty_measure_with_unit * uncertainty = ( SdaiUncertainty_measure_with_unit * )registry->ObjCreate( "UNCERTAINTY_MEASURE_WITH_UNIT" ); uncertainty->name_( "'DISTANCE_ACCURACY_VALUE'" ); uncertainty->description_( "'Threshold below which geometry imperfections (such as overlaps) are not considered errors.'" ); SdaiUnit * tol_unit = new SdaiUnit( ( SdaiNamed_unit * ) ua_length ); uncertainty->ResetAttributes(); { while( ( attr = uncertainty->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "unit_component" ) ) { attr->Raw()->sh = tol_unit; } if( !strcmp( attr->Name(), "value_component" ) ) { attr->StrToVal( tolstr ); } if( !strcmp( attr->Name(), "name" ) ) { attr->StrToVal( "'closure'" ); } } } instance_list->Append( ( SDAI_Application_instance * ) uncertainty, completeSE ); instance_cnt++; // First set up radians as base angle unit. const char * ua_plane_angle_types[4] = { "named_unit", "plane_angle_unit", "si_unit", "*" }; STEPcomplex * ua_plane_angle = new STEPcomplex( registry, ( const char ** ) ua_plane_angle_types, instance_cnt ); stepcomplex = ua_plane_angle->head; while( stepcomplex ) { if( !strcmp( stepcomplex->EntityName(), "Si_Unit" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "name" ) ) { attr->Raw()->e = new SdaiSi_unit_name_var( Si_unit_name__radian ); } } } stepcomplex = stepcomplex->sc; } instance_list->Append( ( SDAI_Application_instance * ) ua_plane_angle, completeSE ); instance_cnt++; // If degrees, create conversion based unit. if( angle == u_DEG ) { STEPcomplex * ang_rad = ua_plane_angle; const double angconv = ( 3.14159265358979323846264338327950 / 180.0 ); SdaiUnit * p_ang_unit = new SdaiUnit( ( SdaiNamed_unit * ) ang_rad ); SdaiMeasure_value * p_ang_measure_value = new SdaiMeasure_value( angconv, config_control_design::t_measure_value ); p_ang_measure_value->SetUnderlyingType( config_control_design::t_plane_angle_measure ); SdaiPlane_angle_measure_with_unit * p_ang_measure_with_unit = new SdaiPlane_angle_measure_with_unit(); p_ang_measure_with_unit->value_component_( p_ang_measure_value ); p_ang_measure_with_unit->unit_component_( p_ang_unit ); instance_list->Append( ( SDAI_Application_instance * ) p_ang_measure_with_unit, completeSE ); instance_cnt++; const char * ua_conv_angle_types[4] = { "conversion_based_unit", "named_unit", "plane_angle_unit", "*" }; ua_plane_angle = new STEPcomplex( registry, ( const char ** ) ua_conv_angle_types, instance_cnt ); stepcomplex = ua_plane_angle->head; while( stepcomplex ) { if( !strcmp( stepcomplex->EntityName(), "Conversion_Based_Unit" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "name" ) ) { attr->StrToVal( "'DEGREES'" ); } if( !strcmp( attr->Name(), "conversion_factor" ) ) { attr->Raw()->c = new( STEPentity * ); *( attr->Raw()->c ) = ( STEPentity * )( p_ang_measure_with_unit ); } } } if( !strcmp( stepcomplex->EntityName(), "Named_Unit" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "dimensions" ) ) { attr->Raw()->c = new( STEPentity * ); *( attr->Raw()->c ) = ( STEPentity * )( dimensional_exp ); } } } stepcomplex = stepcomplex->sc; } instance_list->Append( ( SDAI_Application_instance * ) ua_plane_angle, completeSE ); instance_cnt++; } const char * ua_solid_angle_types[4] = { "named_unit", "si_unit", "solid_angle_unit", "*" }; STEPcomplex * ua_solid_angle = new STEPcomplex( registry, ( const char ** ) ua_solid_angle_types, instance_cnt ); stepcomplex = ua_solid_angle->head; while( stepcomplex ) { if( !strcmp( stepcomplex->EntityName(), "Si_Unit" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "name" ) ) { attr->Raw()->e = new SdaiSi_unit_name_var( Si_unit_name__steradian ); } } } stepcomplex = stepcomplex->sc; } instance_list->Append( ( SDAI_Application_instance * ) ua_solid_angle, completeSE ); instance_cnt++; // All units set up, stored in: ua_length, ua_plane_angle, ua_solid_angle const char * entNmArr[5] = { "geometric_representation_context", "global_uncertainty_assigned_context", "global_unit_assigned_context", "representation_context", "*" }; STEPcomplex * complex_entity = new STEPcomplex( registry, ( const char ** ) entNmArr, instance_cnt ); stepcomplex = complex_entity->head; while( stepcomplex ) { if( !strcmp( stepcomplex->EntityName(), "Geometric_Representation_Context" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "coordinate_space_dimension" ) ) { attr->StrToVal( "3" ); } } } if( !strcmp( stepcomplex->EntityName(), "Global_Uncertainty_Assigned_Context" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "uncertainty" ) ) { EntityAggregate * unc_agg = new EntityAggregate(); unc_agg->AddNode( new EntityNode( ( SDAI_Application_instance * ) uncertainty ) ); attr->Raw()->a = unc_agg; } } } if( !strcmp( stepcomplex->EntityName(), "Global_Unit_Assigned_Context" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { std::string attrval; if( !strcmp( attr->Name(), "units" ) ) { EntityAggregate * unit_assigned_agg = new EntityAggregate(); unit_assigned_agg->AddNode( new EntityNode( ( SDAI_Application_instance * ) ua_length ) ); unit_assigned_agg->AddNode( new EntityNode( ( SDAI_Application_instance * ) ua_plane_angle ) ); unit_assigned_agg->AddNode( new EntityNode( ( SDAI_Application_instance * ) ua_solid_angle ) ); attr->Raw()->a = unit_assigned_agg; } } } if( !strcmp( stepcomplex->EntityName(), "Representation_Context" ) ) { stepcomplex->ResetAttributes(); while( ( attr = stepcomplex->NextAttribute() ) != NULL ) { if( !strcmp( attr->Name(), "context_identifier" ) ) { attr->StrToVal( "'STANDARD'" ); } if( !strcmp( attr->Name(), "context_type" ) ) { attr->StrToVal( "'3D'" ); } } } stepcomplex = stepcomplex->sc; } instance_list->Append( ( SDAI_Application_instance * ) complex_entity, completeSE ); instance_cnt++; return complex_entity; }