Application interpreted construct: Manifold subsurface ISO 10303-521:2011(E)
© ISO

Cover page
Table of contents
Copyright
Foreword
Introduction
1 Scope
2 Normative references
3 Terms, definitions and abbreviated terms
    3.1 Terms and definitions
    3.2 Abbreviated terms

4 EXPRESS short listing
   4.1 General
   4.2 Fundamental concepts and assumptions
   4.3 Manifold subsurface entity definition
   4.4 Manifold subsurface function definitions

A Short names of entities
B Information object registration
C Computer interpretable listings
D EXPRESS-G diagrams
E Examples
Bibliography
Index

Annex E
(informative)

Examples

The part 21 file example below illustrates how this AIC may be used to show the logical relationships between the domains of topological constructs. This is a section of a part 21 file showing all the relevant geometry and topology definitions.

EXAMPLE 1 /* Geometry Definition of original closed shell -
 shell is in shape of a cube with half cylinder on top. */
#1040 =(LENGTH_UNIT()NAMED_UNIT(*)SI_UNIT(.MILLI.,.METRE.));
#1041 =(NAMED_UNIT(*)PLANE_ANGLE_UNIT()SI_UNIT($,.RADIAN.));
#1100 = CARTESIAN_POINT(’origin’,(0.0,0.0,0.0));
#1101 = DIRECTION(’Dir1’,(1.0,0.0,0.0));
#1102 = DIRECTION(’Dir2’,(0.0,1.0,0.0));
#1103 = DIRECTION(’Dir3’,(0.0,0.0,1.0));
#1104 = DIRECTION(’NegX’,(-1.0,0.0,0.0));
/* Points and vertices for face boundaries of closed shell. */
#1105 = VERTEX_POINT(’VertPtO’,#1100);
#1106 = CARTESIAN_POINT(’PtA’,(100.0, 0.0, 0.0));
#1107 = VERTEX_POINT(’VertPtA’,#1106);
#1108 = CARTESIAN_POINT(’PtB’,(100.0, 100.0, 0.0));
#1109 = VERTEX_POINT(’VertPtB’,#1108);
#1110 = CARTESIAN_POINT(’PtC’,(0.0, 100.0, 0.0));
#1111 = VERTEX_POINT(’VertPtC’,#1110);
#1112 = CARTESIAN_POINT(’PtD’,(0.0, 0.0 ,100.0));
#1113 = VERTEX_POINT(’VertPtD’,#1112);
#1114 = CARTESIAN_POINT(’PtE’,(100.0, 0.0 ,100.0));
#1115 = VERTEX_POINT(’VertPtE’,#1114);
#1116 = CARTESIAN_POINT(’PtF’,(100.0, 100.0, 100.0));
#1117 = VERTEX_POINT(’VertPtF’,#1116);
#1118 = CARTESIAN_POINT(’PtG’,(0.0, 100.0, 100.0));
#1119 = VERTEX_POINT(’VertPtG’,#1118);
/* Surfaces for faces */
#1120 = AXIS2_PLACEMENT_3D(’Ax2P3DBase’,#1100,#1103,#1101);
#1121 = PLANE(’Baseplane’, #1120);
#1122 = AXIS2_PLACEMENT_3D(’Ax2P3DFront’,#1100,#1101,#1102);
#1123 = PLANE(’Frontplane’, #1122);
#1124 = AXIS2_PLACEMENT_3D(’Ax2P3DRight’,#1100,#1102,#1103);
#1125 = PLANE(’Rightplane’, #1124);
#1126 = AXIS2_PLACEMENT_3D(’Ax2P3DLeft’,#1110,#1102,#1103);
#1127 = PLANE(’Leftplane’, #1126);
#1128 = AXIS2_PLACEMENT_3D(’Ax2P3DBack’,#1106,#1101,#1102);
#1129 = PLANE(’Backplane’, #1128);
#1130 = CARTESIAN_POINT(’CentreCyl’,(50.0, 0.0, 100.0));
#1131 = AXIS2_PLACEMENT_3D(’Ax2P3DCyl’,#1130,#1102,#1104);
#1132 = CYLINDRICAL_SURFACE(’TopCyl’,#1131, 50.0);
/* Curves and edge_curves */
#1140 = AXIS2_PLACEMENT_3D(’Ax2P3DLcirc’,#1154,#1102,#1104);
#1141 = VECTOR(’VecX’,#1101, 100.0);
#1142 = VECTOR(’VecY’,#1102, 100.0);
#1143 = VECTOR(’VecZ’,#1103, 100.0);
#1144 = LINE(’LineOA’,#1100, #1141);
#1145 = LINE(’LineOC’,#1100, #1142);
#1146 = LINE(’LineOD’,#1100, #1143);
#1147 = LINE(’LineAE’,#1106, #1143);
#1148 = LINE(’LineAB’,#1106, #1142);
#1149 = LINE(’LineCG’,#1110, #1143);
#1150 = LINE(’LineCB’,#1110, #1141);
#1151 = LINE(’LineDG’,#1112, #1142);
#1152 = LINE(’LineEF’,#1114, #1142);
#1153 = CIRCLE(’RtCirc’,#1131, 50.0);
#1154 = CARTESIAN_POINT(’CentreLcirc’,(50.0, 100.0, 100.0));
#1155 = LINE(’LineBF’,#1108,#1143);
#1156 = CIRCLE(’LCirc’,#1140, 50.0);
#1157 = EDGE_CURVE(’EdgeOA’,#1105,#1107,#1144,.T.);
#1158 = EDGE_CURVE(’EdgeOC’,#1105,#1111,#1145,.T.);
#1159 = EDGE_CURVE(’EdgeOD’,#1105,#1113,#1146,.T.);
#1160 = EDGE_CURVE(’EdgeAE’,#1107,#1115,#1147,.T.);
#1161 = EDGE_CURVE(’EdgeAB’,#1107,#1109,#1148,.T.);
#1162 = EDGE_CURVE(’EdgeCG’,#1111,#1119,#1149,.T.);
#1163 = EDGE_CURVE(’EdgeCB’,#1111,#1109,#1150,.T.);
#1164 = EDGE_CURVE(’EdgeDG’,#1113,#1119,#1151,.T.);
#1165 = EDGE_CURVE(’EdgeEF’,#1115,#1117,#1152,.T.);
#1166 = EDGE_CURVE(’EdgeDE’,#1113,#1115,#1153,.T.);
#1167 = EDGE_CURVE(’EdgeGF’,#1119,#1117,#1156,.T.);
#1168 = EDGE_CURVE(’EdgeBF’,#1109,#1117,#1155,.T.);
/* oriented_edges */
#1169 = ORIENTED_EDGE(’OAT’,*,*,#1157,.T.);
#1170 = ORIENTED_EDGE(’OAF’,*,*,#1157,.F.);
#1171 = ORIENTED_EDGE(’OCT’,*,*,#1158,.T.);
#1172 = ORIENTED_EDGE(’OCF’,*,*,#1158,.F.);
#1173 = ORIENTED_EDGE(’ODT’,*,*,#1159,.T.);
#1174 = ORIENTED_EDGE(’ODF’,*,*,#1159,.F.);
#1175 = ORIENTED_EDGE(’AET’,*,*,#1160,.T.);
#1176 = ORIENTED_EDGE(’AEF’,*,*,#1160,.F.);
#1177 = ORIENTED_EDGE(’ABT’,*,*,#1161,.T.);
#1178 = ORIENTED_EDGE(’ABF’,*,*,#1161,.F.);
#1179 = ORIENTED_EDGE(’CGT’,*,*,#1162,.T.);
#1180 = ORIENTED_EDGE(’CGF’,*,*,#1162,.F.);
#1181 = ORIENTED_EDGE(’CBT’,*,*,#1163,.T.);
#1182 = ORIENTED_EDGE(’CBF’,*,*,#1163,.F.);
#1183 = ORIENTED_EDGE(’DGT’,*,*,#1164,.T.);
#1184 = ORIENTED_EDGE(’DGF’,*,*,#1164,.F.);
#1185 = ORIENTED_EDGE(’EFT’,*,*,#1165,.T.);
#1186 = ORIENTED_EDGE(’EFF’,*,*,#1165,.F.);
#1187 = ORIENTED_EDGE(’DET’,*,*,#1166,.T.);
#1188 = ORIENTED_EDGE(’DEF’,*,*,#1166,.F.);
#1189 = ORIENTED_EDGE(’GFT’,*,*,#1167,.T.);
#1190 = ORIENTED_EDGE(’GFF’,*,*,#1167,.F.);
#1191 = ORIENTED_EDGE(’BFT’,*,*,#1168,.T.);
#1192 = ORIENTED_EDGE(’BFF’,*,*,#1168,.F.);
/* edge_loops */
#1201 = EDGE_LOOP(’ELOCBA’,(#1171, #1181, #1178, #1170));
#1202 = EDGE_LOOP(’ELOAED’,(#1169, #1175, #1188, #1174));
#1203 = EDGE_LOOP(’ELODGC’,(#1173, #1183, #1180, #1172));
#1204 = EDGE_LOOP(’ELABFE’,(#1177, #1191, #1186, #1176));
#1205 = EDGE_LOOP(’ELCGFB’,(#1179, #1189, #1192, #1182));
#1206 = EDGE_LOOP(’ELDEFG’,(#1187, #1185, #1190, #1184));
/* face_bounds and advanced_faces */
#1211 = FACE_OUTER_BOUND(’baseBd’,#1201,.T.);
#1212 = FACE_OUTER_BOUND(’rightBd’,#1202,.T.);
#1213 = FACE_OUTER_BOUND(’frontBd’,#1203,.T.);
#1214 = FACE_OUTER_BOUND(’backBd’,#1204,.T.);
#1215 = FACE_OUTER_BOUND(’leftBd’,#1205,.T.);
#1216 = FACE_OUTER_BOUND(’TopcylBd’,#1206,.T.);
#1221 = ADVANCED_FACE(’BaseFace’,(#1211),#1121,.F.);
#1222 = ADVANCED_FACE(’RightFace’,(#1212),#1125,.F.);
#1223 = ADVANCED_FACE(’FrontFace’,(#1213),#1123,.F.);
#1224 = ADVANCED_FACE(’BackFace’,(#1214),#1129,.T.);
#1225 = ADVANCED_FACE(’LeftFace’,(#1215),#1127,.T.);
#1226 = ADVANCED_FACE(’TopcylFaceO’,(#1216),#1132,.T.);
/* closed_shell */
#1250 = CLOSED_SHELL(’CubeCyl’, (#1221, #1222, #1223, #1224, #1225, #1226));
/* New point and vertex for subset1, M is 1/3 of way along semi-circle GF */
#1300 = CARTESIAN_POINT(’PtM’,(25.0, 100.0, 143.3012702));
#1301 = VERTEX_POINT(’VertPtM’, #1300);
/* Edge DM is defined as a surface curve on cylindrical face via a pcurve.
 Define 2D context and 2D geometry for pcurve (line in parameter space) */
