tpaviot / pythonocc-core

Python package for 3D geometry CAD/BIM/CAM
GNU Lesser General Public License v3.0
1.39k stars 380 forks source link

(Bug?) XCAFDoc_Material_Tool not working when reading materials #1181

Closed LuisGMM closed 1 year ago

LuisGMM commented 1 year ago

XCAFDoc_Material_Tool seems to have unexpected behaviors.

I have modified OCC.Extend.DataExchange.read_with_attributes_step to read materials using XCAFDoc_Material_Tool in the following manner (this is only the important bit):


def read_with_attributes_step(filename: str):

    # Create an handle to a document
    doc = TDocStd_Document(TCollection_ExtendedString('File Document'))

    # Get root assembly
    shape_tool: XCAFDoc_ShapeTool = XCAFDoc_DocumentTool_ShapeTool(doc.Main())
    color_tool: XCAFDoc_ColorTool = XCAFDoc_DocumentTool_ColorTool(doc.Main())
    mat_tool: XCAFDoc_MaterialTool = XCAFDoc_DocumentTool_MaterialTool(doc.Main())

    # By default all modes are set to True (SetColorMode, SetGDTMode,SetMatMode, SetPropsMode ...)
    step_reader = STEPCAFControl_Reader()
    status = step_reader.ReadFile(filename)

    if status == IFSelect_RetDone:
        step_reader.Transfer(doc)
    else:
        log_step_reader.error(f'Unexpected read status: {status}')

    labels = TDF_LabelSequence()
    shape_tool.GetFreeShapes(labels)

    material_labels = TDF_LabelSequence()
    mat_tool.GetMaterialLabels(material_labels)

    for i in range(1, material_labels.Length()+1):

        material_name = TCollection_HAsciiString('hello')
        material_description = TCollection_HAsciiString('hello')
        material_densname = TCollection_HAsciiString('hello')
        material_densvaltype = TCollection_HAsciiString('hello')

        print(
            mat_tool.GetMaterial(
                material_labels.Value(i),
                material_name,
                material_description,
                material_densname,
                material_densvaltype
            ),
            material_name.ToCString(),
            material_densname.ToCString(),
            material_description.ToCString(),
            material_densvaltype.ToCString()
        )

The output with this file (Eight cylinders symmetrically rotated, each with a material) is:

(True, 7.85e-06) hello hello hello hello
(True, 0.0) hello hello hello hello
(True, 0.0) hello hello hello hello
(True, 0.0) hello hello hello hello
(True, 0.0) hello hello hello hello
(True, 0.0) hello hello hello hello
(True, 0.0) hello hello hello hello
(True, 0.0) hello hello hello hello

which means the function is not only not working as expected but not working at all, because that is not the return type of the OCCT's XCAFDoc_Material_Tool.Get_Material function. I add here the cpp code of that function (that evidently doesn't return a tuple):

Standard_Boolean XCAFDoc_MaterialTool::GetMaterial(const TDF_Label& MatL,
                                                   Handle(TCollection_HAsciiString)& aName,
                                                   Handle(TCollection_HAsciiString)& aDescription,
                                                   Standard_Real& aDensity,
                                                   Handle(TCollection_HAsciiString)& aDensName,
                                                   Handle(TCollection_HAsciiString)& aDensValType) const
{
  Handle(XCAFDoc_Material) MatAttr;
  if(!MatL.FindAttribute(XCAFDoc_Material::GetID(),MatAttr)) {
    return Standard_False;
  }
  aName = MatAttr->GetName();
  aDescription = MatAttr->GetDescription();
  aDensity = MatAttr->GetDensity();
  aDensName = MatAttr->GetDensName();
  aDensValType = MatAttr->GetDensValType();

  return Standard_True;
}

I have also tried to implement that functionality with XCAF_Doc_Material, without succes. This is the modified read function that I used:


def read_with_attributes_step(filename: str):

    # Create an handle to a document
    doc = TDocStd_Document(TCollection_ExtendedString('File Document'))

    # Get root assembly
    shape_tool: XCAFDoc_ShapeTool = XCAFDoc_DocumentTool_ShapeTool(doc.Main())
    color_tool: XCAFDoc_ColorTool = XCAFDoc_DocumentTool_ColorTool(doc.Main())
    mat_tool: XCAFDoc_MaterialTool = XCAFDoc_DocumentTool_MaterialTool(doc.Main())

    # By default all modes are set to True (SetColorMode, SetGDTMode,SetMatMode, SetPropsMode ...)
    step_reader = STEPCAFControl_Reader()
    status = step_reader.ReadFile(filename)

    if status == IFSelect_RetDone:
        step_reader.Transfer(doc)
    else:
        log_step_reader.error(f'Unexpected read status: {status}')

    labels = TDF_LabelSequence()
    shape_tool.GetFreeShapes(labels)

    material_labels = TDF_LabelSequence()
    mat_tool.GetMaterialLabels(material_labels)

    for i in range(1, material_labels.Length()+1):

        mat_attr = XCAFDoc_Material()
        mat_label = material_labels.Value(i)
        mat_label.FindAttribute(XCAFDoc_Material.GetID(), mat_attr)

        print('mat_attr:')
        print(mat_attr.GetDensity(),
              mat_attr.GetName(),
              mat_attr.GetDensName(),
              mat_attr.GetDensValType(),
              mat_attr.GetDescription())

And this is the deceiving output:

mat_attr:
0.0 None None None None
mat_attr:
0.0 None None None None
mat_attr:
0.0 None None None None
mat_attr:
0.0 None None None None
mat_attr:
0.0 None None None None
mat_attr:
0.0 None None None None
mat_attr:
0.0 None None None None
mat_attr:
0.0 None None None None

Note that the .ToCString() method should be called by the getter methods, but they return None...

I am not sure where the real issue is, whether it is a OCCT bug or something strange is happening in pythonocc-core. Any idea on how to solve it/proceed?

If solved, maybe this a good oportunity to add import/export materials support in DataExchange (I could do a few commits with some code I have :)

LuisGMM commented 1 year ago

I add the step contents of the file here. The materials properties to search for are: 'Material densName 1' 'Material description 1' 'Material Name 1'

The number goes from 1 to 8.

ISO-10303-21;
HEADER;
FILE_NAME('8cyl_with_headers','Time stamp: 2023-03-07 07:33:29.671877',(
    ''),(''),
  '','','');
FILE_SCHEMA(('AP214IS'));
FILE_DESCRIPTION((''),'');
ENDSEC;
DATA;
#1 = APPLICATION_PROTOCOL_DEFINITION('international standard',
  'automotive_design',2000,#2);
#2 = APPLICATION_CONTEXT(
  'core data for automotive mechanical design processes');
#3 = SHAPE_DEFINITION_REPRESENTATION(#4,#10);
#4 = PRODUCT_DEFINITION_SHAPE('','',#5);
#5 = PRODUCT_DEFINITION('design','',#6,#9);
#6 = PRODUCT_DEFINITION_FORMATION('','',#7);
#7 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#8));
#8 = PRODUCT_CONTEXT('',#2,'mechanical');
#9 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#10 = SHAPE_REPRESENTATION('',(#11,#15),#19);
#11 = AXIS2_PLACEMENT_3D('',#12,#13,#14);
#12 = CARTESIAN_POINT('',(0.,0.,0.));
#13 = DIRECTION('',(0.,0.,1.));
#14 = DIRECTION('',(1.,0.,-0.));
#15 = AXIS2_PLACEMENT_3D('',#16,#17,#18);
#16 = CARTESIAN_POINT('',(0.,0.,0.));
#17 = DIRECTION('',(0.,0.,1.));
#18 = DIRECTION('',(1.,0.,-0.));
#19 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#23)) GLOBAL_UNIT_ASSIGNED_CONTEXT(
(#20,#21,#22)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#20 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#21 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#22 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#23 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#20,
  'distance_accuracy_value','confusion accuracy');
#24 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#7));
#25 = SHAPE_DEFINITION_REPRESENTATION(#26,#32);
#26 = PRODUCT_DEFINITION_SHAPE('','',#27);
#27 = PRODUCT_DEFINITION('design','',#28,#31);
#28 = PRODUCT_DEFINITION_FORMATION('','',#29);
#29 = PRODUCT('SOLID','SOLID','',(#30));
#30 = PRODUCT_CONTEXT('',#2,'mechanical');
#31 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#32 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#33),#131);
#33 = MANIFOLD_SOLID_BREP('',#34);
#34 = CLOSED_SHELL('',(#35,#123,#127));
#35 = ADVANCED_FACE('',(#36),#49,.T.);
#36 = FACE_BOUND('',#37,.T.);
#37 = EDGE_LOOP('',(#38,#72,#95,#122));
#38 = ORIENTED_EDGE('',*,*,#39,.F.);
#39 = EDGE_CURVE('',#40,#40,#42,.T.);
#40 = VERTEX_POINT('',#41);
#41 = CARTESIAN_POINT('',(211.65287853202,95.23152229471,206.46570424998
    ));
#42 = SURFACE_CURVE('',#43,(#48,#60),.PCURVE_S1.);
#43 = CIRCLE('',#44,25.);
#44 = AXIS2_PLACEMENT_3D('',#45,#46,#47);
#45 = CARTESIAN_POINT('',(229.33054806168,77.553852765046,
    206.46570424998));
#46 = DIRECTION('',(0.57922796534,0.57922796534,0.573576436351));
#47 = DIRECTION('',(0.707106781187,-0.707106781187,-2.775557561563E-16)
  );
#48 = PCURVE('',#49,#54);
#49 = CYLINDRICAL_SURFACE('',#50,25.);
#50 = AXIS2_PLACEMENT_3D('',#51,#52,#53);
#51 = CARTESIAN_POINT('',(207.60949936144,55.832804064812,
    184.95658788682));
#52 = DIRECTION('',(0.57922796534,0.57922796534,0.573576436351));
#53 = DIRECTION('',(0.707106781187,-0.707106781187,-2.775557561563E-16)
  );
