Объект advanced_face является специальным типом объекта face_surface, который имеет дополнительные ограничения с тем, чтобы гарантировать то, что геометрия прямо и полностью определена. Объект advanced_face является объектом верхнего уровня, который используется для формулировки точного смысла топологически ограниченной поверхности, соответствующей области применения данной ПИК.
Требуется, чтобы объект advanced_face был полностью ограничен посредством объектов edge_loop или vertex_loop.
Тип face_outer_bound может иметь не более одной границы (объект bound) грани.
Примечание - Для некоторых типов замкнутых или частично замкнутых поверхностей может оказаться невозможным установить единственную внешнюю границу.
Примеры
1 Любой объект edge_loop на плоской поверхности может использоваться для определения объекта face_outer_bound при условии, что он не заключен в какой-либо другой замкнутой цепи на грани.
2 Окружная замкнутая петля вокруг цилиндрической поверхности (объект cylindrical_surfасе) не может определять объект face_outer_bound, так как она не окружает замкнутую область поверхности.
EXPRESS-спецификация
*) | |||||||||||
ENTITY advanced_face | |||||||||||
SUBTYPE OF (face_surface); | |||||||||||
WHERE | |||||||||||
WR1 : SIZEOF (['AIC_TOPOLOGICALLY_BOUNDED_SURFACE.ELEMENTARY_SURFACE', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.B_SPLINE_SURFACE", | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.SWEPT_SURFACE']* | |||||||||||
TYPEOF (face_geometry)) = 1; | |||||||||||
WR2 : SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* bounds | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_LOOP' IN | |||||||||||
TYPEOF (bnds.bound)) | NOT (SIZEOF (QUERY | |||||||||||
(oe <* elp_fbnds. bound\path.edge_list| | |||||||||||
NOT ('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_CURVE' IN | |||||||||||
TYPEOF (oe\oriented_edge.edge_element)))) = 0))) = 0; | |||||||||||
WR3 : SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* bounds | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_LOOP' IN | |||||||||||
TYPEOF(bnds.bound)) I | |||||||||||
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list I | |||||||||||
NOT (SIZEOF(['AIC_TOPOLOGICALLY_BOUNDED_SURFACE.LINE', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.CONIC', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.POLYLINE', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.SURFACE_CURVE', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.B_SPLINE_CURVE']* | |||||||||||
TYPEOF (oe.edge_element\edge_curve.edge_geometry)) = 1) | |||||||||||
)) = 0))) = 0; | |||||||||||
WR4 : SIZEOF(QUERY (elp_fbnds <* QUERY (bnds <* bounds | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_LOOP' IN | |||||||||||
TYPEOF (bnds.bound)) | | |||||||||||
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | | |||||||||||
NOT (((('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.VERTEX_POINT' IN | |||||||||||
TYPEOF (oe\edge.edge_start)) AND | |||||||||||
('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.CARTESIAN_POINT' IN | |||||||||||
TYPEOF (oe\edge.edge_start\vertex_point.vertex_geometry)))) AND | |||||||||||
(('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.VERTEX_POINT' IN | |||||||||||
TYPEOF (oe\edge.edge_end)) AND | |||||||||||
('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.CARTESIAN_POlNT' IN | |||||||||||
TYPEOF (oe\edge.edge_end\vertex_point.vertex_geometry))) | |||||||||||
))) = 0))) = 0; | |||||||||||
WR5 : SlZEOF (QUERY (elp_fbnds <* QUERY (bnds <* bounds | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_LOOP' IN | |||||||||||
TYPEOF (bnds.bound)) | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.ORIENTED_PATH' IN | |||||||||||
TYPEOF (elp_fbnds.bound))) =0; | |||||||||||
WR6 : (NOT ('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.SWEPT_SURFACE' IN | |||||||||||
TYPEOF(face_geometry))) OR | |||||||||||
(SIZEOF (['AIC_TOPOLOGICALLY_BOUNDED_SURFACE.LINE', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.CONIC', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.POLYLINE', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.B_SPLINE_CURVE']* | |||||||||||
TYPEOF(face_geometry\swept_surface.swept_curve)) = 1); | |||||||||||
WR7 : SIZEOF(QUERY (vlp_fbnds <* QUERY (bnds <* bounds | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.VERTEX_LOOP 'IN | |||||||||||
TYPEOF (bnds.bound)) | | |||||||||||
NOT (('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.VERTEX_POINT' IN | |||||||||||
TYPEOF (vlp_fbnds\face_bound. bound\vertex_loop.loop_vertex)) | |||||||||||
AND ('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.CARTESIAN_POINT' IN | |||||||||||
TYPEOF(vlp_fbnds\face_bound.bound\vertex_loop. | |||||||||||
loop_vertex\vertex_point.vertex_geometry)) | |||||||||||
))) = 0; | |||||||||||
WR8 : SIZEOF (QUERY (bnd <* bounds | | |||||||||||
NOT (SIZEOF(['AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_LOOP', | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.VERTEX_LOOP']* | |||||||||||
TYPEOF (bnd.bound)) = 1))) = 0; | |||||||||||
WR9 : SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* bounds | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_LOOP' IN | |||||||||||
TYPEOF(bnds.bound)) | | |||||||||||
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | | |||||||||||
('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.SURFACE_CURVE' IN | |||||||||||
TYPEOF (oe\oriented_edge.edge element\edge_curve.edge_geometry)) | |||||||||||
AND (NOT (SIZEOF (QUERY (sc_ag <* | |||||||||||
oe.edge_element\edge_curve.edge_geometry\ | |||||||||||
surface_curve.associated_geometry l | |||||||||||
NOT ('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.PCURVE' IN | |||||||||||
TYPEOF (sc_ag)))) = 0)))) = 0))) = 0; | |||||||||||
WR10 : ((NOT('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.SWEPT_SURFACE' IN | |||||||||||
TYPEOF (face_geometry))) OR | |||||||||||
((NOT ('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.POLYLINE' IN | |||||||||||
TYPEOF (face_geometry\swept_surface.swept_curve)))OR | |||||||||||
(SIZEOF (face_geometry\swept_surface.swept_curve\polyline.points) | |||||||||||
> = 3)))AND | |||||||||||
(SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* bounds | | |||||||||||
'AIC_TOPOLOGICALLY_BOUNDED_SURFACE.EDGE_LOOP' IN | |||||||||||
TYPEOF(bnds.bound)) | | |||||||||||
NOT (SIZEOF (QUERY (oe <* elp_fbnds.bound\path.edge_list | | |||||||||||
('AIC_TOPOLOGICALLY_BOUNDED_SURFACE.POLYLINE' IN | |||||||||||
TYPEOF(oe\oriented_edge.edge_element\edge_curve.edge_geometry)) | |||||||||||
AND (NOT (SIZEOF (oe\oriented_edge.edge_element\ | |||||||||||
edge_curve.edge_geometry\polyline.points) > = 3)))) = 0))) = 0); | |||||||||||
END_ENTITY; | |||||||||||
(* |
Формальные утверждения
WR1 - геометрия, используемая при определении грани, должна быть ограниченной. Тип геометрии грани должен быть elementary_surface, swept_surface или b_spline_surface.
WR2 - геометрия всех граничных ребер грани должна быть полностью определена через объекты edge_curve.
WR3 - типы линий, используемых для определения геометрии ребер, должны быть ограничены типами line, conic, polyline, surface_curve или b_splines_curve.
WR4 - вершины, используемые при определении грани, должны иметь тип vertex_point с геометрией, определенной объектом cartesian_point.
WR5 - запрещено использование ориентированных путей при определении объектов edge_loop объекта advanced_face.
WR6 - если геометрия грани имеет тип swept_surface, то используемый в ее определении объект swept_curve должен быть типа line, conic, polyline или b_splines_curve.
WR7 - для любого объекта vertex_loop, используемого для ограничения грани, объект loop_vertex должен иметь тип vertex_point, а геометрия должна быть определена посредством объекта cartesian_point.
WR8 - границы грани должны быть определены посредством объектов либо edge_loop, либо vertex_loop.
WR9 - если объект surface_curve используется как часть границы грани, то атрибут объекта associated_geometry должен ссылаться на объекты pcurve, но не на объекты surface.
WR10 - если объект polyline используется либо для определения объекта swept_surface, либо как часть границы грани, то он должен содержать, по крайней мере, три точки.
Неформальное утверждение
IР1 - любой экземпляр объекта advanced_face, который имеет геометрию полной сферической поверхности (объект spherical_surface), должен быть ограничен посредством объекта vertex_loop, расположенного в точке, где ось Z системы координат выходит за пределы поверхности сферы (то есть в точке "Северный Полюс" сферы).
EXPRESS-спецификация
*) |
END SCHEMA; -- конец схемы AIC_TOPOLOGICALLY_BOUNDED_SURFACE |
(* |