#1302 = (GEOMETRIC_REPRESENTATION_CONTEXT(2)
	 PARAMETRIC_REPRESENTATION_CONTEXT()
	 REPRESENTATION_CONTEXT(’CylSurf’,’Parameter_space’));
#1303 = CARTESIAN_POINT(’PtOparam’,(0.0, 0.0));
#1304 = DIRECTION(’Dir2D’, (1.047197551, 100.0));
#1305 = VECTOR(’Vec2D’, #1304, 100.013708);
#1306 = LINE(’LinPcrv’, #1303, #1305);
#1307 = DEFINITIONAL_REPRESENTATION(’Pcurvrep’, (#1306), #1302);
#1308 = PCURVE(’CylPcrv’, #1132, #1307);
/* Define approximate 3D geometry of surface curve D to M */
#1310 = CARTESIAN_POINT(’P2’, (0.0, 33.33333333, 117.4532952));
#1311 = CARTESIAN_POINT(’P3’, (9.885005297, 66.666666667, 134.5746238));
#1312 = BEZIER_CURVE(’CylCrv3D’, 3, (#1112, #1310, #1311, #1300),
	   .UNSPECIFIED., .F., .F.);
#1313 = SURFACE_CURVE(’CrvBM3D’, #1312, (#1308), .PCURVE_S1.);
/* Define new edges for subset 1. */
#1321 = EDGE_CURVE(’EdgeDM’, #1113, #1301, #1313, .T. );
#1322 = ORIENTED_EDGE(’DMT’, *, *, #1321, .T.);
#1323 = SUBEDGE(’EdgeGM’, #1119, #1301, #1167);
#1324 = ORIENTED_EDGE(’GMF’, *, *, #1323, .F.);
/* Define subface and subset 1 (as cfss and open_shell). */
#1325 = EDGE_LOOP(’ELDMG’, (#1322, #1324, #1184));
#1326 = FACE_OUTER_BOUND(’SubCylFac1Bd’, #1325, .T.);
#1327 = SUBFACE(’SubCylF1’, (#1326), #1236);
#1350 = (CONNECTED_FACE_SET( (#1327, #1223))
	CONNECTED_FACE_SUB_SET(#1250)
	OPEN_SHELL( )
	REPRESENTATION_ITEM(’Subset1’)
	TOPOLOGICAL_REPRESENTATION_ITEM( ));