#54 = DEFINITIONAL_REPRESENTATION('',(#55),#59);
#55 = LINE('',#56,#57);
#56 = CARTESIAN_POINT('',(-6.28318530718,37.500000000001));
#57 = VECTOR('',#58,1.);
#58 = DIRECTION('',(1.,0.));
#59 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#60 = PCURVE('',#61,#66);
#61 = PLANE('',#62);
#62 = AXIS2_PLACEMENT_3D('',#63,#64,#65);
#63 = CARTESIAN_POINT('',(229.33054806168,77.553852765046,
    206.46570424998));
#64 = DIRECTION('',(0.57922796534,0.57922796534,0.573576436351));
#65 = DIRECTION('',(0.707106781187,-0.707106781187,-2.775557561563E-16)
  );
#66 = DEFINITIONAL_REPRESENTATION('',(#67),#71);
#67 = CIRCLE('',#68,25.);
#68 = AXIS2_PLACEMENT_2D('',#69,#70);
#69 = CARTESIAN_POINT('',(0.,0.));
#70 = DIRECTION('',(1.,-1.742027637139E-17));
#71 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#72 = ORIENTED_EDGE('',*,*,#73,.T.);
#73 = EDGE_CURVE('',#40,#74,#76,.T.);
#74 = VERTEX_POINT('',#75);
#75 = CARTESIAN_POINT('',(168.21078113155,51.789424894242,
    163.44747152365));
#76 = SEAM_CURVE('',#77,(#81,#88),.PCURVE_S1.);
#77 = LINE('',#78,#79);
#78 = CARTESIAN_POINT('',(189.93182983178,73.510473594476,
    184.95658788682));
#79 = VECTOR('',#80,1.);
#80 = DIRECTION('',(-0.57922796534,-0.57922796534,-0.573576436351));
#81 = PCURVE('',#49,#82);
#82 = DEFINITIONAL_REPRESENTATION('',(#83),#87);
#83 = LINE('',#84,#85);
#84 = CARTESIAN_POINT('',(-3.14159265359,3.836930773105E-13));
#85 = VECTOR('',#86,1.);
#86 = DIRECTION('',(0.,-1.));
#87 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#88 = PCURVE('',#49,#89);
#89 = DEFINITIONAL_REPRESENTATION('',(#90),#94);
#90 = LINE('',#91,#92);
#91 = CARTESIAN_POINT('',(3.14159265359,3.836930773105E-13));
#92 = VECTOR('',#93,1.);
#93 = DIRECTION('',(0.,-1.));
#94 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#95 = ORIENTED_EDGE('',*,*,#96,.F.);
#96 = EDGE_CURVE('',#74,#74,#97,.T.);
#97 = SURFACE_CURVE('',#98,(#103,#110),.PCURVE_S1.);
#98 = CIRCLE('',#99,25.);
#99 = AXIS2_PLACEMENT_3D('',#100,#101,#102);
#100 = CARTESIAN_POINT('',(185.88845066121,34.111755364579,
    163.44747152365));
#101 = DIRECTION('',(-0.57922796534,-0.57922796534,-0.573576436351));
#102 = DIRECTION('',(0.707106781187,-0.707106781187,-2.775557561563E-16)
  );
#103 = PCURVE('',#49,#104);
#104 = DEFINITIONAL_REPRESENTATION('',(#105),#109);
#105 = LINE('',#106,#107);
#106 = CARTESIAN_POINT('',(6.28318530718,-37.49999999999));
#107 = VECTOR('',#108,1.);
#108 = DIRECTION('',(-1.,0.));
#109 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#110 = PCURVE('',#111,#116);
#111 = PLANE('',#112);
#112 = AXIS2_PLACEMENT_3D('',#113,#114,#115);
#113 = CARTESIAN_POINT('',(185.88845066121,34.111755364579,
    163.44747152365));
#114 = DIRECTION('',(-0.57922796534,-0.57922796534,-0.573576436351));
#115 = DIRECTION('',(-0.707106781187,0.707106781187,2.775557561563E-16)
  );
#116 = DEFINITIONAL_REPRESENTATION('',(#117),#121);
#117 = CIRCLE('',#118,25.);
#118 = AXIS2_PLACEMENT_2D('',#119,#120);
#119 = CARTESIAN_POINT('',(0.,0.));
#120 = DIRECTION('',(-1.,-1.742027637139E-17));
#121 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#122 = ORIENTED_EDGE('',*,*,#73,.F.);
#123 = ADVANCED_FACE('',(#124),#111,.T.);
#124 = FACE_BOUND('',#125,.T.);
#125 = EDGE_LOOP('',(#126));
#126 = ORIENTED_EDGE('',*,*,#96,.T.);
#127 = ADVANCED_FACE('',(#128),#61,.T.);
#128 = FACE_BOUND('',#129,.T.);
#129 = EDGE_LOOP('',(#130));
#130 = ORIENTED_EDGE('',*,*,#39,.T.);
#131 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#135)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#132,#133,#134)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#132 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#133 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#134 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#135 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#132,
  'distance_accuracy_value','confusion accuracy');
#136 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#137,#139);
#137 = ( REPRESENTATION_RELATIONSHIP('','',#32,#10) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#138) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#138 = ITEM_DEFINED_TRANSFORMATION('','',#11,#15);
#139 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#140
  );
#140 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('1','','',#5,#27,$);
#141 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#29));
#142 = SHAPE_DEFINITION_REPRESENTATION(#143,#149);
#143 = PRODUCT_DEFINITION_SHAPE('','',#144);
#144 = PRODUCT_DEFINITION('design','',#145,#148);
#145 = PRODUCT_DEFINITION_FORMATION('','',#146);
#146 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#147));
#147 = PRODUCT_CONTEXT('',#2,'mechanical');
#148 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#149 = SHAPE_REPRESENTATION('',(#11,#150),#154);
#150 = AXIS2_PLACEMENT_3D('',#151,#152,#153);
#151 = CARTESIAN_POINT('',(0.,0.,0.));
#152 = DIRECTION('',(0.,0.,1.));
#153 = DIRECTION('',(1.,0.,-0.));
#154 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#158)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#155,#156,#157)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#155 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#156 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#157 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#158 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#155,
  'distance_accuracy_value','confusion accuracy');
#159 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#146));
#160 = SHAPE_DEFINITION_REPRESENTATION(#161,#167);
#161 = PRODUCT_DEFINITION_SHAPE('','',#162);
#162 = PRODUCT_DEFINITION('design','',#163,#166);
#163 = PRODUCT_DEFINITION_FORMATION('','',#164);
#164 = PRODUCT('SOLID','SOLID','',(#165));
#165 = PRODUCT_CONTEXT('',#2,'mechanical');
#166 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#167 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#168),#266);
#168 = MANIFOLD_SOLID_BREP('',#169);
#169 = CLOSED_SHELL('',(#170,#258,#262));
#170 = ADVANCED_FACE('',(#171),#184,.T.);
#171 = FACE_BOUND('',#172,.T.);
#172 = EDGE_LOOP('',(#173,#207,#230,#257));
#173 = ORIENTED_EDGE('',*,*,#174,.T.);
#174 = EDGE_CURVE('',#175,#175,#177,.T.);
#175 = VERTEX_POINT('',#176);
#176 = CARTESIAN_POINT('',(211.65287853202,-95.23152229471,
    206.46570424998));
#177 = SURFACE_CURVE('',#178,(#183,#195),.PCURVE_S1.);
#178 = CIRCLE('',#179,25.);
#179 = AXIS2_PLACEMENT_3D('',#180,#181,#182);
#180 = CARTESIAN_POINT('',(229.33054806168,-77.55385276504,
    206.46570424998));
#181 = DIRECTION('',(-0.57922796534,0.57922796534,-0.573576436351));
#182 = DIRECTION('',(0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#183 = PCURVE('',#184,#189);
#184 = CYLINDRICAL_SURFACE('',#185,25.);
#185 = AXIS2_PLACEMENT_3D('',#186,#187,#188);
#186 = CARTESIAN_POINT('',(207.60949936144,-55.83280406481,
    184.95658788682));
#187 = DIRECTION('',(-0.57922796534,0.57922796534,-0.573576436351));
#188 = DIRECTION('',(0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#189 = DEFINITIONAL_REPRESENTATION('',(#190),#194);
#190 = LINE('',#191,#192);
#191 = CARTESIAN_POINT('',(2.13162820728E-14,-37.5));
#192 = VECTOR('',#193,1.);
#193 = DIRECTION('',(1.,0.));
#194 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#195 = PCURVE('',#196,#201);
#196 = PLANE('',#197);
#197 = AXIS2_PLACEMENT_3D('',#198,#199,#200);
#198 = CARTESIAN_POINT('',(229.33054806168,-77.55385276504,
    206.46570424998));
#199 = DIRECTION('',(-0.57922796534,0.57922796534,-0.573576436351));
#200 = DIRECTION('',(0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#201 = DEFINITIONAL_REPRESENTATION('',(#202),#206);
#202 = CIRCLE('',#203,25.);
#203 = AXIS2_PLACEMENT_2D('',#204,#205);
#204 = CARTESIAN_POINT('',(0.,0.));
#205 = DIRECTION('',(1.,-1.742027637139E-17));
#206 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#207 = ORIENTED_EDGE('',*,*,#208,.T.);
#208 = EDGE_CURVE('',#175,#209,#211,.T.);
#209 = VERTEX_POINT('',#210);
#210 = CARTESIAN_POINT('',(168.21078113155,-51.78942489424,
    163.44747152365));
#211 = SEAM_CURVE('',#212,(#216,#223),.PCURVE_S1.);
#212 = LINE('',#213,#214);
#213 = CARTESIAN_POINT('',(189.93182983178,-73.51047359447,
    184.95658788682));
