/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// #include "OdaCommon.h" #include "daiModule.h" #include "daiRepository.h" #include "daiModel.h" #include "daiHeaderSection.h" #include "ExStepHostAppServices.h" #include "ExStepTutorial_08.h" #include "ExStepTutorialBase.h" #include "Common/examples/daiSimpleProgramOptions.h" #define USING_AP242 StepTutorial::ExecutionResult Tutorial_09(const ExStepServices& svcs, const std::vector& params, std::ostream& ouputStream) { OdAnsiString outputStepFile; OdAnsiString referenceStepFile; OdDAI::utils::argv_parser tutorialArgsParser("Tutorial_09"); tutorialArgsParser.add_param(std::make_shared>(outputStepFile, "filename", "Output STEP physical file name", true, false)); tutorialArgsParser.add_param(std::make_shared>(referenceStepFile, "reference_file", "Referenced STEP physical file name", true, false)); switch (tutorialArgsParser.parse(params, ouputStream)) { case OdDAI::utils::ParseResult::showHelp: { return StepTutorial::ExecutionResult::eShowHelp; } break; case OdDAI::utils::ParseResult::failed: { return StepTutorial::ExecutionResult::eWrongParams; } break; default: break; } OdDAI::SessionPtr session = oddaiCreateSession(); OdAnsiString workDir = StepTutorial::WorkDir::getPath(); #ifdef USING_AP242 OdDAI::SchemaPtr workSchema = oddaiGetSchema(workDir + "Schemas/ap242ed2_mim_lf_v1.101.exp"); #else OdDAI::SchemaPtr workSchema = oddaiGetSchema(workDir + "Schemas/AP214E3_2010.exp"); #endif // USING_AP242 if (workSchema.isNull()) return StepTutorial::ExecutionResult::eFailed; //// Creating header section OdDAI::RepositoryPtr repo = session->createRepo("TUTORIAL_09_Repo"); session->openRepo(repo); OdDAI::ModelPtr model = repo->createModel("Tutorial_09", workSchema); OdString fileName; if (outputStepFile.isEmpty()) fileName = workDir + "Tutorial_09.stp"; else fileName = outputStepFile; OdDAI::OdHeaderSectionPtr header = repo->getHeaderSection(); OdDAI::ApplicationInstancePtr pDesc = header->getEntityByType(OdDAI::OdHeaderEntityType::kFileDescription); OdAnsiStringArray description; description.append("STEP AP242"); pDesc->putAttr("description", description); OdDAI::ApplicationInstancePtr pFileName = header->getEntityByType(OdDAI::OdHeaderEntityType::kFileName); pFileName->putAttr("name", fileName); OdTimeStamp timeStamp(OdTimeStamp::kInitLocalTime); OdString timeStampString; timeStamp.strftime(L"%Y-%m-%dT%H:%M:%S", timeStampString); pFileName->putAttr("time_stamp", timeStampString); OdAnsiStringArray author; author.append(" "); pFileName->putAttr("author", author); OdAnsiString originatingSystem(" "); pFileName->putAttr("originating_system", originatingSystem); OdAnsiString authorization(" "); pFileName->putAttr("authorization", authorization); if (!model.isNull()) { model->promoteModelToReadWrite(); OdDAI::Aggr* aggr = nullptr; OdDAI::ApplicationInstancePtr inst_application_context = model->createEntityInstance("application_context"); OdDAIObjectId id_application_context = model->appendEntityInstance(inst_application_context); inst_application_context->putAttr("application", (OdAnsiString)""); OdDAI::ApplicationInstancePtr inst_product_context = model->createEntityInstance("product_context"); OdDAIObjectId id_product_context = model->appendEntityInstance(inst_product_context); inst_product_context->putAttr("discipline_type", (OdAnsiString)"mechanical"); inst_product_context->putAttr("frame_of_reference", id_application_context); inst_product_context->putAttr("name", (OdAnsiString)""); OdDAI::ApplicationInstancePtr inst_product_definition_context = model->createEntityInstance("product_definition_context"); OdDAIObjectId id_product_definition_context = model->appendEntityInstance(inst_product_definition_context); inst_product_definition_context->putAttr("name", (OdAnsiString)""); inst_product_definition_context->putAttr("life_cycle_stage", (OdAnsiString)"design"); inst_product_definition_context->putAttr("frame_of_reference", id_application_context); OdDAI::ApplicationInstancePtr inst_product_rel_product_category = model->createEntityInstance("product_related_product_category"); inst_product_rel_product_category->putAttr("name", (OdAnsiString)"Main_product"); inst_product_rel_product_category->putAttr("description", (OdAnsiString)" "); OdDAIObjectId id_product_rel_product_category = model->appendEntityInstance(inst_product_rel_product_category); OdDAI::ApplicationInstancePtr inst_product = model->createEntityInstance("product"); OdDAIObjectId id_product = model->appendEntityInstance(inst_product); inst_product->putAttr("name", (OdAnsiString)"Main product"); inst_product->putAttr("id", (OdAnsiString)"Main product"); OdDAI::Set* set_product_ctx; inst_product->getAttr("frame_of_reference") >> set_product_ctx; set_product_ctx->createEmpty(); set_product_ctx->Add(id_product_context); OdDAI::Set * set_1; inst_product_rel_product_category->getAttr("products") >> set_1; set_1->createEmpty(); set_1->Add(id_product); OdDAI::ApplicationInstancePtr inst_product_category_relationship = model->createEntityInstance("product_category_relationship"); OdDAIObjectId id_product_category_relationship = model->appendEntityInstance(inst_product_category_relationship); inst_product_category_relationship->putAttr("name", (OdAnsiString)""); inst_product_category_relationship->putAttr("sub_category", id_product_rel_product_category); OdDAI::ApplicationInstancePtr inst_product_category = model->createEntityInstance("product_category"); OdDAIObjectId id_product_category = model->appendEntityInstance(inst_product_category); inst_product_category->putAttr("name", (OdAnsiString)"part"); inst_product_category->putAttr("description", (OdAnsiString)"specification"); inst_product_category_relationship->putAttr("category", id_product_category); OdDAI::ApplicationInstancePtr inst_product_defin_with_source = model->createEntityInstance("product_definition_formation_with_specified_source"); OdDAIObjectId id_product_defin_with_source = model->appendEntityInstance(inst_product_defin_with_source); inst_product_defin_with_source->putAttr("id", (OdAnsiString)"---.000"); inst_product_defin_with_source->putAttr("description", (OdAnsiString)" "); inst_product_defin_with_source->putAttr("of_product", id_product); inst_product_defin_with_source->putAttr("make_or_buy", (OdAnsiString)"NOT_KNOWN"); OdDAI::ApplicationInstancePtr inst_product_definition = model->createEntityInstance("product_definition"); OdDAIObjectId id_product_definition = model->appendEntityInstance(inst_product_definition); inst_product_definition->putAttr("id", (OdAnsiString)"as1"); inst_product_definition->putAttr("frame_of_reference", id_product_definition_context); inst_product_definition->putAttr("formation", id_product_defin_with_source); OdDAI::ApplicationInstancePtr inst_product_definition_shape = model->createEntityInstance("product_definition_shape"); OdDAIObjectId id_product_definition_shape = model->appendEntityInstance(inst_product_definition_shape); inst_product_definition_shape->putAttr("name", (OdAnsiString)""); inst_product_definition_shape->putAttr("definition", id_product_definition); OdDAI::ApplicationInstancePtr inst_shape_definition_representation = model->createEntityInstance("shape_definition_representation"); OdDAIObjectId id_shape_definition_representation = model->appendEntityInstance(inst_shape_definition_representation); inst_shape_definition_representation->putAttr("definition", id_product_definition_shape); OdDAI::ApplicationInstancePtr inst_shape_representation = model->createEntityInstance("shape_representation"); OdDAIObjectId id_shape_representation = model->appendEntityInstance(inst_shape_representation); inst_shape_representation->putAttr("name", (OdAnsiString)""); inst_shape_definition_representation->putAttr("used_representation", id_shape_representation); OdDAI::ApplicationInstancePtr inst_axis2placement_1 = model->createEntityInstance("axis2_placement_3d"); OdDAIObjectId id_axis2placement_1 = model->appendEntityInstance(inst_axis2placement_1); inst_axis2placement_1->putAttr("name", (OdAnsiString)""); OdDAIObjectId point_1 = createCartesianPoint(model, "", 0., 0., 0.); inst_axis2placement_1->putAttr("location", point_1); OdDAI::Set* set_repr_items; inst_shape_representation->getAttr("items") >> set_repr_items; set_repr_items->createEmpty(); set_repr_items->Add(id_axis2placement_1); OdDAI::EntityPtr geom_rep_context = workSchema->find("geometric_representation_context"); OdDAI::EntityPtr global_unsert_assigned_context = workSchema->find("global_uncertainty_assigned_context"); OdDAI::EntityPtr global_unit_assigned_context = workSchema->find("global_unit_assigned_context"); OdDAI::EntityPtr representation_context = workSchema->find("representation_context"); OdDAI::List complex_ent_1; complex_ent_1.createEmpty(); complex_ent_1.addByIndex(0, geom_rep_context); complex_ent_1.addByIndex(1, global_unsert_assigned_context); complex_ent_1.addByIndex(2, global_unit_assigned_context); complex_ent_1.addByIndex(3, representation_context); OdDAI::EntityPtr complexEntity_Units = workSchema->getComplexEntity(complex_ent_1); OdDAI::ApplicationInstancePtr inst_complex_ent_1 = model->createEntityInstance(complexEntity_Units); OdDAIObjectId id_complex_ent_1 = model->appendEntityInstance(inst_complex_ent_1); inst_complex_ent_1->putAttr("coordinate_space_dimension", 3); inst_complex_ent_1->putAttr("context_identifier", (OdAnsiString)"NONE"); inst_complex_ent_1->putAttr("context_type", (OdAnsiString)"WORKSPACE"); OdDAI::ApplicationInstancePtr inst_uncertanty_measure_unit = model->createEntityInstance("uncertainty_measure_with_unit"); inst_uncertanty_measure_unit->putAttr("name", (OdAnsiString)""); inst_uncertanty_measure_unit->putAttr("description", (OdAnsiString)""); OdDAI::Select* value_component; inst_uncertanty_measure_unit->getAttr("value_component") >> value_component; value_component->setDouble(0.005); OdDAI::Set * set_2; inst_complex_ent_1->getAttr("uncertainty") >> set_2; set_2->createEmpty(); set_2->Add(model->appendEntityInstance(inst_uncertanty_measure_unit)); OdDAI::EntityPtr ent_named_unit = workSchema->find("named_unit"); OdDAI::EntityPtr ent_conversion_based_unit = workSchema->find("conversion_based_unit"); OdDAI::EntityPtr ent_length_unit = workSchema->find("length_unit"); OdDAI::EntityPtr ent_si_unit = workSchema->find("si_unit"); OdDAI::EntityPtr ent_plane_angle_unit = workSchema->find("plane_angle_unit"); OdDAI::EntityPtr ent_solid_angle_unit = workSchema->find("solid_angle_unit"); OdDAI::List complex_ent_2; complex_ent_2.createEmpty(); complex_ent_2.addByIndex(0, ent_length_unit); complex_ent_2.addByIndex(1, ent_named_unit); complex_ent_2.addByIndex(2, ent_si_unit); OdDAI::EntityPtr complexEntity_2 = workSchema->getComplexEntity(complex_ent_2); OdDAI::ApplicationInstancePtr inst_complex_ent_2 = model->createEntityInstance(complexEntity_2); OdDAIObjectId id_complex_ent_2 = model->appendEntityInstance(inst_complex_ent_2); inst_complex_ent_2->putAttr("name", (OdAnsiString)"METRE"); inst_complex_ent_2->putAttr("prefix", (OdAnsiString)"MILLI"); inst_uncertanty_measure_unit->putAttr("unit_component", id_complex_ent_2); OdDAI::List complex_ent_3; complex_ent_3.createEmpty(); complex_ent_3.addByIndex(0, ent_named_unit); complex_ent_3.addByIndex(1, ent_plane_angle_unit); complex_ent_3.addByIndex(2, ent_si_unit); OdDAI::EntityPtr complexEntity_3 = workSchema->getComplexEntity(complex_ent_3); OdDAI::ApplicationInstancePtr inst_complex_ent_3 = model->createEntityInstance(complexEntity_3); OdDAIObjectId id_complex_ent_3 = model->appendEntityInstance(inst_complex_ent_3); inst_complex_ent_3->putAttr("name", (OdAnsiString)"RADIAN"); OdDAI::List complex_ent_4; complex_ent_4.createEmpty(); complex_ent_4.addByIndex(0, ent_named_unit); complex_ent_4.addByIndex(1, ent_solid_angle_unit); complex_ent_4.addByIndex(2, ent_si_unit); OdDAI::ApplicationInstancePtr complexEntity_4 = model->createEntityInstance(workSchema->getComplexEntity(complex_ent_4)); OdDAIObjectId id_complex_ent_4 = model->appendEntityInstance(complexEntity_4); complexEntity_4->putAttr("name", (OdAnsiString)"STERADIAN"); OdDAI::Set * set_3; inst_complex_ent_1->getAttr("units") >> set_3; set_3->createEmpty(); set_3->Add(OdRxValue(id_complex_ent_2)); set_3->Add(OdRxValue(id_complex_ent_3)); set_3->Add(OdRxValue(id_complex_ent_4)); inst_shape_representation->putAttr("context_of_items", id_complex_ent_1); // Creating child product OdDAI::ApplicationInstancePtr inst_product_rel_product_category_child = model->createEntityInstance("product_related_product_category"); inst_product_rel_product_category_child->putAttr("name", (OdAnsiString)"Child_product"); inst_product_rel_product_category_child->putAttr("description", (OdAnsiString)" "); OdDAIObjectId id_product_rel_product_category_child = model->appendEntityInstance(inst_product_rel_product_category_child); OdDAI::ApplicationInstancePtr inst_product_child = model->createEntityInstance("product"); OdDAIObjectId id_product_child = model->appendEntityInstance(inst_product_child); inst_product_child->putAttr("name", (OdAnsiString)"Child product"); inst_product_child->putAttr("id", (OdAnsiString)"Child product"); OdDAI::Set* set_product_ctx_2; inst_product_child->getAttr("frame_of_reference") >> set_product_ctx_2; set_product_ctx_2->createEmpty(); set_product_ctx_2->Add(id_product_context); OdDAI::Set * set_4; inst_product_rel_product_category_child->getAttr("products") >> set_4; set_4->createEmpty(); set_4->Add(id_product_child); OdDAI::ApplicationInstancePtr inst_product_defin_with_source_child = model->createEntityInstance("product_definition_formation_with_specified_source"); OdDAIObjectId id_product_defin_with_source_child = model->appendEntityInstance(inst_product_defin_with_source_child); inst_product_defin_with_source_child->putAttr("id", (OdAnsiString)"---.000"); inst_product_defin_with_source_child->putAttr("description", (OdAnsiString)" "); inst_product_defin_with_source_child->putAttr("of_product", id_product_child); inst_product_defin_with_source_child->putAttr("make_or_buy", (OdAnsiString)"NOT_KNOWN"); OdDAI::ApplicationInstancePtr inst_product_definition_child = model->createEntityInstance("product_definition"); OdDAIObjectId id_product_definition_child = model->appendEntityInstance(inst_product_definition_child); inst_product_definition_child->putAttr("id", (OdAnsiString)"Child"); inst_product_definition_child->putAttr("frame_of_reference", id_product_definition_context); inst_product_definition_child->putAttr("formation", id_product_defin_with_source_child); OdDAI::ApplicationInstancePtr inst_product_definition_shape_child = model->createEntityInstance("product_definition_shape"); OdDAIObjectId id_product_definition_shape_child = model->appendEntityInstance(inst_product_definition_shape_child); inst_product_definition_shape_child->putAttr("name", (OdAnsiString)""); inst_product_definition_shape_child->putAttr("definition", id_product_definition_child); OdDAI::ApplicationInstancePtr inst_shape_definition_representation_child = model->createEntityInstance("shape_definition_representation"); OdDAIObjectId id_shape_definition_representation_child = model->appendEntityInstance(inst_shape_definition_representation_child); inst_shape_definition_representation_child->putAttr("definition", id_product_definition_shape_child); OdDAI::ApplicationInstancePtr inst_shape_representation_child = model->createEntityInstance("shape_representation"); OdDAIObjectId id_shape_representation_child = model->appendEntityInstance(inst_shape_representation_child); inst_shape_representation_child->putAttr("name", (OdAnsiString)"name"); inst_shape_definition_representation_child->putAttr("used_representation", id_shape_representation_child); OdDAI::ApplicationInstancePtr inst_axis2placement_2 = model->createEntityInstance("axis2_placement_3d"); OdDAIObjectId id_axis2placement_2 = model->appendEntityInstance(inst_axis2placement_2); inst_axis2placement_2->putAttr("name", (OdAnsiString)""); OdDAIObjectId point_2 = createCartesianPoint(model, "", 0., 0., 0.); inst_axis2placement_2->putAttr("location", point_2); OdDAI::Set* set_repr_items_2; inst_shape_representation_child->getAttr("items") >> set_repr_items_2; set_repr_items_2->createEmpty(); set_repr_items_2->Add(id_axis2placement_2); OdDAI::ApplicationInstancePtr inst_complex_ent_5 = model->createEntityInstance(complexEntity_Units); OdDAIObjectId id_complex_ent_5 = model->appendEntityInstance(inst_complex_ent_5); inst_complex_ent_5->putAttr("coordinate_space_dimension", 3); inst_complex_ent_5->putAttr("context_identifier", (OdAnsiString)"NONE"); inst_complex_ent_5->putAttr("context_type", (OdAnsiString)"WORKSPACE"); OdDAI::ApplicationInstancePtr inst_uncertanty_measure_unit_child = model->createEntityInstance("uncertainty_measure_with_unit"); inst_uncertanty_measure_unit_child->putAttr("name", (OdAnsiString)""); inst_uncertanty_measure_unit_child->putAttr("description", (OdAnsiString)""); OdDAI::Select* value_component_2; inst_uncertanty_measure_unit_child->getAttr("value_component") >> value_component_2; value_component_2->setDouble(0.005); OdDAI::Set * set_5; inst_complex_ent_5->getAttr("uncertainty") >> set_5; set_5->createEmpty(); set_5->Add(model->appendEntityInstance(inst_uncertanty_measure_unit_child)); OdDAI::ApplicationInstancePtr inst_complex_ent_6 = model->createEntityInstance(complexEntity_2); OdDAIObjectId id_complex_ent_6 = model->appendEntityInstance(inst_complex_ent_6); inst_complex_ent_6->putAttr("name", (OdAnsiString)"METRE"); inst_complex_ent_6->putAttr("prefix", (OdAnsiString)"MILLI"); inst_uncertanty_measure_unit_child->putAttr("unit_component", id_complex_ent_6); OdDAI::ApplicationInstancePtr inst_complex_ent_7 = model->createEntityInstance(complexEntity_3); OdDAIObjectId id_complex_ent_7 = model->appendEntityInstance(inst_complex_ent_7); inst_complex_ent_7->putAttr("name", (OdAnsiString)"RADIAN"); OdDAI::ApplicationInstancePtr complexEntity_8 = model->createEntityInstance(workSchema->getComplexEntity(complex_ent_4)); OdDAIObjectId id_complex_ent_8 = model->appendEntityInstance(complexEntity_8); complexEntity_8->putAttr("name", (OdAnsiString)"STERADIAN"); OdDAI::Set * set_6; inst_complex_ent_5->getAttr("units") >> set_6; set_6->createEmpty(); set_6->Add(OdRxValue(id_complex_ent_6)); set_6->Add(OdRxValue(id_complex_ent_7)); set_6->Add(OdRxValue(id_complex_ent_8)); inst_shape_representation_child->putAttr("context_of_items", id_complex_ent_5); // connecting file to child product OdDAI::ApplicationInstancePtr inst_document_file = model->createEntityInstance("document_file"); OdDAIObjectId id_document_file = model->appendEntityInstance(inst_document_file); inst_document_file->putAttr("name", (OdAnsiString)""); if(referenceStepFile.isEmpty()) inst_document_file->putAttr("id", (OdAnsiString)"C:\\Path_to_file_here.stp"); else inst_document_file->putAttr("id", (OdAnsiString)referenceStepFile); OdDAI::ApplicationInstancePtr inst_document_type = model->createEntityInstance("document_type"); inst_document_type->putAttr("product_data_type", (OdAnsiString)"geometry"); inst_document_file->putAttr("kind", model->appendEntityInstance(inst_document_type)); OdDAI::ApplicationInstancePtr inst_applied_external_identification_assignment = model->createEntityInstance("applied_external_identification_assignment"); OdDAIObjectId id_applied_external_identification_assignment = model->appendEntityInstance(inst_applied_external_identification_assignment); inst_applied_external_identification_assignment->putAttr("assigned_id", (OdAnsiString)" "); OdDAI::Set* set_repr_items_3; inst_applied_external_identification_assignment->getAttr("items") >> set_repr_items_3; set_repr_items_3->createEmpty(); set_repr_items_3->Add(OdRxValue(id_document_file)); OdDAI::ApplicationInstancePtr inst_external_source = model->createEntityInstance("external_source"); OdDAIObjectId id_external_source = model->appendEntityInstance(inst_external_source); inst_applied_external_identification_assignment->putAttr("source", id_external_source); OdDAI::ApplicationInstancePtr inst_identification_role = model->createEntityInstance("identification_role"); OdDAIObjectId id_identification_role = model->appendEntityInstance(inst_identification_role); inst_identification_role->putAttr("name", (OdAnsiString)"external document id and location"); inst_applied_external_identification_assignment->putAttr("role", id_identification_role); OdDAI::ApplicationInstancePtr inst_applied_document_reference = model->createEntityInstance("applied_document_reference"); OdDAIObjectId id_applied_document_reference = model->appendEntityInstance(inst_applied_document_reference); inst_applied_document_reference->putAttr("assigned_document", id_document_file); OdDAI::Set* set_repr_items_4; inst_applied_document_reference->getAttr("items") >> set_repr_items_4; set_repr_items_4->createEmpty(); set_repr_items_4->Add(OdRxValue(id_product_definition_child)); // connecting child product to perent product OdDAI::ApplicationInstancePtr inst_next_assembly_usage_occurrence = model->createEntityInstance("next_assembly_usage_occurrence"); OdDAIObjectId id_next_assembly_usage_occurrence = model->appendEntityInstance(inst_next_assembly_usage_occurrence); inst_next_assembly_usage_occurrence->putAttr("id", (OdAnsiString)"Product connection"); inst_next_assembly_usage_occurrence->putAttr("name", (OdAnsiString)" "); inst_next_assembly_usage_occurrence->putAttr("relating_product_definition", id_product_definition); inst_next_assembly_usage_occurrence->putAttr("related_product_definition", id_product_definition_child); OdDAI::ApplicationInstancePtr inst_product_definition_shape_connection = model->createEntityInstance("product_definition_shape"); OdDAIObjectId id_product_definition_shape_connection = model->appendEntityInstance(inst_product_definition_shape_connection); inst_product_definition_shape_connection->putAttr("name", (OdAnsiString)""); inst_product_definition_shape_connection->putAttr("definition", id_next_assembly_usage_occurrence); OdDAI::ApplicationInstancePtr inst_context_dependent_shape_representation = model->createEntityInstance("context_dependent_shape_representation"); OdDAIObjectId id_context_dependent_shape_representation = model->appendEntityInstance(inst_context_dependent_shape_representation); inst_context_dependent_shape_representation->putAttr("represented_product_relation", id_product_definition_shape_connection); OdDAI::EntityPtr ent_representation_relationship = workSchema->find("representation_relationship"); OdDAI::EntityPtr ent_representation_relationship_with_transformation = workSchema->find("representation_relationship_with_transformation"); OdDAI::EntityPtr ent_shape_representation_relationship = workSchema->find("shape_representation_relationship"); OdDAI::List complex_ent_connection; complex_ent_connection.createEmpty(); complex_ent_connection.addByIndex(0, ent_representation_relationship); complex_ent_connection.addByIndex(1, ent_representation_relationship_with_transformation); complex_ent_connection.addByIndex(2, ent_shape_representation_relationship); OdDAI::EntityPtr complexEntity_connection = workSchema->getComplexEntity(complex_ent_connection); OdDAI::ApplicationInstancePtr inst_complex_ent_connection = model->createEntityInstance(complexEntity_connection); OdDAIObjectId id_complex_ent_connection = model->appendEntityInstance(inst_complex_ent_connection); inst_complex_ent_connection->putAttr("rep_1", id_shape_representation_child); inst_complex_ent_connection->putAttr("rep_2", id_shape_representation); inst_complex_ent_connection->putAttr("name", (OdAnsiString)""); OdDAI::ApplicationInstancePtr inst_item_defined_transformation = model->createEntityInstance("item_defined_transformation"); OdDAIObjectId id_item_defined_transformation = model->appendEntityInstance(inst_item_defined_transformation); inst_complex_ent_connection->putAttr("transformation_operator", id_item_defined_transformation); inst_item_defined_transformation->putAttr("name", (OdAnsiString)""); OdDAI::ApplicationInstancePtr inst_axis2placement_3 = model->createEntityInstance("axis2_placement_3d"); OdDAIObjectId id_axis2placement_3 = model->appendEntityInstance(inst_axis2placement_3); inst_axis2placement_3->putAttr("name", (OdAnsiString)""); OdDAIObjectId point_3 = createCartesianPoint(model, "", 0., 0., 0.); OdDAIObjectId axis_1 = createDirection(model, "", 0., 0., 1.); OdDAIObjectId ref_direction_1 = createDirection(model, "", 1., 0., 0.); inst_axis2placement_3->putAttr("location", point_3); inst_axis2placement_3->putAttr("axis", axis_1); inst_axis2placement_3->putAttr("ref_direction", ref_direction_1); inst_item_defined_transformation->putAttr("transform_item_1", id_axis2placement_3); OdDAI::ApplicationInstancePtr inst_axis2placement_4 = model->createEntityInstance("axis2_placement_3d"); OdDAIObjectId id_axis2placement_4 = model->appendEntityInstance(inst_axis2placement_4); inst_axis2placement_4->putAttr("name", (OdAnsiString)""); OdDAIObjectId point_4 = createCartesianPoint(model, "", 0., 0., 0.); OdDAIObjectId axis_2 = createDirection(model, "", 0., 0., 1.); OdDAIObjectId ref_direction_2 = createDirection(model, "", 1., 0., 0.); inst_axis2placement_4->putAttr("location", point_4); inst_axis2placement_4->putAttr("axis", axis_2); inst_axis2placement_4->putAttr("ref_direction", ref_direction_2); inst_item_defined_transformation->putAttr("transform_item_2", id_axis2placement_4); inst_context_dependent_shape_representation->putAttr("representation_relation", id_complex_ent_connection); } repo->writeFile(fileName); session->closeRepo(repo); odPrintConsoleString(L"\n"); oddaiCloseCurrentSession(); return StepTutorial::ExecutionResult::eSucceed; }