/* Define new edges and associated geometry for subset 2 (inside Subset1). */
#1400 = CARTESIAN_POINT(’PtP’,(0.0, 65.0, 50.0));
#1401 = VERTEX_POINT(’VertPtP’, #1400);
#1402 = CARTESIAN_POINT(’PtQ’,(0.0, 65.0, 100.0));
#1403 = VERTEX_POINT(’VertPtQ’, #1402);
#1404 = CARTESIAN_POINT(’PtR’,(10.0, 65.0, 130.0));
#1405 = VERTEX_POINT(’VertPtR’, #1404);
#1406 = CARTESIAN_POINT(’PtS’,(10.0, 90.0, 130.0));
#1407 = VERTEX_POINT(’VertPtS’, #1406);
#1408 = CARTESIAN_POINT(’PtT’,(0.0, 90.0, 100.0));
#1409 = VERTEX_POINT(’VertPtT’, #1408);
#1410 = CARTESIAN_POINT(’PtU’,(0.0, 90.0, 50.0));
#1411 = VERTEX_POINT(’VertPtU’, #1410);
#1412 = LINE(’LinePQ’, #1400, #1143);
#1413 = LINE(’LinePU’, #1400, #1142);
#1414 = LINE(’LineRS’, #1404, #1142);
#1415 = LINE(’LineUT’, #1410, #1143);
#1416 = CARTESIAN_POINT(’CentreCirc2’,(50.0, 65.0, 100.0));
#1417 = AXIS2_PLACEMENT_3D(’Ax2P3DCirc2’,#1416,#1102,#1104);
#1418 = CIRCLE(’Circ2’,#1417, 50.0);
#1419 = CARTESIAN_POINT(’CentreCirc3’,(50.0, 90.0, 100.0));
#1420 = AXIS2_PLACEMENT_3D(’Ax2P3DCirc3’,#1419,#1102,#1104);
#1421 = CIRCLE(’Circ3’,#1420, 50.0);
#1422 = EDGE_CURVE(’EdgePQ’, #1401, #1403, #1412, .T.);
#1423 = EDGE_CURVE(’EdgePU’, #1401, #1411, #1413, .T.);
#1424 = EDGE_CURVE(’EdgeRS’, #1405, #1407, #1414, .T.);
#1425 = EDGE_CURVE(’EdgeUT’, #1411, #1409, #1415, .T.);
#1426 = EDGE_CURVE(’EdgeQR’, #1403, #1405, #1418, .T.);
#1427 = EDGE_CURVE(’EdgeTS’, #1409, #1407, #1421, .T.);
#1428 = SUBEDGE(’EdgeQT’, #1403, #1409, #1164);
/* Define edge_loops, face_bounds and subfaces */
#1429 = ORIENTED_EDGE(’PQT’, *, *, #1422, .T.);
#1430 = ORIENTED_EDGE(’PUF’, *, *, #1423, .F.);
#1431 = ORIENTED_EDGE(’RST’, *, *, #1424, .T.);
#1432 = ORIENTED_EDGE(’UTF’, *, *, #1425, .F.);
#1433 = ORIENTED_EDGE(’QRT’, *, *, #1426, .T.);
#1434 = ORIENTED_EDGE(’TSF’, *, *, #1427, .F.);
#1435 = ORIENTED_EDGE(’QTT’, *, *, #1428, .T.);
#1436 = ORIENTED_EDGE(’QTF’, *, *, #1428, .F.);
#1437 = EDGE_LOOP(’ELPQTU’, (#1429, #1435, #1432, #1430));
#1438 = EDGE_LOOP(’ELQRST’, (#1433, #1431, #1434, #1436));
#1439 = FACE_OUTER_BOUND(’SubCylFac2Bd’, #1438, .T.);
#1440 = FACE_OUTER_BOUND(’SubFrontBd’, #1437, .T.);
#1441 = SUBFACE(’SubCylF2’, (#1439), #1327);
#1442 = SUBFACE(’SubFront’, (#1440), #1223);
#1450 = (CONNECTED_FACE_SET( (#1441, #1442))
	CONNECTED_FACE_SUB_SET(#1350)
	OPEN_SHELL( )
	REPRESENTATION_ITEM(’Subset2’)
	TOPOLOGICAL_REPRESENTATION_ITEM( ));