#214 = VECTOR('',#215,1.);
#215 = DIRECTION('',(-0.57922796534,0.57922796534,-0.573576436351));
#216 = PCURVE('',#184,#217);
#217 = DEFINITIONAL_REPRESENTATION('',(#218),#222);
#218 = LINE('',#219,#220);
#219 = CARTESIAN_POINT('',(9.424777960769,-3.836930773105E-13));
#220 = VECTOR('',#221,1.);
#221 = DIRECTION('',(0.,1.));
#222 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#223 = PCURVE('',#184,#224);
#224 = DEFINITIONAL_REPRESENTATION('',(#225),#229);
#225 = LINE('',#226,#227);
#226 = CARTESIAN_POINT('',(3.14159265359,-3.836930773105E-13));
#227 = VECTOR('',#228,1.);
#228 = DIRECTION('',(0.,1.));
#229 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#230 = ORIENTED_EDGE('',*,*,#231,.T.);
#231 = EDGE_CURVE('',#209,#209,#232,.T.);
#232 = SURFACE_CURVE('',#233,(#238,#245),.PCURVE_S1.);
#233 = CIRCLE('',#234,25.);
#234 = AXIS2_PLACEMENT_3D('',#235,#236,#237);
#235 = CARTESIAN_POINT('',(185.88845066121,-34.11175536457,
    163.44747152365));
#236 = DIRECTION('',(0.57922796534,-0.57922796534,0.573576436351));
#237 = DIRECTION('',(0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#238 = PCURVE('',#184,#239);
#239 = DEFINITIONAL_REPRESENTATION('',(#240),#244);
#240 = LINE('',#241,#242);
#241 = CARTESIAN_POINT('',(12.566370614359,37.499999999999));
#242 = VECTOR('',#243,1.);
#243 = DIRECTION('',(-1.,0.));
#244 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#245 = PCURVE('',#246,#251);
#246 = PLANE('',#247);
#247 = AXIS2_PLACEMENT_3D('',#248,#249,#250);
#248 = CARTESIAN_POINT('',(185.88845066121,-34.11175536457,
    163.44747152365));
#249 = DIRECTION('',(0.57922796534,-0.57922796534,0.573576436351));
#250 = DIRECTION('',(-0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#251 = DEFINITIONAL_REPRESENTATION('',(#252),#256);
#252 = CIRCLE('',#253,25.);
#253 = AXIS2_PLACEMENT_2D('',#254,#255);
#254 = CARTESIAN_POINT('',(0.,0.));
#255 = DIRECTION('',(-1.,-1.742027637139E-17));
#256 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#257 = ORIENTED_EDGE('',*,*,#208,.F.);
#258 = ADVANCED_FACE('',(#259),#246,.F.);
#259 = FACE_BOUND('',#260,.T.);
#260 = EDGE_LOOP('',(#261));
#261 = ORIENTED_EDGE('',*,*,#231,.F.);
#262 = ADVANCED_FACE('',(#263),#196,.F.);
#263 = FACE_BOUND('',#264,.T.);
#264 = EDGE_LOOP('',(#265));
#265 = ORIENTED_EDGE('',*,*,#174,.F.);
#266 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#270)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#267,#268,#269)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#267 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#268 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#269 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#270 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#267,
  'distance_accuracy_value','confusion accuracy');
#271 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#272,#274);
#272 = ( REPRESENTATION_RELATIONSHIP('','',#167,#149) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#273) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#273 = ITEM_DEFINED_TRANSFORMATION('','',#11,#150);
#274 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#275
  );
#275 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('2','','',#144,#162,$);
#276 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#164));
#277 = SHAPE_DEFINITION_REPRESENTATION(#278,#284);
#278 = PRODUCT_DEFINITION_SHAPE('','',#279);
#279 = PRODUCT_DEFINITION('design','',#280,#283);
#280 = PRODUCT_DEFINITION_FORMATION('','',#281);
#281 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#282));
#282 = PRODUCT_CONTEXT('',#2,'mechanical');
#283 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#284 = SHAPE_REPRESENTATION('',(#11,#285),#289);
#285 = AXIS2_PLACEMENT_3D('',#286,#287,#288);
#286 = CARTESIAN_POINT('',(0.,0.,0.));
#287 = DIRECTION('',(0.,0.,1.));
#288 = DIRECTION('',(1.,0.,-0.));
#289 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#293)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#290,#291,#292)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#290 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#291 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#292 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#293 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#290,
  'distance_accuracy_value','confusion accuracy');
#294 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#281));
#295 = SHAPE_DEFINITION_REPRESENTATION(#296,#302);
#296 = PRODUCT_DEFINITION_SHAPE('','',#297);
#297 = PRODUCT_DEFINITION('design','',#298,#301);
#298 = PRODUCT_DEFINITION_FORMATION('','',#299);
#299 = PRODUCT('SOLID','SOLID','',(#300));
#300 = PRODUCT_CONTEXT('',#2,'mechanical');
#301 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#302 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#303),#401);
#303 = MANIFOLD_SOLID_BREP('',#304);
#304 = CLOSED_SHELL('',(#305,#393,#397));
#305 = ADVANCED_FACE('',(#306),#319,.T.);
#306 = FACE_BOUND('',#307,.T.);
#307 = EDGE_LOOP('',(#308,#342,#365,#392));
#308 = ORIENTED_EDGE('',*,*,#309,.T.);
#309 = EDGE_CURVE('',#310,#310,#312,.T.);
#310 = VERTEX_POINT('',#311);
#311 = CARTESIAN_POINT('',(-211.652878532,95.23152229471,206.46570424998
    ));
#312 = SURFACE_CURVE('',#313,(#318,#330),.PCURVE_S1.);
#313 = CIRCLE('',#314,25.);
#314 = AXIS2_PLACEMENT_3D('',#315,#316,#317);
#315 = CARTESIAN_POINT('',(-229.3305480616,77.553852765046,
    206.46570424998));
#316 = DIRECTION('',(0.57922796534,-0.57922796534,-0.573576436351));
#317 = DIRECTION('',(-0.707106781187,-0.707106781187,-2.775557561563E-16
    ));
#318 = PCURVE('',#319,#324);
#319 = CYLINDRICAL_SURFACE('',#320,25.);
#320 = AXIS2_PLACEMENT_3D('',#321,#322,#323);
#321 = CARTESIAN_POINT('',(-207.6094993614,55.832804064812,
    184.95658788682));
#322 = DIRECTION('',(0.57922796534,-0.57922796534,-0.573576436351));
#323 = DIRECTION('',(-0.707106781187,-0.707106781187,-2.775557561563E-16
    ));
#324 = DEFINITIONAL_REPRESENTATION('',(#325),#329);
#325 = LINE('',#326,#327);
#326 = CARTESIAN_POINT('',(2.13162820728E-14,-37.5));
#327 = VECTOR('',#328,1.);
#328 = DIRECTION('',(1.,0.));
#329 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#330 = PCURVE('',#331,#336);
#331 = PLANE('',#332);
#332 = AXIS2_PLACEMENT_3D('',#333,#334,#335);
#333 = CARTESIAN_POINT('',(-229.3305480616,77.553852765046,
    206.46570424998));
#334 = DIRECTION('',(0.57922796534,-0.57922796534,-0.573576436351));
#335 = DIRECTION('',(-0.707106781187,-0.707106781187,-2.775557561563E-16
    ));
#336 = DEFINITIONAL_REPRESENTATION('',(#337),#341);
#337 = CIRCLE('',#338,25.);
#338 = AXIS2_PLACEMENT_2D('',#339,#340);
#339 = CARTESIAN_POINT('',(0.,0.));
#340 = DIRECTION('',(1.,-1.742027637139E-17));
#341 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#342 = ORIENTED_EDGE('',*,*,#343,.T.);
#343 = EDGE_CURVE('',#310,#344,#346,.T.);
#344 = VERTEX_POINT('',#345);
#345 = CARTESIAN_POINT('',(-168.2107811315,51.789424894242,
    163.44747152365));
#346 = SEAM_CURVE('',#347,(#351,#358),.PCURVE_S1.);
#347 = LINE('',#348,#349);
#348 = CARTESIAN_POINT('',(-189.9318298317,73.510473594476,
    184.95658788682));
#349 = VECTOR('',#350,1.);
#350 = DIRECTION('',(0.57922796534,-0.57922796534,-0.573576436351));
#351 = PCURVE('',#319,#352);
#352 = DEFINITIONAL_REPRESENTATION('',(#353),#357);
#353 = LINE('',#354,#355);
#354 = CARTESIAN_POINT('',(9.424777960769,-3.836930773105E-13));
#355 = VECTOR('',#356,1.);
#356 = DIRECTION('',(0.,1.));
#357 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#358 = PCURVE('',#319,#359);
#359 = DEFINITIONAL_REPRESENTATION('',(#360),#364);
#360 = LINE('',#361,#362);
#361 = CARTESIAN_POINT('',(3.14159265359,-3.836930773105E-13));
#362 = VECTOR('',#363,1.);
#363 = DIRECTION('',(0.,1.));
#364 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#365 = ORIENTED_EDGE('',*,*,#366,.T.);
#366 = EDGE_CURVE('',#344,#344,#367,.T.);
#367 = SURFACE_CURVE('',#368,(#373,#380),.PCURVE_S1.);
#368 = CIRCLE('',#369,25.);
#369 = AXIS2_PLACEMENT_3D('',#370,#371,#372);
#370 = CARTESIAN_POINT('',(-185.8884506612,34.111755364579,
    163.44747152365));
#371 = DIRECTION('',(-0.57922796534,0.57922796534,0.573576436351));
#372 = DIRECTION('',(-0.707106781187,-0.707106781187,-2.775557561563E-16
    ));
#373 = PCURVE('',#319,#374);
#374 = DEFINITIONAL_REPRESENTATION('',(#375),#379);
#375 = LINE('',#376,#377);
#376 = CARTESIAN_POINT('',(12.566370614359,37.499999999999));
#377 = VECTOR('',#378,1.);
#378 = DIRECTION('',(-1.,0.));
#379 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#380 = PCURVE('',#381,#386);
#381 = PLANE('',#382);
#382 = AXIS2_PLACEMENT_3D('',#383,#384,#385);
#383 = CARTESIAN_POINT('',(-185.8884506612,34.111755364579,
    163.44747152365));
