/////////////////////////////////////////////////////////////////////////////// // 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 #include "ExIgesTutorial_04.h" #include "RxValue.h" #include "IgesEntities.h" #include "IgesSelectTypes.h" #include using namespace OdDAI; namespace { void setGeometricData(Iges::geometricPtr pGeometric, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color) { pGeometric->setlabel(label); pGeometric->level().setint_val(level); pGeometric->setsubscript(subscript); pGeometric->setblank(blank); pGeometric->color().setcolor_number(color); } Iges::linePtr createLine(OdDAI::Model* pModel, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color, Iges::line_pattern line_font, Iges::subordinate_switch subordinate, Iges::use_flag used, int lineWeight, double x1, double y1, double z1, double x2, double y2, double z2, int form) { Iges::linePtr pLine = Iges::line::createObject(pModel); setGeometricData(pLine, label, level, subscript, blank, color); pLine->setsubordinate(subordinate); pLine->setused(used); pLine->line_font().setline_pattern(line_font); pLine->setline_weight(lineWeight); pLine->setform(form); pLine->setFrom(OdGePoint3d(x1, y1, z1), OdGePoint3d(x2, y2, z2)); return pLine; } Iges::surface_of_revolutionPtr createSurfaceOfRevolution(OdDAI::Model* pModel, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color, Iges::line_pattern line_font, Iges::subordinate_switch subordinate, Iges::use_flag used, int lineWeight, OdDAIObjectId l, OdDAIObjectId c, double sa, double ta) { Iges::surface_of_revolutionPtr pSurfaceOfRevolution = Iges::surface_of_revolution::createObject(pModel); setGeometricData(pSurfaceOfRevolution, label, level, subscript, blank, color); pSurfaceOfRevolution->line_font().setline_pattern(line_font); pSurfaceOfRevolution->setsubordinate(subordinate); pSurfaceOfRevolution->setused(used); pSurfaceOfRevolution->setline_weight(lineWeight); pSurfaceOfRevolution->setl(l); pSurfaceOfRevolution->setc(c); pSurfaceOfRevolution->setsa(sa); pSurfaceOfRevolution->setta(ta); return pSurfaceOfRevolution; } Iges::transformation_matrixPtr createTransformationMatrix(OdDAI::Model* pModel, OdAnsiString label, int subscript, Iges::blank_status blank, Iges::color_number color, int lineWeight, int form, double r11, double r12, double r13, double t1, double r21, double r22, double r23, double t2, double r31, double r32, double r33, double t3) { Iges::transformation_matrixPtr pTransformationMatrix = Iges::transformation_matrix::createObject(pModel); setGeometricData(pTransformationMatrix, label, 0, subscript, blank, color); pTransformationMatrix->setform(form); OdGeMatrix3d matrix; matrix[0][0] = r11; matrix[0][1] = r12; matrix[0][2] = r13; matrix[0][3] = t1; matrix[1][0] = r21; matrix[1][1] = r22; matrix[1][2] = r23; matrix[1][3] = t2; matrix[2][0] = r31; matrix[2][1] = r32; matrix[2][2] = r33; matrix[2][3] = t3; pTransformationMatrix->setFrom(matrix); return pTransformationMatrix; } Iges::circular_arcPtr createCircularArc(OdDAI::Model* pModel, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color, Iges::line_pattern line_font, Iges::subordinate_switch subordinate, Iges::use_flag used, OdDAIObjectId transformationMatrix, int lineWeight, double zt, double x1, double y1, double x2, double y2, double x3, double y3) { Iges::circular_arcPtr pCircularArc = Iges::circular_arc::createObject(pModel); setGeometricData(pCircularArc, label, level, subscript, blank, color); pCircularArc->setsubordinate(subordinate); pCircularArc->setused(used); pCircularArc->line_font().setline_pattern(line_font); if(!transformationMatrix.isNull()) pCircularArc->settransformation(transformationMatrix); pCircularArc->setline_weight(lineWeight); OdGePoint3d center(x1, y1, zt); OdGePoint3d start(x2, y2, zt); OdGePoint3d end(x3, y3, zt); OdGeVector3d normal(OdGeVector3d::kZAxis); OdGeVector3d refVector(OdGeVector3d::kXAxis); double radius = (start - center).length(); double startAngle = (start - center).convert2d().angle(), endAngle = (end - center).convert2d().angle(); OdGeCircArc3d circArc3d(center, normal, refVector, radius, startAngle, endAngle); pCircularArc->setFrom(circArc3d); //pCircularArc->setzt(zt); //pCircularArc->setx1(x1); //pCircularArc->sety1(y1); //pCircularArc->setx2(x2); //pCircularArc->sety2(y2); //pCircularArc->setx3(x3); //pCircularArc->sety3(y3); return pCircularArc; } Iges::composite_curvePtr createCompositeCurve(OdDAI::Model* pModel, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color, Iges::line_pattern line_font, Iges::subordinate_switch subordinate, Iges::use_flag used, int lineWeight) { Iges::composite_curvePtr pCompositeCurve = Iges::composite_curve::createObject(pModel); setGeometricData(pCompositeCurve, label, level, subscript, blank, color); pCompositeCurve->setsubordinate(subordinate); pCompositeCurve->setused(used); pCompositeCurve->line_font().setline_pattern(line_font); pCompositeCurve->setline_weight(lineWeight); return pCompositeCurve; } Iges::curve_on_a_parametric_surfacePtr createCurveOnAParametricSurface(OdDAI::Model* pModel, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color, Iges::line_pattern line_font, Iges::subordinate_switch subordinate, int lineWeight, Iges::creationMethod crtn, OdDAIObjectId sptr, OdDAIObjectId bptr, OdDAIObjectId cptr, int pref) { Iges::curve_on_a_parametric_surfacePtr pCurveOnAParametricSurface = Iges::curve_on_a_parametric_surface::createObject(pModel); setGeometricData(pCurveOnAParametricSurface, label, level, subscript, blank, color); pCurveOnAParametricSurface->setsubordinate(subordinate); pCurveOnAParametricSurface->line_font().setline_pattern(line_font); pCurveOnAParametricSurface->setline_weight(lineWeight); pCurveOnAParametricSurface->setcrtn(crtn); if(!sptr.isNull()) pCurveOnAParametricSurface->setsptr(sptr); if(!bptr.isNull()) pCurveOnAParametricSurface->setbptr(bptr); if(!cptr.isNull()) pCurveOnAParametricSurface->setcptr(cptr); pCurveOnAParametricSurface->setpref(pref); return pCurveOnAParametricSurface; } Iges::trimmed_parametric_surfacePtr createTrimmedParametricSurface(OdDAI::Model* pModel, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color, Iges::line_pattern line_font, Iges::subordinate_switch subordinate, int lineWeight, OdDAIObjectId pts, int n1, OdDAIObjectId pto) { Iges::trimmed_parametric_surfacePtr pTrimmedParametricSurface = Iges::trimmed_parametric_surface::createObject(pModel); setGeometricData(pTrimmedParametricSurface, label, level, subscript, blank, color); pTrimmedParametricSurface->setsubordinate(subordinate); pTrimmedParametricSurface->line_font().setline_pattern(line_font); pTrimmedParametricSurface->setline_weight(lineWeight); pTrimmedParametricSurface->setpts(pts); pTrimmedParametricSurface->setn1(n1); pTrimmedParametricSurface->setpto(pto); return pTrimmedParametricSurface; } Iges::tabulated_cylinderPtr createTabulatedCylinder(OdDAI::Model* pModel, OdAnsiString label, int level, int subscript, Iges::blank_status blank, Iges::color_number color, Iges::line_pattern line_font, Iges::subordinate_switch subordinate, Iges::use_flag used, int lineWeight, OdDAIObjectId de, double lx, double ly, double lz) { Iges::tabulated_cylinderPtr pTabulatedCylinder = Iges::tabulated_cylinder::createObject(pModel); setGeometricData(pTabulatedCylinder, label, level, subscript, blank, color); pTabulatedCylinder->setsubordinate(subordinate); pTabulatedCylinder->setused(used); pTabulatedCylinder->line_font().setline_pattern(line_font); pTabulatedCylinder->setline_weight(lineWeight); if (!de.isNull()) pTabulatedCylinder->setde(de); pTabulatedCylinder->setlx(lx); pTabulatedCylinder->setly(ly); pTabulatedCylinder->setlz(lz); return pTabulatedCylinder; } void createCylinder(IgesFilePtr igesFile, Iges::views_visiblePtr viewsVisible, OdDAI::ListOfOdDAIObjectId& de) { if (igesFile) { OdDAI::Model* pModel = igesFile->getModel(); Iges::linePtr pLine1 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 2., 1., 0., 2., 1., 1., 0); Iges::linePtr pLine2 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 3., 1., 1.5, 3., 1., 0., 0); Iges::surface_of_revolutionPtr pSurfaceOfRevolution1 = createSurfaceOfRevolution(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, pLine1->id(), pLine2->id(), 0., 6.2831853071795898); Iges::linePtr pLine3 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 3., 1., 1.5, 3., 1., 0., 0); Iges::transformation_matrixPtr pTransformationMatrix1 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., 1., 0., 1., 0., 0., 1., 0.); Iges::circular_arcPtr pCircularArc1 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix1->id(), 0, 0., 0., 0., 1., 0., -1., 0.); Iges::linePtr pLine4 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 1., 1., 0., 1., 1., 1.5, 0); Iges::transformation_matrixPtr pTransformationMatrix2 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., -1., 0., 1., 0., 0., -1., 1.5); Iges::circular_arcPtr pCircularArc2 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix2->id(), 0, 0., 0., 0., -1., 0., 1., 0.); Iges::composite_curvePtr pCompositeCurve1 = createCompositeCurve(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0); OdDAI::ListOfSelect& de1 = pCompositeCurve1->de(); de1.createEmpty(); { OdDAI::Select select1 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select2 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select3 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select4 = Iges::SchemaSelects::geometric_or_connect_point(); select1.setHandle(pLine3->id()); select2.setHandle(pCircularArc1->id()); select3.setHandle(pLine4->id()); select4.setHandle(pCircularArc2->id()); de1.putByIndex(de1.getMemberCount(), select1); de1.putByIndex(de1.getMemberCount(), select2); de1.putByIndex(de1.getMemberCount(), select3); de1.putByIndex(de1.getMemberCount(), select4); } Iges::curve_on_a_parametric_surfacePtr pCurveOnAParametricSurface1 = createCurveOnAParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, 0, Iges::kcreationMethod_projection, pSurfaceOfRevolution1->id(), OdDAIObjectId(), pCompositeCurve1->id(), 2); Iges::trimmed_parametric_surfacePtr pTrimmedParametricSurface1 = createTrimmedParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_white, Iges::kline_pattern_none, Iges::ksubordinate_switch_independent, 0, pSurfaceOfRevolution1->id(), 1, pCurveOnAParametricSurface1->id()); if(!viewsVisible.isNull()) pTrimmedParametricSurface1->view().setviews_visible(viewsVisible); de.addByIndex(de.getMemberCount(), pTrimmedParametricSurface1->id()); Iges::linePtr pLine5 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 2., 1., 0., 2., 1., 1., 0); Iges::linePtr pLine6 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 3., 1., 1.5, 3., 1., 0., 0); Iges::surface_of_revolutionPtr pSurfaceOfRevolution2 = createSurfaceOfRevolution(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, pLine5->id(), pLine6->id(), 0., 6.2831853071795898); Iges::linePtr pLine7 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 3., 1., 0., 3., 1., 1.5, 0); Iges::transformation_matrixPtr pTransformationMatrix3 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., -1., 0., 1., 0., 0., -1., 1.5); Iges::circular_arcPtr pCircularArc3 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix3->id(), 0, 0., 0., 0., 1., 0., -1., 0.); Iges::linePtr pLine8 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 1., 1., 1.5, 1., 1., 0., 0); Iges::transformation_matrixPtr pTransformationMatrix4 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., 1., 0., 1., 0., 0., 1., 0.); Iges::circular_arcPtr pCircularArc4 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix4->id(), 0, 0., 0., 0., -1., 0., 1., 0.); Iges::composite_curvePtr pCompositeCurve2 = createCompositeCurve(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0); OdDAI::ListOfSelect& de2 = pCompositeCurve2->de(); de2.createEmpty(); { OdDAI::Select select1 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select2 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select3 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select4 = Iges::SchemaSelects::geometric_or_connect_point(); select1.setHandle(pLine7->id()); select2.setHandle(pCircularArc3->id()); select3.setHandle(pLine8->id()); select4.setHandle(pCircularArc4->id()); de2.putByIndex(de2.getMemberCount(), select1); de2.putByIndex(de2.getMemberCount(), select2); de2.putByIndex(de2.getMemberCount(), select3); de2.putByIndex(de2.getMemberCount(), select4); } Iges::curve_on_a_parametric_surfacePtr pCurveOnAParametricSurface2 = createCurveOnAParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, 0, Iges::kcreationMethod_projection, pSurfaceOfRevolution2->id(), OdDAIObjectId(), pCompositeCurve2->id(), 2); Iges::trimmed_parametric_surfacePtr pTrimmedParametricSurface2 = createTrimmedParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_white, Iges::kline_pattern_none, Iges::ksubordinate_switch_independent, 0, pSurfaceOfRevolution2->id(), 1, pCurveOnAParametricSurface2->id()); if (!viewsVisible.isNull()) pTrimmedParametricSurface2->view().setviews_visible(viewsVisible); de.addByIndex(de.getMemberCount(), pTrimmedParametricSurface2->id()); Iges::linePtr pLine9 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 3., 0., 0., 1., 0., 0., 0); Iges::tabulated_cylinderPtr pTabulatedCylinder1 = createTabulatedCylinder(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, pLine9->id(), 3., 2., 0.); Iges::transformation_matrixPtr pTransformationMatrix5 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., -1., 0., 1., 0., 0., -1., 0.); Iges::circular_arcPtr pCircularArc5 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix5->id(), 0, 0., 0., 0., -1., 0., 1., 0.); Iges::transformation_matrixPtr pTransformationMatrix6 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., -1., 0., 1., 0., 0., -1., 0.); Iges::circular_arcPtr pCircularArc6 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix6->id(), 0, 0., 0., 0., 1., 0., -1., 0.); Iges::composite_curvePtr pCompositeCurve3 = createCompositeCurve(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0); OdDAI::ListOfSelect& de3 = pCompositeCurve3->de(); de3.createEmpty(); { OdDAI::Select select1 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select2 = Iges::SchemaSelects::geometric_or_connect_point(); select1.setHandle(pCircularArc5->id()); select2.setHandle(pCircularArc6->id()); de3.putByIndex(de3.getMemberCount(), select1); de3.putByIndex(de3.getMemberCount(), select2); } Iges::curve_on_a_parametric_surfacePtr pCurveOnAParametricSurface3 = createCurveOnAParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, 0, Iges::kcreationMethod_projection, pTabulatedCylinder1->id(), OdDAIObjectId(), pCompositeCurve3->id(), 2); Iges::trimmed_parametric_surfacePtr pTrimmedParametricSurface3 = createTrimmedParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_white, Iges::kline_pattern_none, Iges::ksubordinate_switch_independent, 0, pTabulatedCylinder1->id(), 1, pCurveOnAParametricSurface3->id()); if (!viewsVisible.isNull()) pTrimmedParametricSurface3->view().setviews_visible(viewsVisible); de.addByIndex(de.getMemberCount(), pTrimmedParametricSurface3->id()); Iges::linePtr pLine10 = createLine(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, 1., 0., 1.5, 3., 0., 1.5, 0); Iges::tabulated_cylinderPtr pTabulatedCylinder2 = createTabulatedCylinder(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0, pLine10->id(), 1., 2., 1.5); Iges::transformation_matrixPtr pTransformationMatrix7 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., 1., 0., 1., 0., 0., 1., 1.5); Iges::circular_arcPtr pCircularArc7 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix7->id(), 0, 0., 0., 0., -1., 0., 1., 0.); Iges::transformation_matrixPtr pTransformationMatrix8 = createTransformationMatrix(pModel, "", 0, Iges::kblank_status_visible, Iges::kcolor_number_undefined, 0, 0, 1., 0., 0., 2., 0., 1., 0., 1., 0., 0., 1., 1.5); Iges::circular_arcPtr pCircularArc8 = createCircularArc(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, pTransformationMatrix8->id(), 0, 0., 0., 0., 1., 0., -1., 0.); Iges::composite_curvePtr pCompositeCurve4 = createCompositeCurve(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, Iges::kuse_flag_geometry, 0); OdDAI::ListOfSelect& de4 = pCompositeCurve4->de(); de4.createEmpty(); { OdDAI::Select select1 = Iges::SchemaSelects::geometric_or_connect_point(); OdDAI::Select select2 = Iges::SchemaSelects::geometric_or_connect_point(); select1.setHandle(pCircularArc7->id()); select2.setHandle(pCircularArc8->id()); de4.putByIndex(de4.getMemberCount(), select1); de4.putByIndex(de4.getMemberCount(), select2); } Iges::curve_on_a_parametric_surfacePtr pCurveOnAParametricSurface4 = createCurveOnAParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_black, Iges::kline_pattern_none, Iges::ksubordinate_switch_physicallyDependent, 0, Iges::kcreationMethod_projection, pTabulatedCylinder2->id(), OdDAIObjectId(), pCompositeCurve4->id(), 2); Iges::trimmed_parametric_surfacePtr pTrimmedParametricSurface4 = createTrimmedParametricSurface(pModel, "", 0, 0, Iges::kblank_status_visible, Iges::kcolor_number_white, Iges::kline_pattern_none, Iges::ksubordinate_switch_independent, 0, pTabulatedCylinder2->id(), 1, pCurveOnAParametricSurface4->id()); if (!viewsVisible.isNull()) pTrimmedParametricSurface4->view().setviews_visible(viewsVisible); de.addByIndex(de.getMemberCount(), pTrimmedParametricSurface4->id()); } } } OdResult dumpProduct(const OdDAIObjectId& id); OdResult dumpPropertySet(const OdDAIObjectId& relatingPropertyDefinition); OdResult dumpProperty(const OdDAIObjectId& propertyId); Tutorial_04::Tutorial_04(const OdString& applicationName) : BaseIgesTutorial(applicationName) { m_tutorialArgsParser .add_param( std::make_shared>(m_igesFileName, "filename", "output .iges file")); m_tutorialArgsParser .add_param( std::make_shared(m_noWait, "-NoWait", "disable \"press any key\" on finish.")); } int Tutorial_04::run(MyServices& svcs, const std::vector& argv, std::ostream& resultStream) { auto parseResult = BaseIgesTutorial::run(svcs, argv, resultStream); if (parseResult != 0) { return parseResult; } // Create an empty IGES database IgesFilePtr igesFile = svcs.createDatabase(); // Gets a model to fill with instances OdDAI::ModelPtr model = igesFile->getModel(sdaiRW); Iges::iges_filePtr pFile = Iges::iges_file::createObject(model); OdDAI::ListOfOdAnsiString& fileStartSection = pFile->start_section(); fileStartSection.createEmpty(); fileStartSection.addByIndex(0, "Open Design Alliance IGES SDK"); Iges::globalPtr pGlobal = Iges::global::createObject(model); pGlobal->setparameter_delimiter(","); pGlobal->setrecord_delimiter(";"); pGlobal->setnumber_of_binary_bits(32); pGlobal->setsingle_precision_magnitude(38); pGlobal->setsingle_precision_significance(6); pGlobal->setdouble_precision_magnitude(308); pGlobal->setdouble_precision_significance(15); pGlobal->setmodel_space_scale(1.); pGlobal->setunit_flag(Iges::kunitFlag_inches); pGlobal->setunits("IN"); pGlobal->setmax_num_line_weight_gradations(1000); pGlobal->setwidth_max_line_weight(5.); pGlobal->setdate_time_file_generation("20250312.152632"); pGlobal->setmax_coordinate_value(0.); pGlobal->setauthor("NULL"); pGlobal->setorganization("NULL"); pGlobal->setversion(11); pGlobal->setdrafting_standard_code(Iges::kdraftingStandardCode_none); pGlobal->setdate_time_created_modified("20250312.152632"); pGlobal->setmilspec("NULL"); pFile->setglobal_section(pGlobal->id()); Iges::name_propertyPtr nameProperty = Iges::name_property::createObject(model); nameProperty->setlabel("Label assigned"); nameProperty->setname("Name assigned"); nameProperty->setsubordinate(Iges::ksubordinate_switch_independent); // Create views_visible instance Iges::views_visiblePtr viewsVisible = Iges::views_visible::createObject(model); viewsVisible->setlabel(""); viewsVisible->setsubscript(0); OdDAI::ListOfOdDAIObjectId& dev = viewsVisible->dev(); dev.createEmpty(); OdDAI::ListOfOdDAIObjectId& de = viewsVisible->de(); de.createEmpty(); createCylinder(igesFile, viewsVisible, de); // Write model into an IGES file igesFile->writeFile(m_igesFileName); return eOk; }