#1490 = (GEOMETRIC_REPRESENTATION_CONTEXT(3)
	GLOBAL_UNIT_ASSIGNED_CONTEXT((#1040,#1041))
	REPRESENTATION_CONTEXT(’Context for Subsets’,
	’This is a 3D context using millimetres’));
#1500 = MANIFOLD_SUBSURFACE_SHAPE_REPRESENTATION(’SubsetRep’,
	(#1350, #1450), #1490);

NOTE 1   #1250 is a closed_shell in the form of a cube with a half cylinder on top. It has 6 faces, 5 of them planar, with a cylindrical top face. This could be used to define an advanced_brep_shape_representation from ISO 10303-514 [3], or a manifold_surface_shape_representation from ISO 10303-509 [2]. For the purpose of naming the faces and describing the geometry it is assumed that the closed shell is being viewed from a point along the negative X axis with the Z axis pointing towards the top of the cylindrical face.

NOTE 2   #1350 defines an instance of open_shell and connected_face_sub_set that refers to #1250 as its parent_face_set. It consists of 2 faces, one of these is the front face from #1250 and the second is a subface of the cylindrical top face of #1250. One of the edges of this triangular subface is a subedge, one is an existing edge and the third has its geometry defined by a pcurve on the cylindrical surface. This pcurve is a line in parameter space from the point (0,0) to (π/3, 100). A Bezier curve provides a slightly less precise 3 dimensional representation of this surface_curve.

NOTE 3   #1450 illustrates the possibility of nesting connected face_sub_sets. It is defined with #1350 as parent_face_set. It consists of two subfaces, each related to a face of #1350. The shared edge between these subfaces is another example of a subedge.

NOTE 4   #1500 is an instance of manifold_subsurface_shape_representation containing connected face sub_sets #1350 and #1450. It is defined in a 3 dimensional geometric_representation_context using millimetres and radians as units. This provides the context for all 3D geometry in the file. The geometry defined in this file is illustrated in figure E.1.



Figure E.1 —  Manifold_subsurface_shape_representation faces and subfaces

Figure E.1 —  Manifold_subsurface_shape_representation faces and subfaces



© ISO 2011 — All rights reserved