#384 = DIRECTION('',(-0.57922796534,0.57922796534,0.573576436351));
#385 = DIRECTION('',(0.707106781187,0.707106781187,2.775557561563E-16));
#386 = DEFINITIONAL_REPRESENTATION('',(#387),#391);
#387 = CIRCLE('',#388,25.);
#388 = AXIS2_PLACEMENT_2D('',#389,#390);
#389 = CARTESIAN_POINT('',(0.,0.));
#390 = DIRECTION('',(-1.,-1.742027637139E-17));
#391 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#392 = ORIENTED_EDGE('',*,*,#343,.F.);
#393 = ADVANCED_FACE('',(#394),#381,.F.);
#394 = FACE_BOUND('',#395,.T.);
#395 = EDGE_LOOP('',(#396));
#396 = ORIENTED_EDGE('',*,*,#366,.F.);
#397 = ADVANCED_FACE('',(#398),#331,.F.);
#398 = FACE_BOUND('',#399,.T.);
#399 = EDGE_LOOP('',(#400));
#400 = ORIENTED_EDGE('',*,*,#309,.F.);
#401 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#405)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#402,#403,#404)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#402 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#403 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#404 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#405 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#402,
  'distance_accuracy_value','confusion accuracy');
#406 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#407,#409);
#407 = ( REPRESENTATION_RELATIONSHIP('','',#302,#284) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#408) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#408 = ITEM_DEFINED_TRANSFORMATION('','',#11,#285);
#409 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#410
  );
#410 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('3','','',#279,#297,$);
#411 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#299));
#412 = SHAPE_DEFINITION_REPRESENTATION(#413,#419);
#413 = PRODUCT_DEFINITION_SHAPE('','',#414);
#414 = PRODUCT_DEFINITION('design','',#415,#418);
#415 = PRODUCT_DEFINITION_FORMATION('','',#416);
#416 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#417));
#417 = PRODUCT_CONTEXT('',#2,'mechanical');
#418 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#419 = SHAPE_REPRESENTATION('',(#11,#420),#424);
#420 = AXIS2_PLACEMENT_3D('',#421,#422,#423);
#421 = CARTESIAN_POINT('',(0.,0.,0.));
#422 = DIRECTION('',(0.,0.,1.));
#423 = DIRECTION('',(1.,0.,-0.));
#424 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#428)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#425,#426,#427)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#425 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#426 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#427 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#428 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#425,
  'distance_accuracy_value','confusion accuracy');
#429 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#416));
#430 = SHAPE_DEFINITION_REPRESENTATION(#431,#437);
#431 = PRODUCT_DEFINITION_SHAPE('','',#432);
#432 = PRODUCT_DEFINITION('design','',#433,#436);
#433 = PRODUCT_DEFINITION_FORMATION('','',#434);
#434 = PRODUCT('SOLID','SOLID','',(#435));
#435 = PRODUCT_CONTEXT('',#2,'mechanical');
#436 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#437 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#438),#536);
#438 = MANIFOLD_SOLID_BREP('',#439);
#439 = CLOSED_SHELL('',(#440,#528,#532));
#440 = ADVANCED_FACE('',(#441),#454,.T.);
#441 = FACE_BOUND('',#442,.T.);
#442 = EDGE_LOOP('',(#443,#477,#500,#527));
#443 = ORIENTED_EDGE('',*,*,#444,.F.);
#444 = EDGE_CURVE('',#445,#445,#447,.T.);
#445 = VERTEX_POINT('',#446);
#446 = CARTESIAN_POINT('',(-211.652878532,-95.23152229471,
    206.46570424998));
#447 = SURFACE_CURVE('',#448,(#453,#465),.PCURVE_S1.);
#448 = CIRCLE('',#449,25.);
#449 = AXIS2_PLACEMENT_3D('',#450,#451,#452);
#450 = CARTESIAN_POINT('',(-229.3305480616,-77.55385276504,
    206.46570424998));
#451 = DIRECTION('',(-0.57922796534,-0.57922796534,0.573576436351));
#452 = DIRECTION('',(-0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#453 = PCURVE('',#454,#459);
#454 = CYLINDRICAL_SURFACE('',#455,25.);
#455 = AXIS2_PLACEMENT_3D('',#456,#457,#458);
#456 = CARTESIAN_POINT('',(-207.6094993614,-55.83280406481,
    184.95658788682));
#457 = DIRECTION('',(-0.57922796534,-0.57922796534,0.573576436351));
#458 = DIRECTION('',(-0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#459 = DEFINITIONAL_REPRESENTATION('',(#460),#464);
#460 = LINE('',#461,#462);
#461 = CARTESIAN_POINT('',(-6.28318530718,37.500000000001));
#462 = VECTOR('',#463,1.);
#463 = DIRECTION('',(1.,0.));
#464 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#465 = PCURVE('',#466,#471);
#466 = PLANE('',#467);
#467 = AXIS2_PLACEMENT_3D('',#468,#469,#470);
#468 = CARTESIAN_POINT('',(-229.3305480616,-77.55385276504,
    206.46570424998));
#469 = DIRECTION('',(-0.57922796534,-0.57922796534,0.573576436351));
#470 = DIRECTION('',(-0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#471 = DEFINITIONAL_REPRESENTATION('',(#472),#476);
#472 = CIRCLE('',#473,25.);
#473 = AXIS2_PLACEMENT_2D('',#474,#475);
#474 = CARTESIAN_POINT('',(0.,0.));
#475 = DIRECTION('',(1.,-1.742027637139E-17));
#476 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#477 = ORIENTED_EDGE('',*,*,#478,.T.);
#478 = EDGE_CURVE('',#445,#479,#481,.T.);
#479 = VERTEX_POINT('',#480);
#480 = CARTESIAN_POINT('',(-168.2107811315,-51.78942489424,
    163.44747152365));
#481 = SEAM_CURVE('',#482,(#486,#493),.PCURVE_S1.);
#482 = LINE('',#483,#484);
#483 = CARTESIAN_POINT('',(-189.9318298317,-73.51047359447,
    184.95658788682));
#484 = VECTOR('',#485,1.);
#485 = DIRECTION('',(0.57922796534,0.57922796534,-0.573576436351));
#486 = PCURVE('',#454,#487);
#487 = DEFINITIONAL_REPRESENTATION('',(#488),#492);
#488 = LINE('',#489,#490);
#489 = CARTESIAN_POINT('',(-3.14159265359,3.836930773105E-13));
#490 = VECTOR('',#491,1.);
#491 = DIRECTION('',(0.,-1.));
#492 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#493 = PCURVE('',#454,#494);
#494 = DEFINITIONAL_REPRESENTATION('',(#495),#499);
#495 = LINE('',#496,#497);
#496 = CARTESIAN_POINT('',(3.14159265359,3.836930773105E-13));
#497 = VECTOR('',#498,1.);
#498 = DIRECTION('',(0.,-1.));
#499 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#500 = ORIENTED_EDGE('',*,*,#501,.F.);
#501 = EDGE_CURVE('',#479,#479,#502,.T.);
#502 = SURFACE_CURVE('',#503,(#508,#515),.PCURVE_S1.);
#503 = CIRCLE('',#504,25.);
#504 = AXIS2_PLACEMENT_3D('',#505,#506,#507);
#505 = CARTESIAN_POINT('',(-185.8884506612,-34.11175536457,
    163.44747152365));
#506 = DIRECTION('',(0.57922796534,0.57922796534,-0.573576436351));
#507 = DIRECTION('',(-0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#508 = PCURVE('',#454,#509);
#509 = DEFINITIONAL_REPRESENTATION('',(#510),#514);
#510 = LINE('',#511,#512);
#511 = CARTESIAN_POINT('',(6.28318530718,-37.49999999999));
#512 = VECTOR('',#513,1.);
#513 = DIRECTION('',(-1.,0.));
#514 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#515 = PCURVE('',#516,#521);
#516 = PLANE('',#517);
#517 = AXIS2_PLACEMENT_3D('',#518,#519,#520);
#518 = CARTESIAN_POINT('',(-185.8884506612,-34.11175536457,
    163.44747152365));
#519 = DIRECTION('',(0.57922796534,0.57922796534,-0.573576436351));
#520 = DIRECTION('',(0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#521 = DEFINITIONAL_REPRESENTATION('',(#522),#526);
#522 = CIRCLE('',#523,25.);
#523 = AXIS2_PLACEMENT_2D('',#524,#525);
#524 = CARTESIAN_POINT('',(0.,0.));
#525 = DIRECTION('',(-1.,-1.742027637139E-17));
#526 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#527 = ORIENTED_EDGE('',*,*,#478,.F.);
#528 = ADVANCED_FACE('',(#529),#516,.T.);
#529 = FACE_BOUND('',#530,.T.);
#530 = EDGE_LOOP('',(#531));
#531 = ORIENTED_EDGE('',*,*,#501,.T.);
#532 = ADVANCED_FACE('',(#533),#466,.T.);
#533 = FACE_BOUND('',#534,.T.);
#534 = EDGE_LOOP('',(#535));
#535 = ORIENTED_EDGE('',*,*,#444,.T.);
#536 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#540)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#537,#538,#539)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#537 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#538 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#539 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#540 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#537,
  'distance_accuracy_value','confusion accuracy');
#541 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#542,#544);
#542 = ( REPRESENTATION_RELATIONSHIP('','',#437,#419) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#543) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#543 = ITEM_DEFINED_TRANSFORMATION('','',#11,#420);
#544 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#545
  );
#545 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('4','','',#414,#432,$);
#546 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#434));
#547 = SHAPE_DEFINITION_REPRESENTATION(#548,#554);
#548 = PRODUCT_DEFINITION_SHAPE('','',#549);
#549 = PRODUCT_DEFINITION('design','',#550,#553);
#550 = PRODUCT_DEFINITION_FORMATION('','',#551);
#551 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#552));
#552 = PRODUCT_CONTEXT('',#2,'mechanical');
#553 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#554 = SHAPE_REPRESENTATION('',(#11,#555),#559);
#555 = AXIS2_PLACEMENT_3D('',#556,#557,#558);
#556 = CARTESIAN_POINT('',(0.,0.,0.));
#557 = DIRECTION('',(0.,0.,1.));
#558 = DIRECTION('',(1.,0.,-0.));
#559 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#563)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#560,#561,#562)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#560 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#561 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#562 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#563 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#560,
  'distance_accuracy_value','confusion accuracy');
