上一篇文章介绍了工程数据交换的“老前辈”IGES,它像一位忠实的翻译官,能帮助不同的CAD软件读懂基本的几何形状。但我们也看到了它的局限:它只传形状,不传意图,就像只给了你一张零件的照片,而不是一张标注详尽的、可修改的设计图纸。
今天,我们要请出一位更强大的角色——STEP文件。它不仅能传递几何形状,更能传递关于这个产品的、近乎完整的“基因信息”。
IGES解决了“从无到有”的问题,但工业界的需求在不断提高。人们不再满足于只交换“看起来一样”的模型,而是希望交换:
这些,IGES都难以胜任。于是,在国际标准化组织(ISO)的主持下,一个更宏伟、更全面的标准诞生了,它就是 STEP。
STEP 的全称是 Standard for the Exchange of Product model data(产品模型数据交换标准)。顾名思义,它的目标不再是交换“图形”,而是交换整个“产品模型”。
如果说IGES是一张“产品照片”,那么STEP就是一份“产品的数字化基因库”。它能传输的信息量远超你的想象:
ISO-10303-21;
HEADER;
FILE_DESCRIPTION(('CAx-IF Rec.Pracs.---Model Styling and Organization---1.2---2011-12-15','CAx-IF Rec.Pracs.---Geometric and Assembly Validation Properties---4.3---2015-07-16','CAx-IF Rec.Pracs.---Representation and Presentation of Product Manufacturing Information (PMI)---4.0.3---2016-08-25'),'2;1');
FILE_NAME('IGES.step','2025-10-06T14:45:40+08:00',(' '),(''),'HyperWorksVersion-2025.0.0.24','3D_Kernel_IO2022 SP8 by CT CoreTechnologie',' ');
FILE_SCHEMA(('AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF {1010303442114 }'));
ENDSEC;
DATA;
#1=APPLICATION_CONTEXT('Managed model based 3d engineering');
#6=APPLICATION_PROTOCOL_DEFINITION('International Standard','ap242_managed_model_based_3d_engineering',2011,#1);
#11=CARTESIAN_POINT('',(0.,0.,0.));
#16=DIRECTION('',(0.,0.,1.));
#21=DIRECTION('',(1.,0.,0.));
#26=AXIS2_PLACEMENT_3D('',#11,#16,#21);
#31=PRODUCT_CONTEXT('',#1,'mechanical');
#36=PRODUCT_DEFINITION_CONTEXT('part definition',#1,'');
#41=PRODUCT('Box.1','Box.1','',(#31));
#46=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#41,.NOT_KNOWN.);
#51=PRODUCT_DEFINITION('','',#46,#36);
#56=PRODUCT_DEFINITION_SHAPE('','',#51);
#61=(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#66=(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#71=PLANE_ANGLE_MEASURE_WITH_UNIT(PLANE_ANGLE_MEASURE(1.745329251994E-02),#66);
#76=DIMENSIONAL_EXPONENTS(0.,0.,0.,0.,0.,0.,0.);
#81=(CONVERSION_BASED_UNIT('DEGREE',#71)NAMED_UNIT(#76)PLANE_ANGLE_UNIT());
#86=(NAMED_UNIT(*)SI_UNIT($,.STERADIAN.)SOLID_ANGLE_UNIT());
#91=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(10.E-03),#61,'distance_accuracy_value','Confusion accuracy');
#96=(GEOMETRIC_REPRESENTATION_CONTEXT(3)GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#91))GLOBAL_UNIT_ASSIGNED_CONTEXT((#61,#81,#86))REPRESENTATION_CONTEXT('',''));
#111=DIRECTION('',(0.,0.,-1.));
#116=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,0.));
#121=DIRECTION('',(1.,-0.,0.));
#126=AXIS2_PLACEMENT_3D('',#116,#111,#121);
#131=PLANE('',#126);
#136=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,-1.135485234665E-17));
#141=DIRECTION('',(1.,-1.419916815705E-16,0.));
#146=VECTOR('',#141,1.);
#151=LINE('',#136,#146);
#156=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,-1.135485234665E-17));
#157=VERTEX_POINT('',#156);
#161=CARTESIAN_POINT('',(4.531893004115,7.057613168724,-1.135485234665E-17));
#162=VERTEX_POINT('',#161);
#166=EDGE_CURVE('',#157,#162,#151,.T.);
#171=ORIENTED_EDGE('',*,*,#166,.T.);
#176=CARTESIAN_POINT('',(4.531893004115,7.057613168724,-1.135485234665E-17));
#181=DIRECTION('',(0.,-1.,2.31867993297E-18));
#186=VECTOR('',#181,1.);
#191=LINE('',#176,#186);
#196=CARTESIAN_POINT('',(4.531893004115,2.16049382716,0.));
#197=VERTEX_POINT('',#196);
#201=EDGE_CURVE('',#162,#197,#191,.T.);
#206=ORIENTED_EDGE('',*,*,#201,.T.);
#211=CARTESIAN_POINT('',(4.531893004115,2.16049382716,0.));
#216=DIRECTION('',(-1.,0.,-1.815282315944E-18));
#221=VECTOR('',#216,1.);
#226=LINE('',#211,#221);
#231=CARTESIAN_POINT('',(-1.723251028807,2.16049382716,-1.135485234665E-17));
#232=VERTEX_POINT('',#231);
#236=EDGE_CURVE('',#197,#232,#226,.T.);
#241=ORIENTED_EDGE('',*,*,#236,.T.);
#246=CARTESIAN_POINT('',(-1.723251028807,2.16049382716,-1.135485234665E-17));
#251=DIRECTION('',(0.,1.,0.));
#256=VECTOR('',#251,1.);
#261=LINE('',#246,#256);
#266=EDGE_CURVE('',#232,#157,#261,.T.);
#271=ORIENTED_EDGE('',*,*,#266,.T.);
#276=EDGE_LOOP('',(#171,#206,#241,#271));
#281=FACE_OUTER_BOUND('',#276,.T.);
#286=ADVANCED_FACE('',(#281),#131,.T.);
#291=DIRECTION('',(0.,1.,0.));
#296=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,-2.22044604925E-16));
#301=DIRECTION('',(0.,-0.,1.));
#306=AXIS2_PLACEMENT_3D('',#296,#291,#301);
#311=PLANE('',#306);
#316=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,-1.135485234665E-17));
#321=DIRECTION('',(0.,-2.226074102784E-16,1.));
#326=VECTOR('',#321,1.);
#331=LINE('',#316,#326);
#336=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,3.989887032914));
#337=VERTEX_POINT('',#336);
#341=EDGE_CURVE('',#157,#337,#331,.T.);
#346=ORIENTED_EDGE('',*,*,#341,.T.);
#351=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,3.989887032914));
#356=DIRECTION('',(1.,0.,0.));
#361=VECTOR('',#356,1.);
#366=LINE('',#351,#361);
#371=CARTESIAN_POINT('',(4.531893004115,7.057613168724,3.989887032914));
#372=VERTEX_POINT('',#371);
#376=EDGE_CURVE('',#337,#372,#366,.T.);
#381=ORIENTED_EDGE('',*,*,#376,.T.);
#386=CARTESIAN_POINT('',(4.531893004115,7.057613168724,3.989887032914));
#391=DIRECTION('',(0.,0.,-1.));
#396=VECTOR('',#391,1.);
#401=LINE('',#386,#396);
#406=EDGE_CURVE('',#372,#162,#401,.T.);
#411=ORIENTED_EDGE('',*,*,#406,.T.);
#416=ORIENTED_EDGE('',*,*,#166,.F.);
#421=EDGE_LOOP('',(#346,#381,#411,#416));
#426=FACE_OUTER_BOUND('',#421,.T.);
#431=ADVANCED_FACE('',(#426),#311,.T.);
#436=DIRECTION('',(1.,0.,-0.));
#441=CARTESIAN_POINT('',(4.531893004115,2.16049382716,3.989887032914));
#446=DIRECTION('',(-0.,0.,-1.));
#451=AXIS2_PLACEMENT_3D('',#441,#436,#446);
#456=PLANE('',#451);
#461=CARTESIAN_POINT('',(4.531893004115,2.16049382716,3.989887032914));
#466=DIRECTION('',(0.,0.,-1.));
#471=VECTOR('',#466,1.);
#476=LINE('',#461,#471);
#481=CARTESIAN_POINT('',(4.531893004115,2.16049382716,3.989887032914));
#482=VERTEX_POINT('',#481);
#486=EDGE_CURVE('',#482,#197,#476,.T.);
#491=ORIENTED_EDGE('',*,*,#486,.T.);
#496=ORIENTED_EDGE('',*,*,#201,.F.);
#501=ORIENTED_EDGE('',*,*,#406,.F.);
#506=CARTESIAN_POINT('',(4.531893004115,7.057613168724,3.989887032914));
#511=DIRECTION('',(0.,-1.,0.));
#516=VECTOR('',#511,1.);
#521=LINE('',#506,#516);
#526=EDGE_CURVE('',#372,#482,#521,.T.);
#531=ORIENTED_EDGE('',*,*,#526,.T.);
#536=EDGE_LOOP('',(#491,#496,#501,#531));
#541=FACE_OUTER_BOUND('',#536,.T.);
#546=ADVANCED_FACE('',(#541),#456,.T.);
#551=DIRECTION('',(-0.,-1.,0.));
#556=CARTESIAN_POINT('',(4.531893004115,2.16049382716,3.989887032914));
#561=DIRECTION('',(-1.,0.,0.));
#566=AXIS2_PLACEMENT_3D('',#556,#551,#561);
#571=PLANE('',#566);
#576=CARTESIAN_POINT('',(4.531893004115,2.16049382716,3.989887032914));
#581=DIRECTION('',(-1.,0.,0.));
#586=VECTOR('',#581,1.);
#591=LINE('',#576,#586);
#596=CARTESIAN_POINT('',(-1.723251028807,2.16049382716,3.989887032914));
#597=VERTEX_POINT('',#596);
#601=EDGE_CURVE('',#482,#597,#591,.T.);
#606=ORIENTED_EDGE('',*,*,#601,.T.);
#611=CARTESIAN_POINT('',(-1.723251028807,2.16049382716,3.989887032914));
#616=DIRECTION('',(2.226074102784E-16,0.,-1.));
#621=VECTOR('',#616,1.);
#626=LINE('',#611,#621);
#631=EDGE_CURVE('',#597,#232,#626,.T.);
#636=ORIENTED_EDGE('',*,*,#631,.T.);
#641=ORIENTED_EDGE('',*,*,#236,.F.);
#646=ORIENTED_EDGE('',*,*,#486,.F.);
#651=EDGE_LOOP('',(#606,#636,#641,#646));
#656=FACE_OUTER_BOUND('',#651,.T.);
#661=ADVANCED_FACE('',(#656),#571,.T.);
#666=DIRECTION('',(-1.,0.,0.));
#671=CARTESIAN_POINT('',(-1.723251028807,7.057613168724,-2.22044604925E-16));
#676=DIRECTION('',(-0.,-1.,0.));
#681=AXIS2_PLACEMENT_3D('',#671,#666,#676);
#686=PLANE('',#681);
#691=ORIENTED_EDGE('',*,*,#266,.F.);
#696=ORIENTED_EDGE('',*,*,#631,.F.);
#701=CARTESIAN_POINT('',(-1.723251028807,2.16049382716,3.989887032914));
#706=DIRECTION('',(1.813675260396E-16,1.,0.));
#711=VECTOR('',#706,1.);
#716=LINE('',#701,#711);
#721=EDGE_CURVE('',#597,#337,#716,.T.);
#726=ORIENTED_EDGE('',*,*,#721,.T.);
#731=ORIENTED_EDGE('',*,*,#341,.F.);
#736=EDGE_LOOP('',(#691,#696,#726,#731));
#741=FACE_OUTER_BOUND('',#736,.T.);
#746=ADVANCED_FACE('',(#741),#686,.T.);
#751=DIRECTION('',(0.,-0.,1.));
#756=CARTESIAN_POINT('',(4.531893004115,2.16049382716,3.989887032914));
#761=DIRECTION('',(0.,1.,0.));
#766=AXIS2_PLACEMENT_3D('',#756,#751,#761);
#771=PLANE('',#766);
#776=ORIENTED_EDGE('',*,*,#526,.F.);
#781=ORIENTED_EDGE('',*,*,#376,.F.);
#786=ORIENTED_EDGE('',*,*,#721,.F.);
#791=ORIENTED_EDGE('',*,*,#601,.F.);
#796=EDGE_LOOP('',(#776,#781,#786,#791));
#801=FACE_OUTER_BOUND('',#796,.T.);
#806=ADVANCED_FACE('',(#801),#771,.T.);
#811=CLOSED_SHELL('Box.1',(#286,#431,#546,#661,#746,#806));
#816=MANIFOLD_SOLID_BREP('Box.1',#811);
#821=COLOUR_RGB('821',0.850980392157,0.592156862745,0.588235294118);
#826=FILL_AREA_STYLE_COLOUR('',#821);
#831=FILL_AREA_STYLE('',(#826));
#836=SURFACE_STYLE_FILL_AREA(#831);
#841=SURFACE_SIDE_STYLE('',(#836));
#846=SURFACE_STYLE_USAGE(.BOTH.,#841);
#851=PRESENTATION_STYLE_ASSIGNMENT((#846));
#856=STYLED_ITEM('',(#851),#286);
#861=COLOUR_RGB('861',0.850980392157,0.592156862745,0.588235294118);
#866=FILL_AREA_STYLE_COLOUR('',#861);
#871=FILL_AREA_STYLE('',(#866));
#876=SURFACE_STYLE_FILL_AREA(#871);
#881=SURFACE_SIDE_STYLE('',(#876));
#886=SURFACE_STYLE_USAGE(.BOTH.,#881);
#891=PRESENTATION_STYLE_ASSIGNMENT((#886));
#896=STYLED_ITEM('',(#891),#431);
#901=COLOUR_RGB('901',0.850980392157,0.592156862745,0.588235294118);
#906=FILL_AREA_STYLE_COLOUR('',#901);
#911=FILL_AREA_STYLE('',(#906));
#916=SURFACE_STYLE_FILL_AREA(#911);
#921=SURFACE_SIDE_STYLE('',(#916));
#926=SURFACE_STYLE_USAGE(.BOTH.,#921);
#931=PRESENTATION_STYLE_ASSIGNMENT((#926));
#936=STYLED_ITEM('',(#931),#546);
#941=COLOUR_RGB('941',0.850980392157,0.592156862745,0.588235294118);
#946=FILL_AREA_STYLE_COLOUR('',#941);
#951=FILL_AREA_STYLE('',(#946));
#956=SURFACE_STYLE_FILL_AREA(#951);
#961=SURFACE_SIDE_STYLE('',(#956));
#966=SURFACE_STYLE_USAGE(.BOTH.,#961);
#971=PRESENTATION_STYLE_ASSIGNMENT((#966));
#976=STYLED_ITEM('',(#971),#661);
#981=COLOUR_RGB('981',0.850980392157,0.592156862745,0.588235294118);
#986=FILL_AREA_STYLE_COLOUR('',#981);
#991=FILL_AREA_STYLE('',(#986));
#996=SURFACE_STYLE_FILL_AREA(#991);
#1001=SURFACE_SIDE_STYLE('',(#996));
#1006=SURFACE_STYLE_USAGE(.BOTH.,#1001);
#1011=PRESENTATION_STYLE_ASSIGNMENT((#1006));
#1016=STYLED_ITEM('',(#1011),#746);
#1021=COLOUR_RGB('1021',0.850980392157,0.592156862745,0.588235294118);
#1026=FILL_AREA_STYLE_COLOUR('',#1021);
#1031=FILL_AREA_STYLE('',(#1026));
#1036=SURFACE_STYLE_FILL_AREA(#1031);
#1041=SURFACE_SIDE_STYLE('',(#1036));
#1046=SURFACE_STYLE_USAGE(.BOTH.,#1041);
#1051=PRESENTATION_STYLE_ASSIGNMENT((#1046));
#1056=STYLED_ITEM('',(#1051),#806);
#106=ADVANCED_BREP_SHAPE_REPRESENTATION('Box.1',( #816),#96);
#101=SHAPE_REPRESENTATION('Box.1',( #26),#96);
#1076=SHAPE_DEFINITION_REPRESENTATION(#56,#101);
#1081=SHAPE_REPRESENTATION_RELATIONSHIP('','',#106,#101);
#1086=PRODUCT_CATEGORY('part',$ );
#1091=PRODUCT_RELATED_PRODUCT_CATEGORY('detail',$,( #41 ) );
#1096=PRODUCT_CATEGORY_RELATIONSHIP('','',#1086,#1091);
#1101=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#856,#896,#936,#976,#1016,#1056),#96);
ENDSEC;
END-ISO-10303-21;
STEP 文件采用 “段(Section)+ 实体(Entity) ” 的分层结构,每个实体以#数字=实体类型(参数)
格式定义,不同实体通过 “引用其他实体的 #ID” 建立关联,形成完整的模型数据网络。文件包含 3 个核心段,功能如下:
HEADER | FILE_NAME FILE_SCHEMA 指定 AP242 协议 | |
DATA | #11=CARTESIAN_POINT #816=MANIFOLD_SOLID_BREP (实体) | |
END-ISO-10303-21 |
这份 STEP 文件的核心是一个完整定义的 “长方体实体(Box.1)” ,涵盖从 “基础几何元素(点、线、面)” 到 “实体拓扑(闭合壳、BREP 实体)” 再到 “产品属性(名称、分类、样式)” 的全链条信息,以下分模块解析:
头部段通过 3 个关键实体定义文件的基础规则,是后续数据解析的 “前提”:
FILE_DESCRIPTION
:说明文件遵循的 CAx-IF(计算机辅助技术接口论坛)推荐规范,涵盖 “模型样式组织”“几何装配验证”“PMI 表示” 3 类标准,确保数据符合工业通用规则;FILE_NAME
:核心信息包括:IGES.step
;HyperWorksVersion-2025.0.0.24
;3D_Kernel_IO2022 SP8 by CT CoreTechnologie
(HyperWorks 依赖的 3D 几何内核);FILE_SCHEMA
:指定文件遵循的 STEP 应用协议AP242
,该协议是当前 3D 模型工程数据交换的主流标准,支持从设计到制造的全流程数据传递(如几何、公差、材料、工艺信息)。数据段是文件的主体,按 “几何元素→拓扑结构→产品属性→样式定义” 的逻辑分层构建模型,每个实体通过#ID
相互引用,形成关联网络:
所有复杂模型的 “最小单元”,文件中定义了长方体的顶点、参考方向和坐标系:
CARTESIAN_POINT
(笛卡尔点,#11、#116、#136 等):#11=CARTESIAN_POINT('',(0.,0.,0.));
—— 第一个参数为空(点名称),第二个参数是(X,Y,Z)
坐标;DIRECTION
(方向向量,#16、#21、#111 等):#16=DIRECTION('',(0.,0.,1.));
—— 定义 3D 空间中的方向,如(0,0,1)
是 Z 轴正方向,(1,0,0)
是 X 轴正方向,用于构建坐标系和线条;AXIS2_PLACEMENT_3D
(3D 坐标系,#26、#126 等):从 “点→线→边→面→壳→实体” 的拓扑层级,完整定义长方体的几何形态:
VECTOR
(向量,#146、#186 等):由方向向量(DIRECTION
)和长度(1.,单位向量)组成,用于定义直线的 “方向和延伸方式”;LINE
(直线,#151、#191 等):VERTEX_POINT
(顶点,#157、#162 等):将CARTESIAN_POINT
包装为 “拓扑顶点”,用于关联边和点(如#157=VERTEX_POINT('',#156);
,将点 #156 定义为拓扑顶点);EDGE_CURVE
(边 - 曲线关联,#166、#201 等):#166=EDGE_CURVE('',#157,#162,#151,.T.);
—— 关联 “两个顶点(#157、#162)” 和 “一条曲线(#151,直线)”,定义长方体的一条棱边,.T.
表示边的方向与曲线一致;ORIENTED_EDGE
(有向边,#171、#206 等):给EDGE_CURVE
添加方向属性(如.T.
正向、.F.
反向),用于构建面的边界时确保 “绕向一致”(避免面的正反面颠倒);EDGE_LOOP
(边环,#276、#421 等):#276=EDGE_LOOP('',(#171,#206,#241,#271));
—— 将多条有向边(#171、#206 等)按顺序连接,形成一个闭合的环,是面的 “边界轮廓”(如长方体一个面的 4 条边组成一个边环);FACE_OUTER_BOUND
(面的外边界,#281、#426 等):ADVANCED_FACE
(高级面,#286、#431 等):#286=ADVANCED_FACE('',(#281),#131,.T.);
—— 通过 “边界(#281,外边界)” 和 “支撑面(#131,平面)” 定义一个完整的面,.T.
表示面的方向与支撑面一致;文件中共有 6 个ADVANCED_FACE
,对应长方体的 6 个面;CLOSED_SHELL
(闭合壳,#811):#811=CLOSED_SHELL('Box.1',(#286,#431,#546,#661,#746,#806));
—— 将 6 个面(#286 等)按拓扑关系组合成一个 “闭合的壳”,是构成实体的基础(闭合壳无缺口,内部为实体区域);MANIFOLD_SOLID_BREP
(流形实体 BREP,#816):STEP 文件不仅记录几何,还定义模型的 “产品属性”,使其从 “纯几何形状” 成为 “可管理的产品对象”:
PRODUCT
(产品,#41):#41=PRODUCT('Box.1','Box.1','',(#31));
—— 定义产品的名称(Box.1
)、标识(Box.1
),并关联产品上下文(#31,mechanical
,表示机械类产品);PRODUCT_DEFINITION
(产品定义,#51):关联 “产品形成过程(#46)” 和 “产品定义上下文(#36,part definition
,表示零件定义)”,明确该模型是一个 “机械零件”;PRODUCT_DEFINITION_SHAPE
(产品定义形状,#56):关联产品定义(#51),将 “几何实体(BREP)” 与 “产品” 绑定,说明Box.1
的几何形态就是该产品的形状;PRODUCT_CATEGORY
(产品分类,#1086):将产品分类为part
(零件),并通过PRODUCT_RELATED_PRODUCT_CATEGORY
(#1091)关联到具体产品(#41),便于后续 PLM(产品生命周期管理)系统分类管理。STEP 文件支持定义模型的显示样式(如颜色),确保在不同软件中打开时保持一致的视觉效果:
COLOUR_RGB
(RGB 颜色,#821、#861 等):#821=COLOUR_RGB('821',0.850980392157,0.592156862745,0.588235294118);
—— 定义 RGB 颜色值(三个参数分别为红、绿、蓝通道,范围 0-1),该颜色接近 “浅棕色”;FILL_AREA_STYLE
(填充样式,#831、#871 等):将颜色(#821)定义为面的填充样式;SURFACE_STYLE_FILL_AREA
(表面填充样式,#836 等):将填充样式应用到表面;STYLED_ITEM
(样式项,#856、#896 等):将样式(#851,包含表面样式)关联到具体的面(如 #286,长方体的一个面),文件中 6 个面均应用了相同的颜色,确保长方体整体颜色一致。文件末尾的ENDSEC;
(结束数据段)和END-ISO-10303-21;
(结束 STEP 文件)是格式要求的终止标识,确保文件无数据缺失,读取软件可通过该标识判断文件是否完整。
这份 STEP和IGES 文件核心模型一致(均为 Box.1 长方体) ,但 STEP 格式在数据完整性和功能上更具优势,具体对比和结论如下:
Box.1
的长方体机械零件,尺寸可通过顶点坐标计算(如 X 方向长度≈4.53+1.72=6.25,Y 方向长度≈7.06-2.16=4.9,Z 方向高度≈3.99),单位为毫米(SI_UNIT(.MILLI.,.METRE.)
);