#564 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#551));
#565 = SHAPE_DEFINITION_REPRESENTATION(#566,#572);
#566 = PRODUCT_DEFINITION_SHAPE('','',#567);
#567 = PRODUCT_DEFINITION('design','',#568,#571);
#568 = PRODUCT_DEFINITION_FORMATION('','',#569);
#569 = PRODUCT('SOLID','SOLID','',(#570));
#570 = PRODUCT_CONTEXT('',#2,'mechanical');
#571 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#572 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#573),#671);
#573 = MANIFOLD_SOLID_BREP('',#574);
#574 = CLOSED_SHELL('',(#575,#663,#667));
#575 = ADVANCED_FACE('',(#576),#589,.T.);
#576 = FACE_BOUND('',#577,.T.);
#577 = EDGE_LOOP('',(#578,#612,#635,#662));
#578 = ORIENTED_EDGE('',*,*,#579,.T.);
#579 = EDGE_CURVE('',#580,#580,#582,.T.);
#580 = VERTEX_POINT('',#581);
#581 = CARTESIAN_POINT('',(211.65287853202,95.23152229471,
    -206.4657042499));
#582 = SURFACE_CURVE('',#583,(#588,#600),.PCURVE_S1.);
#583 = CIRCLE('',#584,25.);
#584 = AXIS2_PLACEMENT_3D('',#585,#586,#587);
#585 = CARTESIAN_POINT('',(229.33054806168,77.553852765046,
    -206.4657042499));
#586 = DIRECTION('',(-0.57922796534,-0.57922796534,0.573576436351));
#587 = DIRECTION('',(0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#588 = PCURVE('',#589,#594);
#589 = CYLINDRICAL_SURFACE('',#590,25.);
#590 = AXIS2_PLACEMENT_3D('',#591,#592,#593);
#591 = CARTESIAN_POINT('',(207.60949936144,55.832804064812,
    -184.9565878868));
#592 = DIRECTION('',(-0.57922796534,-0.57922796534,0.573576436351));
#593 = DIRECTION('',(0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#594 = DEFINITIONAL_REPRESENTATION('',(#595),#599);
#595 = LINE('',#596,#597);
#596 = CARTESIAN_POINT('',(2.13162820728E-14,-37.5));
#597 = VECTOR('',#598,1.);
#598 = DIRECTION('',(1.,0.));
#599 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#600 = PCURVE('',#601,#606);
#601 = PLANE('',#602);
#602 = AXIS2_PLACEMENT_3D('',#603,#604,#605);
#603 = CARTESIAN_POINT('',(229.33054806168,77.553852765046,
    -206.4657042499));
#604 = DIRECTION('',(-0.57922796534,-0.57922796534,0.573576436351));
#605 = DIRECTION('',(0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#606 = DEFINITIONAL_REPRESENTATION('',(#607),#611);
#607 = CIRCLE('',#608,25.);
#608 = AXIS2_PLACEMENT_2D('',#609,#610);
#609 = CARTESIAN_POINT('',(0.,0.));
#610 = DIRECTION('',(1.,-1.742027637139E-17));
#611 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#612 = ORIENTED_EDGE('',*,*,#613,.T.);
#613 = EDGE_CURVE('',#580,#614,#616,.T.);
#614 = VERTEX_POINT('',#615);
#615 = CARTESIAN_POINT('',(168.21078113155,51.789424894242,
    -163.4474715236));
#616 = SEAM_CURVE('',#617,(#621,#628),.PCURVE_S1.);
#617 = LINE('',#618,#619);
#618 = CARTESIAN_POINT('',(189.93182983178,73.510473594476,
    -184.9565878868));
#619 = VECTOR('',#620,1.);
#620 = DIRECTION('',(-0.57922796534,-0.57922796534,0.573576436351));
#621 = PCURVE('',#589,#622);
#622 = DEFINITIONAL_REPRESENTATION('',(#623),#627);
#623 = LINE('',#624,#625);
#624 = CARTESIAN_POINT('',(9.424777960769,-3.836930773105E-13));
#625 = VECTOR('',#626,1.);
#626 = DIRECTION('',(0.,1.));
#627 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#628 = PCURVE('',#589,#629);
#629 = DEFINITIONAL_REPRESENTATION('',(#630),#634);
#630 = LINE('',#631,#632);
#631 = CARTESIAN_POINT('',(3.14159265359,-3.836930773105E-13));
#632 = VECTOR('',#633,1.);
#633 = DIRECTION('',(0.,1.));
#634 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#635 = ORIENTED_EDGE('',*,*,#636,.T.);
#636 = EDGE_CURVE('',#614,#614,#637,.T.);
#637 = SURFACE_CURVE('',#638,(#643,#650),.PCURVE_S1.);
#638 = CIRCLE('',#639,25.);
#639 = AXIS2_PLACEMENT_3D('',#640,#641,#642);
#640 = CARTESIAN_POINT('',(185.88845066121,34.111755364579,
    -163.4474715236));
#641 = DIRECTION('',(0.57922796534,0.57922796534,-0.573576436351));
#642 = DIRECTION('',(0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#643 = PCURVE('',#589,#644);
#644 = DEFINITIONAL_REPRESENTATION('',(#645),#649);
#645 = LINE('',#646,#647);
#646 = CARTESIAN_POINT('',(12.566370614359,37.499999999999));
#647 = VECTOR('',#648,1.);
#648 = DIRECTION('',(-1.,0.));
#649 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#650 = PCURVE('',#651,#656);
#651 = PLANE('',#652);
#652 = AXIS2_PLACEMENT_3D('',#653,#654,#655);
#653 = CARTESIAN_POINT('',(185.88845066121,34.111755364579,
    -163.4474715236));
#654 = DIRECTION('',(0.57922796534,0.57922796534,-0.573576436351));
#655 = DIRECTION('',(-0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#656 = DEFINITIONAL_REPRESENTATION('',(#657),#661);
#657 = CIRCLE('',#658,25.);
#658 = AXIS2_PLACEMENT_2D('',#659,#660);
#659 = CARTESIAN_POINT('',(0.,0.));
#660 = DIRECTION('',(-1.,-1.742027637139E-17));
#661 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#662 = ORIENTED_EDGE('',*,*,#613,.F.);
#663 = ADVANCED_FACE('',(#664),#651,.F.);
#664 = FACE_BOUND('',#665,.T.);
#665 = EDGE_LOOP('',(#666));
#666 = ORIENTED_EDGE('',*,*,#636,.F.);
#667 = ADVANCED_FACE('',(#668),#601,.F.);
#668 = FACE_BOUND('',#669,.T.);
#669 = EDGE_LOOP('',(#670));
#670 = ORIENTED_EDGE('',*,*,#579,.F.);
#671 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#675)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#672,#673,#674)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#672 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#673 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#674 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#675 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#672,
  'distance_accuracy_value','confusion accuracy');
#676 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#677,#679);
#677 = ( REPRESENTATION_RELATIONSHIP('','',#572,#554) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#678) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#678 = ITEM_DEFINED_TRANSFORMATION('','',#11,#555);
#679 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#680
  );
#680 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('5','','',#549,#567,$);
#681 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#569));
#682 = SHAPE_DEFINITION_REPRESENTATION(#683,#689);
#683 = PRODUCT_DEFINITION_SHAPE('','',#684);
#684 = PRODUCT_DEFINITION('design','',#685,#688);
#685 = PRODUCT_DEFINITION_FORMATION('','',#686);
#686 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#687));
#687 = PRODUCT_CONTEXT('',#2,'mechanical');
#688 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#689 = SHAPE_REPRESENTATION('',(#11,#690),#694);
#690 = AXIS2_PLACEMENT_3D('',#691,#692,#693);
#691 = CARTESIAN_POINT('',(0.,0.,0.));
#692 = DIRECTION('',(0.,0.,1.));
#693 = DIRECTION('',(1.,0.,-0.));
#694 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#698)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#695,#696,#697)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#695 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#696 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#697 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#698 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#695,
  'distance_accuracy_value','confusion accuracy');
#699 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#686));
#700 = SHAPE_DEFINITION_REPRESENTATION(#701,#707);
#701 = PRODUCT_DEFINITION_SHAPE('','',#702);
#702 = PRODUCT_DEFINITION('design','',#703,#706);
#703 = PRODUCT_DEFINITION_FORMATION('','',#704);
#704 = PRODUCT('SOLID','SOLID','',(#705));
#705 = PRODUCT_CONTEXT('',#2,'mechanical');
#706 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#707 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#708),#806);
#708 = MANIFOLD_SOLID_BREP('',#709);
#709 = CLOSED_SHELL('',(#710,#798,#802));
#710 = ADVANCED_FACE('',(#711),#724,.T.);
#711 = FACE_BOUND('',#712,.T.);
#712 = EDGE_LOOP('',(#713,#747,#770,#797));
#713 = ORIENTED_EDGE('',*,*,#714,.F.);
#714 = EDGE_CURVE('',#715,#715,#717,.T.);
#715 = VERTEX_POINT('',#716);
#716 = CARTESIAN_POINT('',(211.65287853202,-95.23152229471,
    -206.4657042499));
#717 = SURFACE_CURVE('',#718,(#723,#735),.PCURVE_S1.);
#718 = CIRCLE('',#719,25.);
#719 = AXIS2_PLACEMENT_3D('',#720,#721,#722);
#720 = CARTESIAN_POINT('',(229.33054806168,-77.55385276504,
    -206.4657042499));
#721 = DIRECTION('',(0.57922796534,-0.57922796534,-0.573576436351));
#722 = DIRECTION('',(0.707106781187,0.707106781187,2.775557561563E-16));
#723 = PCURVE('',#724,#729);
#724 = CYLINDRICAL_SURFACE('',#725,25.);
#725 = AXIS2_PLACEMENT_3D('',#726,#727,#728);
#726 = CARTESIAN_POINT('',(207.60949936144,-55.83280406481,
    -184.9565878868));
#727 = DIRECTION('',(0.57922796534,-0.57922796534,-0.573576436351));
#728 = DIRECTION('',(0.707106781187,0.707106781187,2.775557561563E-16));
#729 = DEFINITIONAL_REPRESENTATION('',(#730),#734);
#730 = LINE('',#731,#732);
#731 = CARTESIAN_POINT('',(-6.28318530718,37.500000000001));
#732 = VECTOR('',#733,1.);
#733 = DIRECTION('',(1.,0.));
#734 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#735 = PCURVE('',#736,#741);
#736 = PLANE('',#737);
#737 = AXIS2_PLACEMENT_3D('',#738,#739,#740);
#738 = CARTESIAN_POINT('',(229.33054806168,-77.55385276504,
    -206.4657042499));
#739 = DIRECTION('',(0.57922796534,-0.57922796534,-0.573576436351));
#740 = DIRECTION('',(0.707106781187,0.707106781187,2.775557561563E-16));
#741 = DEFINITIONAL_REPRESENTATION('',(#742),#746);
#742 = CIRCLE('',#743,25.);
#743 = AXIS2_PLACEMENT_2D('',#744,#745);
#744 = CARTESIAN_POINT('',(0.,0.));
#745 = DIRECTION('',(1.,-1.742027637139E-17));
#746 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#747 = ORIENTED_EDGE('',*,*,#748,.T.);
#748 = EDGE_CURVE('',#715,#749,#751,.T.);
#749 = VERTEX_POINT('',#750);
#750 = CARTESIAN_POINT('',(168.21078113155,-51.78942489424,
    -163.4474715236));
#751 = SEAM_CURVE('',#752,(#756,#763),.PCURVE_S1.);
#752 = LINE('',#753,#754);
#753 = CARTESIAN_POINT('',(189.93182983178,-73.51047359447,
    -184.9565878868));
#754 = VECTOR('',#755,1.);
#755 = DIRECTION('',(-0.57922796534,0.57922796534,0.573576436351));
#756 = PCURVE('',#724,#757);
#757 = DEFINITIONAL_REPRESENTATION('',(#758),#762);
#758 = LINE('',#759,#760);
#759 = CARTESIAN_POINT('',(-3.14159265359,3.836930773105E-13));
#760 = VECTOR('',#761,1.);
#761 = DIRECTION('',(0.,-1.));
#762 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#763 = PCURVE('',#724,#764);
#764 = DEFINITIONAL_REPRESENTATION('',(#765),#769);
#765 = LINE('',#766,#767);
#766 = CARTESIAN_POINT('',(3.14159265359,3.836930773105E-13));
#767 = VECTOR('',#768,1.);
#768 = DIRECTION('',(0.,-1.));
#769 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#770 = ORIENTED_EDGE('',*,*,#771,.F.);
#771 = EDGE_CURVE('',#749,#749,#772,.T.);
#772 = SURFACE_CURVE('',#773,(#778,#785),.PCURVE_S1.);
#773 = CIRCLE('',#774,25.);
#774 = AXIS2_PLACEMENT_3D('',#775,#776,#777);
#775 = CARTESIAN_POINT('',(185.88845066121,-34.11175536457,
    -163.4474715236));
#776 = DIRECTION('',(-0.57922796534,0.57922796534,0.573576436351));
#777 = DIRECTION('',(0.707106781187,0.707106781187,2.775557561563E-16));
#778 = PCURVE('',#724,#779);
#779 = DEFINITIONAL_REPRESENTATION('',(#780),#784);
#780 = LINE('',#781,#782);
#781 = CARTESIAN_POINT('',(6.28318530718,-37.49999999999));
#782 = VECTOR('',#783,1.);
#783 = DIRECTION('',(-1.,0.));
#784 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#785 = PCURVE('',#786,#791);
#786 = PLANE('',#787);
#787 = AXIS2_PLACEMENT_3D('',#788,#789,#790);
#788 = CARTESIAN_POINT('',(185.88845066121,-34.11175536457,
    -163.4474715236));
#789 = DIRECTION('',(-0.57922796534,0.57922796534,0.573576436351));
#790 = DIRECTION('',(-0.707106781187,-0.707106781187,-2.775557561563E-16
    ));
#791 = DEFINITIONAL_REPRESENTATION('',(#792),#796);
#792 = CIRCLE('',#793,25.);
#793 = AXIS2_PLACEMENT_2D('',#794,#795);
#794 = CARTESIAN_POINT('',(0.,0.));
#795 = DIRECTION('',(-1.,-1.742027637139E-17));
#796 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#797 = ORIENTED_EDGE('',*,*,#748,.F.);
#798 = ADVANCED_FACE('',(#799),#786,.T.);
#799 = FACE_BOUND('',#800,.T.);
#800 = EDGE_LOOP('',(#801));
#801 = ORIENTED_EDGE('',*,*,#771,.T.);
#802 = ADVANCED_FACE('',(#803),#736,.T.);
#803 = FACE_BOUND('',#804,.T.);
#804 = EDGE_LOOP('',(#805));
#805 = ORIENTED_EDGE('',*,*,#714,.T.);
#806 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#810)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#807,#808,#809)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#807 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#808 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#809 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#810 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#807,
  'distance_accuracy_value','confusion accuracy');
#811 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#812,#814);
#812 = ( REPRESENTATION_RELATIONSHIP('','',#707,#689) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#813) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#813 = ITEM_DEFINED_TRANSFORMATION('','',#11,#690);
#814 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#815
  );
#815 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('6','','',#684,#702,$);
#816 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#704));
#817 = SHAPE_DEFINITION_REPRESENTATION(#818,#824);
#818 = PRODUCT_DEFINITION_SHAPE('','',#819);
#819 = PRODUCT_DEFINITION('design','',#820,#823);
#820 = PRODUCT_DEFINITION_FORMATION('','',#821);
#821 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#822));
#822 = PRODUCT_CONTEXT('',#2,'mechanical');
#823 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#824 = SHAPE_REPRESENTATION('',(#11,#825),#829);
#825 = AXIS2_PLACEMENT_3D('',#826,#827,#828);
#826 = CARTESIAN_POINT('',(0.,0.,0.));
#827 = DIRECTION('',(0.,0.,1.));
#828 = DIRECTION('',(1.,0.,-0.));
#829 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#833)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#830,#831,#832)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#830 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#831 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#832 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#833 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#830,
  'distance_accuracy_value','confusion accuracy');
#834 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#821));
#835 = SHAPE_DEFINITION_REPRESENTATION(#836,#842);
#836 = PRODUCT_DEFINITION_SHAPE('','',#837);
#837 = PRODUCT_DEFINITION('design','',#838,#841);
#838 = PRODUCT_DEFINITION_FORMATION('','',#839);
#839 = PRODUCT('SOLID','SOLID','',(#840));
#840 = PRODUCT_CONTEXT('',#2,'mechanical');
#841 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#842 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#843),#941);
#843 = MANIFOLD_SOLID_BREP('',#844);
#844 = CLOSED_SHELL('',(#845,#933,#937));
#845 = ADVANCED_FACE('',(#846),#859,.T.);
#846 = FACE_BOUND('',#847,.T.);
#847 = EDGE_LOOP('',(#848,#882,#905,#932));
#848 = ORIENTED_EDGE('',*,*,#849,.F.);
#849 = EDGE_CURVE('',#850,#850,#852,.T.);
#850 = VERTEX_POINT('',#851);
#851 = CARTESIAN_POINT('',(-211.652878532,95.23152229471,-206.4657042499
    ));
#852 = SURFACE_CURVE('',#853,(#858,#870),.PCURVE_S1.);
#853 = CIRCLE('',#854,25.);
#854 = AXIS2_PLACEMENT_3D('',#855,#856,#857);
#855 = CARTESIAN_POINT('',(-229.3305480616,77.553852765046,
    -206.4657042499));
#856 = DIRECTION('',(-0.57922796534,0.57922796534,-0.573576436351));
#857 = DIRECTION('',(-0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#858 = PCURVE('',#859,#864);
#859 = CYLINDRICAL_SURFACE('',#860,25.);
#860 = AXIS2_PLACEMENT_3D('',#861,#862,#863);
#861 = CARTESIAN_POINT('',(-207.6094993614,55.832804064812,
    -184.9565878868));
#862 = DIRECTION('',(-0.57922796534,0.57922796534,-0.573576436351));
#863 = DIRECTION('',(-0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#864 = DEFINITIONAL_REPRESENTATION('',(#865),#869);
#865 = LINE('',#866,#867);
#866 = CARTESIAN_POINT('',(-6.28318530718,37.500000000001));
#867 = VECTOR('',#868,1.);
#868 = DIRECTION('',(1.,0.));
#869 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#870 = PCURVE('',#871,#876);
#871 = PLANE('',#872);
#872 = AXIS2_PLACEMENT_3D('',#873,#874,#875);
#873 = CARTESIAN_POINT('',(-229.3305480616,77.553852765046,
    -206.4657042499));
#874 = DIRECTION('',(-0.57922796534,0.57922796534,-0.573576436351));
#875 = DIRECTION('',(-0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#876 = DEFINITIONAL_REPRESENTATION('',(#877),#881);
#877 = CIRCLE('',#878,25.);
#878 = AXIS2_PLACEMENT_2D('',#879,#880);
#879 = CARTESIAN_POINT('',(0.,0.));
#880 = DIRECTION('',(1.,-1.742027637139E-17));
#881 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#882 = ORIENTED_EDGE('',*,*,#883,.T.);
#883 = EDGE_CURVE('',#850,#884,#886,.T.);
#884 = VERTEX_POINT('',#885);
#885 = CARTESIAN_POINT('',(-168.2107811315,51.789424894242,
    -163.4474715236));
#886 = SEAM_CURVE('',#887,(#891,#898),.PCURVE_S1.);
#887 = LINE('',#888,#889);
#888 = CARTESIAN_POINT('',(-189.9318298317,73.510473594476,
    -184.9565878868));
#889 = VECTOR('',#890,1.);
#890 = DIRECTION('',(0.57922796534,-0.57922796534,0.573576436351));
#891 = PCURVE('',#859,#892);
#892 = DEFINITIONAL_REPRESENTATION('',(#893),#897);
#893 = LINE('',#894,#895);
#894 = CARTESIAN_POINT('',(-3.14159265359,3.836930773105E-13));
#895 = VECTOR('',#896,1.);
#896 = DIRECTION('',(0.,-1.));
#897 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#898 = PCURVE('',#859,#899);
#899 = DEFINITIONAL_REPRESENTATION('',(#900),#904);
#900 = LINE('',#901,#902);
#901 = CARTESIAN_POINT('',(3.14159265359,3.836930773105E-13));
#902 = VECTOR('',#903,1.);
#903 = DIRECTION('',(0.,-1.));
#904 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#905 = ORIENTED_EDGE('',*,*,#906,.F.);
#906 = EDGE_CURVE('',#884,#884,#907,.T.);
#907 = SURFACE_CURVE('',#908,(#913,#920),.PCURVE_S1.);
#908 = CIRCLE('',#909,25.);
#909 = AXIS2_PLACEMENT_3D('',#910,#911,#912);
#910 = CARTESIAN_POINT('',(-185.8884506612,34.111755364579,
    -163.4474715236));
#911 = DIRECTION('',(0.57922796534,-0.57922796534,0.573576436351));
#912 = DIRECTION('',(-0.707106781187,-0.707106781187,2.775557561563E-16)
  );
#913 = PCURVE('',#859,#914);
#914 = DEFINITIONAL_REPRESENTATION('',(#915),#919);
#915 = LINE('',#916,#917);
#916 = CARTESIAN_POINT('',(6.28318530718,-37.49999999999));
#917 = VECTOR('',#918,1.);
#918 = DIRECTION('',(-1.,0.));
#919 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#920 = PCURVE('',#921,#926);
#921 = PLANE('',#922);
#922 = AXIS2_PLACEMENT_3D('',#923,#924,#925);
#923 = CARTESIAN_POINT('',(-185.8884506612,34.111755364579,
    -163.4474715236));
#924 = DIRECTION('',(0.57922796534,-0.57922796534,0.573576436351));
#925 = DIRECTION('',(0.707106781187,0.707106781187,-2.775557561563E-16)
  );
#926 = DEFINITIONAL_REPRESENTATION('',(#927),#931);
#927 = CIRCLE('',#928,25.);
#928 = AXIS2_PLACEMENT_2D('',#929,#930);
#929 = CARTESIAN_POINT('',(0.,0.));
#930 = DIRECTION('',(-1.,-1.742027637139E-17));
#931 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#932 = ORIENTED_EDGE('',*,*,#883,.F.);
#933 = ADVANCED_FACE('',(#934),#921,.T.);
#934 = FACE_BOUND('',#935,.T.);
#935 = EDGE_LOOP('',(#936));
#936 = ORIENTED_EDGE('',*,*,#906,.T.);
#937 = ADVANCED_FACE('',(#938),#871,.T.);
#938 = FACE_BOUND('',#939,.T.);
#939 = EDGE_LOOP('',(#940));
#940 = ORIENTED_EDGE('',*,*,#849,.T.);
#941 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#945)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#942,#943,#944)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#942 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#943 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#944 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#945 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#942,
  'distance_accuracy_value','confusion accuracy');
#946 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#947,#949);
#947 = ( REPRESENTATION_RELATIONSHIP('','',#842,#824) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#948) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#948 = ITEM_DEFINED_TRANSFORMATION('','',#11,#825);
#949 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',#950
  );
#950 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('7','','',#819,#837,$);
#951 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#839));
#952 = SHAPE_DEFINITION_REPRESENTATION(#953,#959);
#953 = PRODUCT_DEFINITION_SHAPE('','',#954);
#954 = PRODUCT_DEFINITION('design','',#955,#958);
#955 = PRODUCT_DEFINITION_FORMATION('','',#956);
#956 = PRODUCT('8Cylinders v2','8Cylinders v2','',(#957));
#957 = PRODUCT_CONTEXT('',#2,'mechanical');
#958 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#959 = SHAPE_REPRESENTATION('',(#11,#960),#964);
#960 = AXIS2_PLACEMENT_3D('',#961,#962,#963);
#961 = CARTESIAN_POINT('',(0.,0.,0.));
#962 = DIRECTION('',(0.,0.,1.));
#963 = DIRECTION('',(1.,0.,-0.));
#964 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#968)) GLOBAL_UNIT_ASSIGNED_CONTEXT
((#965,#966,#967)) REPRESENTATION_CONTEXT('Context #1',
  '3D Context with UNIT and UNCERTAINTY') );
#965 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#966 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#967 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#968 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#965,
  'distance_accuracy_value','confusion accuracy');
#969 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#956));
#970 = SHAPE_DEFINITION_REPRESENTATION(#971,#977);
#971 = PRODUCT_DEFINITION_SHAPE('','',#972);
#972 = PRODUCT_DEFINITION('design','',#973,#976);
#973 = PRODUCT_DEFINITION_FORMATION('','',#974);
#974 = PRODUCT('SOLID','SOLID','',(#975));
#975 = PRODUCT_CONTEXT('',#2,'mechanical');
#976 = PRODUCT_DEFINITION_CONTEXT('part definition',#2,'design');
#977 = ADVANCED_BREP_SHAPE_REPRESENTATION('',(#11,#978),#1076);
#978 = MANIFOLD_SOLID_BREP('',#979);
#979 = CLOSED_SHELL('',(#980,#1068,#1072));
#980 = ADVANCED_FACE('',(#981),#994,.T.);
#981 = FACE_BOUND('',#982,.T.);
#982 = EDGE_LOOP('',(#983,#1017,#1040,#1067));
#983 = ORIENTED_EDGE('',*,*,#984,.T.);
#984 = EDGE_CURVE('',#985,#985,#987,.T.);
#985 = VERTEX_POINT('',#986);
#986 = CARTESIAN_POINT('',(-211.652878532,-95.23152229471,
    -206.4657042499));
#987 = SURFACE_CURVE('',#988,(#993,#1005),.PCURVE_S1.);
#988 = CIRCLE('',#989,25.);
#989 = AXIS2_PLACEMENT_3D('',#990,#991,#992);
#990 = CARTESIAN_POINT('',(-229.3305480616,-77.55385276504,
    -206.4657042499));
#991 = DIRECTION('',(0.57922796534,0.57922796534,0.573576436351));
#992 = DIRECTION('',(-0.707106781187,0.707106781187,2.775557561563E-16)
  );
#993 = PCURVE('',#994,#999);
#994 = CYLINDRICAL_SURFACE('',#995,25.);
#995 = AXIS2_PLACEMENT_3D('',#996,#997,#998);
#996 = CARTESIAN_POINT('',(-207.6094993614,-55.83280406481,
    -184.9565878868));
#997 = DIRECTION('',(0.57922796534,0.57922796534,0.573576436351));
#998 = DIRECTION('',(-0.707106781187,0.707106781187,2.775557561563E-16)
  );
#999 = DEFINITIONAL_REPRESENTATION('',(#1000),#1004);
#1000 = LINE('',#1001,#1002);
#1001 = CARTESIAN_POINT('',(2.13162820728E-14,-37.5));
#1002 = VECTOR('',#1003,1.);
#1003 = DIRECTION('',(1.,0.));
#1004 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#1005 = PCURVE('',#1006,#1011);
#1006 = PLANE('',#1007);
#1007 = AXIS2_PLACEMENT_3D('',#1008,#1009,#1010);
#1008 = CARTESIAN_POINT('',(-229.3305480616,-77.55385276504,
    -206.4657042499));
#1009 = DIRECTION('',(0.57922796534,0.57922796534,0.573576436351));
#1010 = DIRECTION('',(-0.707106781187,0.707106781187,2.775557561563E-16)
  );
#1011 = DEFINITIONAL_REPRESENTATION('',(#1012),#1016);
#1012 = CIRCLE('',#1013,25.);
#1013 = AXIS2_PLACEMENT_2D('',#1014,#1015);
#1014 = CARTESIAN_POINT('',(0.,0.));
#1015 = DIRECTION('',(1.,-1.742027637139E-17));
#1016 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#1017 = ORIENTED_EDGE('',*,*,#1018,.T.);
#1018 = EDGE_CURVE('',#985,#1019,#1021,.T.);
#1019 = VERTEX_POINT('',#1020);
#1020 = CARTESIAN_POINT('',(-168.2107811315,-51.78942489424,
    -163.4474715236));
#1021 = SEAM_CURVE('',#1022,(#1026,#1033),.PCURVE_S1.);
#1022 = LINE('',#1023,#1024);
#1023 = CARTESIAN_POINT('',(-189.9318298317,-73.51047359447,
    -184.9565878868));
#1024 = VECTOR('',#1025,1.);
#1025 = DIRECTION('',(0.57922796534,0.57922796534,0.573576436351));
#1026 = PCURVE('',#994,#1027);
#1027 = DEFINITIONAL_REPRESENTATION('',(#1028),#1032);
#1028 = LINE('',#1029,#1030);
#1029 = CARTESIAN_POINT('',(9.424777960769,-3.836930773105E-13));
#1030 = VECTOR('',#1031,1.);
#1031 = DIRECTION('',(0.,1.));
#1032 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#1033 = PCURVE('',#994,#1034);
#1034 = DEFINITIONAL_REPRESENTATION('',(#1035),#1039);
#1035 = LINE('',#1036,#1037);
#1036 = CARTESIAN_POINT('',(3.14159265359,-3.836930773105E-13));
#1037 = VECTOR('',#1038,1.);
#1038 = DIRECTION('',(0.,1.));
#1039 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#1040 = ORIENTED_EDGE('',*,*,#1041,.T.);
#1041 = EDGE_CURVE('',#1019,#1019,#1042,.T.);
#1042 = SURFACE_CURVE('',#1043,(#1048,#1055),.PCURVE_S1.);
#1043 = CIRCLE('',#1044,25.);
#1044 = AXIS2_PLACEMENT_3D('',#1045,#1046,#1047);
#1045 = CARTESIAN_POINT('',(-185.8884506612,-34.11175536457,
    -163.4474715236));
#1046 = DIRECTION('',(-0.57922796534,-0.57922796534,-0.573576436351));
#1047 = DIRECTION('',(-0.707106781187,0.707106781187,2.775557561563E-16)
  );
#1048 = PCURVE('',#994,#1049);
#1049 = DEFINITIONAL_REPRESENTATION('',(#1050),#1054);
#1050 = LINE('',#1051,#1052);
#1051 = CARTESIAN_POINT('',(12.566370614359,37.499999999999));
#1052 = VECTOR('',#1053,1.);
#1053 = DIRECTION('',(-1.,0.));
#1054 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#1055 = PCURVE('',#1056,#1061);
#1056 = PLANE('',#1057);
#1057 = AXIS2_PLACEMENT_3D('',#1058,#1059,#1060);
#1058 = CARTESIAN_POINT('',(-185.8884506612,-34.11175536457,
    -163.4474715236));
#1059 = DIRECTION('',(-0.57922796534,-0.57922796534,-0.573576436351));
#1060 = DIRECTION('',(0.707106781187,-0.707106781187,-2.775557561563E-16
    ));
#1061 = DEFINITIONAL_REPRESENTATION('',(#1062),#1066);
#1062 = CIRCLE('',#1063,25.);
#1063 = AXIS2_PLACEMENT_2D('',#1064,#1065);
#1064 = CARTESIAN_POINT('',(0.,0.));
#1065 = DIRECTION('',(-1.,-1.742027637139E-17));
#1066 = ( GEOMETRIC_REPRESENTATION_CONTEXT(2) 
PARAMETRIC_REPRESENTATION_CONTEXT() REPRESENTATION_CONTEXT('2D SPACE',''
  ) );
#1067 = ORIENTED_EDGE('',*,*,#1018,.F.);
#1068 = ADVANCED_FACE('',(#1069),#1056,.F.);
#1069 = FACE_BOUND('',#1070,.T.);
#1070 = EDGE_LOOP('',(#1071));
#1071 = ORIENTED_EDGE('',*,*,#1041,.F.);
#1072 = ADVANCED_FACE('',(#1073),#1006,.F.);
#1073 = FACE_BOUND('',#1074,.T.);
#1074 = EDGE_LOOP('',(#1075));
#1075 = ORIENTED_EDGE('',*,*,#984,.F.);
#1076 = ( GEOMETRIC_REPRESENTATION_CONTEXT(3) 
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#1080)) 
GLOBAL_UNIT_ASSIGNED_CONTEXT((#1077,#1078,#1079)) REPRESENTATION_CONTEXT
('Context #1','3D Context with UNIT and UNCERTAINTY') );
#1077 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.) );
#1078 = ( NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.) );
#1079 = ( NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT() );
#1080 = UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-07),#1077,
  'distance_accuracy_value','confusion accuracy');
#1081 = CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#1082,#1084);
#1082 = ( REPRESENTATION_RELATIONSHIP('','',#977,#959) 
REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#1083) 
SHAPE_REPRESENTATION_RELATIONSHIP() );
#1083 = ITEM_DEFINED_TRANSFORMATION('','',#11,#960);
#1084 = PRODUCT_DEFINITION_SHAPE('Placement','Placement of an item',
  #1085);
#1085 = NEXT_ASSEMBLY_USAGE_OCCURRENCE('8','','',#954,#972,$);
#1086 = PRODUCT_RELATED_PRODUCT_CATEGORY('part',$,(#974));
#1087 = REPRESENTATION('material name',(#1088),#131);
#1088 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 1',
  'Material description 1');
#1089 = DERIVED_UNIT((#1090,#1092));
#1090 = DERIVED_UNIT_ELEMENT(#1091,3.);
#1091 = ( MASS_UNIT() NAMED_UNIT(*) SI_UNIT($,.GRAM.) );
#1092 = DERIVED_UNIT_ELEMENT(#1093,2.);
#1093 = ( LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.CENTI.,.METRE.) );
#1094 = REPRESENTATION('density',(#1095),#131);
#1095 = MEASURE_REPRESENTATION_ITEM('Material densName 1',7.85E-06,#1089
  );
#1096 = PROPERTY_DEFINITION('material property','material name',#27);
#1097 = PROPERTY_DEFINITION_REPRESENTATION(#1096,#1087);
#1098 = PROPERTY_DEFINITION('material property','density',#27);
#1099 = PROPERTY_DEFINITION_REPRESENTATION(#1098,#1094);
#1100 = REPRESENTATION('material name',(#1101),#266);
#1101 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 2',
  'Material description 2');
#1102 = PROPERTY_DEFINITION('material property','material name',#162);
#1103 = PROPERTY_DEFINITION_REPRESENTATION(#1102,#1100);
#1104 = REPRESENTATION('material name',(#1105),#401);
#1105 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 3',
  'Material description 3');
#1106 = PROPERTY_DEFINITION('material property','material name',#297);
#1107 = PROPERTY_DEFINITION_REPRESENTATION(#1106,#1104);
#1108 = REPRESENTATION('material name',(#1109),#536);
#1109 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 4',
  'Material description 4');
#1110 = PROPERTY_DEFINITION('material property','material name',#432);
#1111 = PROPERTY_DEFINITION_REPRESENTATION(#1110,#1108);
#1112 = REPRESENTATION('material name',(#1113),#671);
#1113 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 5',
  'Material description 5');
#1114 = PROPERTY_DEFINITION('material property','material name',#567);
#1115 = PROPERTY_DEFINITION_REPRESENTATION(#1114,#1112);
#1116 = REPRESENTATION('material name',(#1117),#806);
#1117 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 6',
  'Material description 6');
#1118 = PROPERTY_DEFINITION('material property','material name',#702);
#1119 = PROPERTY_DEFINITION_REPRESENTATION(#1118,#1116);
#1120 = REPRESENTATION('material name',(#1121),#941);
#1121 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 7',
  'Material description 7');
#1122 = PROPERTY_DEFINITION('material property','material name',#837);
#1123 = PROPERTY_DEFINITION_REPRESENTATION(#1122,#1120);
#1124 = REPRESENTATION('material name',(#1125),#1076);
#1125 = DESCRIPTIVE_REPRESENTATION_ITEM('Material Name 8',
  'Material description 8');
#1126 = PROPERTY_DEFINITION('material property','material name',#972);
#1127 = PROPERTY_DEFINITION_REPRESENTATION(#1126,#1124);
ENDSEC;
END-ISO-10303-21;
tpaviot commented 1 year ago

Issue confirmed.

This is because the TCollection_HAsciiString c++ type returned by reference is not correctly wrapped.

tpaviot commented 1 year ago

I pushed a new branch that should fix the issue (see https://github.com/tpaviot/pythonocc-core/tree/review/tollection_hasciistring).


# create an handle to a document
doc = TDocStd_Document(TCollection_ExtendedString("pythonocc-doc"))

# Get root assembly
mat_tool = XCAFDoc_DocumentTool_MaterialTool(doc.Main())

step_reader = STEPCAFControl_Reader()

status = step_reader.ReadFile(filename)
if status == IFSelect_RetDone:
    step_reader.Transfer(doc)

material_labels = TDF_LabelSequence()

mat_tool.GetMaterialLabels(material_labels)

# materials
for i in range(1, material_labels.Length() + 1):
    (
        ok,
        material_name,
        material_description,
        material_density,
        material_densname,
        material_densvaltype,
    ) = mat_tool.GetMaterial(material_labels.Value(i))

    print(f"Material name: {material_name}")
    print(f"Material description: {material_description}")
    print(f"Material density: {material_density}")
    print(f"Material densname: {material_densname}")
    print(f"Material_densvaltype: {material_densvaltype}\n")

produces the following output

Material name: Material Name 1
Material description: Material description 1
Material density: 7.85e-06
Material densname: Material densName 1
Material_densvaltype: 

Material name: Material Name 2
Material description: Material description 2
Material density: 0.0
Material densname: 
Material_densvaltype: 

Material name: Material Name 3
Material description: Material description 3
Material density: 0.0
Material densname: 
Material_densvaltype: 

Material name: Material Name 4
Material description: Material description 4
Material density: 0.0
Material densname: 
Material_densvaltype: 

Material name: Material Name 5
Material description: Material description 5
Material density: 0.0
Material densname: 
Material_densvaltype: 

Material name: Material Name 6
Material description: Material description 6
Material density: 0.0
Material densname: 
Material_densvaltype: 

Material name: Material Name 7
Material description: Material description 7
Material density: 0.0
Material densname: 
Material_densvaltype: 

Material name: Material Name 8
Material description: Material description 8
Material density: 0.0
Material densname: 
Material_densvaltype: 

@LuisGMM could you please update the step file so that density, density name and density val type is also available?

LuisGMM commented 1 year ago

Great, thank you very much @tpaviot !!!

I have updated the file, you can find it here. I have written the material attributes in the following way: fMaterial Densname {cnt}' fMaterial Densvaltype {cnt}' f'Material Description {cnt}' f'Material Name {cnt}' Density is cnt, an integer from 1 to 8.

I have noted two things:

  1. Density must be different from 0 for densname to be written, this should be the expected behavior as the information is stored in the same STEP command: #1186 = MEASURE_REPRESENTATION_ITEM('Material Densname 8',8.,#1180);
  2. I could not find any Densvaltype inside the step, nor any documentation about what that parameter is and how it is stored, maybe you have more luck tracking it. (or it is magically recovered while reading it)