Для независимой реализации в схемах прикладных протоколов, в которых используется данная ПИК, предназначен объект non_manifold_surface_shape_representation.
Объект non_manifold_surface_representation описывает форму или части формы объекта product посредством многосвязных объектов с ограничениями.
Примечания
1 Многосвязные объекты топологически менее ограничены, чем односвязные. Например, на эти объекты не налагается следующее ограничение: только две грани (объекты face) могут иметь общее ребро (объект edge). Поэтому они не всегда подходят для построения твердотельных моделей. Однако они часто встречаются в приложениях, поддерживающих метод анализа конечных элементов.
2 Объект non_manifold_surface_representation может содержать модель односвязной поверхности, но не наоборот.
3 Объект product в настоящем стандарте не рассматривается.
Объект non_manifold_surface_shape_representation является подтипом объекта shape_representation, определенного в ИСО 10303-41, который состоит из одного или нескольких объектов face_based_surface_model. Каждый объект face_based_surface_model построен из объектов connected_face_set, которые в контексте требований настоящего стандарта могут быть реализованы как объекты connected_face_set или как один из его подтипов - open_shell или closed_shel. Объекты connected_face_set состоят из объектов face, в которых используются объекты edge и vertex. Последние три типа объектов должны ссылаться на геометрические объекты, такие как point, curve и surface. Связь между топологией и геометрией может быть установлена посредством объекта face_surface либо объекта advanced_face в соответствии с ИСО 10303-511. Эти варианты отличаются выбором допустимых подтипов объектов point, curve и surface, а также ограничениями на ссылки на их базовые геометрические объекты.
Примечание - Представление объектов face_surface как объектов advanced_face рекомендуется для моделей многосвязных поверхностей, предназначенных для применения совместно с твердотельными моделями граничного представления. Интеграция такой модели многосвязной поверхности, например, в модель расширенного граничного представления, определенную в ИСО 10303-514, будет проще.
Все геометрические объекты должны быть определены как трехмерные, за исключением объектов двухмерной геометрии, используемых для определения объектов pcurve. Использование одномерных объектов cartesian_point не допускается.
Неограниченные геометрические объекты должны быть обрезаны посредством топологических конструкций.
Элементы item объекта non_manifold_surface_shape_representation также могут быть объектами типа mapped_item, определенными в ИСО 10303-43, или axis2_placement_3d. Они используются для объединения одного или нескольких объектов non_manifold_surface_shape_representation в один новый объект non_manifold_surface_shape_representation.
Правила WHERE в данном объекте ограничивают использование типов данных для объектов, импортированных из ИСО 10303-42 и ИСО 10303-43 в соответствии с приведенными выше утверждениями. Некоторые проверки типа объектов и ограничений определены в следующих двух функциях:
- nmsf_curve_check;
- nmsf_surface_check.
В формальных утверждениях WR5, WR6 и WR10, приведенных ниже, эти функции проверяют объекты curve и surface всех объектов edge и face, входящих в область определения объекта non_manifold_surface_shape_representation, за исключением тех, которые содержатся в дереве ссылок объекта advanced_face; геометрия объекта advanced_face проверяется отдельным набором правил. Функции автоматически оценивают все базовые геометрические объекты, для чего они вызываются рекурсивно.
Пример - Объект pcurve может ссылаться как на объект curve, так и на объект surface. Функция nmsf_curve_check проверяет не только объект pcurve, но также его базовые геометрические объекты. Поэтому данная функция будет вызывать не только себя, но и функцию nmsf_surface_check.
Примечания
1 В настоящий стандарт не включена функция для проверки объектов point и их базовых объектов curve и surface. Это объясняется тем, что на все объекты curve и surface из non_manifold_surface_shape_representation ссылаются объекты edge и face, поэтому их проверка осуществляется двумя уже существующими функциями.
2 Прикладной протокол, использующий настоящий стандарт, должен явным образом разрешить возможность реализации объекта shape_representation как объекта non_manifold_surface_shape_representation.
EXPRESS-спецификация:
*)
ENTITY non_manifold_surface_shape_representation
SUBTYPE OF (shape_representation); WHERE
WR1: SIZEOF (QUERY (it <* SELF.items |
NOT (SIZEOF (['AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL',
'AIC_NON_MANIFOLD_SURFACE.MAPPED_ITEM',
'AIC_NON_MANIFOLD_SURFACE.AXIS2_PLACEMENT_3D'] *TYPEOF (it)) = 1)))
= 0;
WR2: SIZEOF (QUERY (it <* SELF.items |
SIZEOF (['AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL',
AIC_NON_MANIFOLD_SURFACE.MAPPED_ITEM'] *TYPEOF (it)) = 1)) > 0;
WR3: SIZEOF (QUERY (mi <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.MAPPED_ITEM' IN TYPEOF (it)) |
NOT (('AIC_NON_MANIFOLD_SURFACE. '+
'NON_MANIFOLD_SURFACE_SHAPE_REPRESENTATION'
IN TYPEOF (mi\mapped_item.mapping_source.mapped_representation))
AND
(SIZEOF(QUERY (mr_it <*
mi\mapped_item.mapping_source.mapped_representation.items |
('AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL'
IN TYPEOF (mr_it)))) > 0)))) = 0;
WR4: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it))|
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT (SIZEOF (['AIC_NON_MANIFOLD_SURFACE.FACE_SURFACE',
'AIC_NON_MANIFOLD_SURFACE.ORIENTED_FACE'] * TYPEOF (fa)) =1)))
= 0))) = 0))) = 0;
WR5: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it)) |
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (f_sf <* QUERY (fa <* cfs.cfs_faces |
('AIC_NON_MANIFOLD_SURFACE.FACE_SURFACE' IN TYPEOF (fa))) |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (f_sf))
OR
(nmsf_surface_check(f_sf\face_surface.face_geometry))))) = 0)))
= 0))) = 0;
WR6: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it))|
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (o_fa <* QUERY (fa <* cfs.cfs_faces |
('AIC_NON_MANIFOLD_SURFACE.ORIENTED_FACE' IN TYPEOF (fa))) |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF
(o_fa\oriented_face.face_element))
OR
(nmsf_surface_check
(o_fa\oriented_face.face_element\face_surface.face_geometry)))))
= 0))) = 0))) = 0;
WR7: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it))|
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (bnds <* fa.bounds |
NOT (SIZEOF (['AIC_NON_MANIFOLD_SURFACE.EDGE_LOOP',
'IC_NON_MANIFOLD_SURFACE.VERTEX_LOOP']
* TYPEOF (bnds.bound)) = 1))) = 0)))) = 0))) = 0))) = 0;
WR8: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items|
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it))|
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT(('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
'AIC_NON_MANIFOLD_SURFACE.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
NOT('AIC_NON_MANIFOLD_SURFACE.EDGE_CURVE' IN TYPEOF
(oe.edge_element)))) = 0))) = 0)))) = 0))) = 0))) = 0;
WR9: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF(it)) |
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT(('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
'AIC_NON_MANIFOLD_SURFACE.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
NOT (SIZEOF (QUERY (oe_cv <* QUERY (oe <*
elp_fbnds\path.edge_list |
'AIC_NON_MANIFOLD_SURFACE.EDGE_CURVE' IN TYPEOF (oe.edge_element)) |
NOT (SIZEOF (['AIC_NON_MANIFOLD_SURFACE.B_SPLINE_CURVE',
'AIC_NON_MANIFOLD_SURFACE.CONIC',
'AIC_NON_MANIFOLD_SURFACE.CURVE_REPLICA',
'AIC_NON_MANIFOLD_SURFACE.LINE',
'AIC_NON_MANIFOLD_SURFACE.OFFSET_CURVE_3D',
'AIC_NON_MANIFOLD_SURFACE.PCURVE',
'AIC_NON_MANIFOLD_SURFACE.POLYLINE',
'AIC_NON_MANIFOLD_SURFACE.SURFACE_CURVE']*
TYPEOF (oe_cv.edge_element\edge_curve.edge_geometry))
= 1))) = 0))) = 0)))) = 0))) = 0))) = 0;
WR10: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it)) |
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
'AIC_NON_MANIFOLD_SURFACE.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
NOT (nmsf_curve_check(oe.edge_element\edge_curve.edge_geometry))))
= 0))) = 0)))) = 0))) = 0))) = 0;
WR11: SIZEOF (QUERY(fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it)) |
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
'AIC_NON_MANIFOLD_SURFACE.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
NOT (('AIC_NON_MANIFOLD_SURFACE.VERTEX_POINT' IN TYPEOF
(oe.edge_element.edge_start))
AND
('AIC_NON_MANIFOLD_SURFACE.VERTEX_POINT' IN
TYPEOF (oe.edge_element.edge_end)))))
= 0))) = 0)))) = 0))) = 0))) = 0;
WR12: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it)) |
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (elp_fbnds <* QUERY (bnds <* fa.bounds |
'AIC_NON_MANIFOLD_SURFACE.EDGE_LOOP' IN TYPEOF (bnds.bound)) |
NOT (SIZEOF (QUERY (oe <* elp_fbnds\path.edge_list |
NOT ((SIZEOF (['AIC_NON_MANIFOLD_SURFACE.CARTESIAN_POINT',
'AIC_NON_MANIFOLD_SURFACE.DEGENERATE_PCURVE',
'AIC_NON_MANIFOLD_SURFACE.POINT_ON_CURVE',
'AIC_NON_MANIFOLD_SURFACE.POINT_ON_SURFACE'] * TYPEOF
(oe.edge_element.edge_start\vertex_point.vertex_geometry)) = 1)
AND
(SIZEOF (['AIC_NON_MANIFOLD_SURFACE.CARTESIAN_POINT',
'AIC_NON_MANIFOLD_SURFACE.DEGENERATE_PCURVE',
'AIC_NON_MANIFOLD_SURFACE.POINT_ON_CURVE',
'AIC_NON_MANIFOLD_SURFACE.POINT_ON_SURFACE'] * TYPEOF
(oe.edge_element.edge_end\vertex_point.vertex_geometry)) = 1
)))) = 0))) = 0)))) = 0))) = 0))) = 0;
WR13: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it)) |
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (vlp_fbnds <* QUERY (bnds <* fa.bounds |
'AIC_NON_MANIFOLD_SURFACE.VERTEX_LOOP' IN TYPEOF (bnds.bound)) |
NOT ('AIC_NON_MANIFOLD_SURFACE.VERTEX_POINT' IN TYPEOF
(vlp_fbnds\vertex_loop.loop_vertex)))) = 0)))) = 0)))
= 0))) = 0;
WR14: SIZEOF (QUERY (fbsm <* QUERY (it <* SELF.items |
'AIC_NON_MANIFOLD_SURFACE.FACE_BASED_SURFACE_MODEL' IN TYPEOF (it)) |
NOT (SIZEOF (QUERY (cfs <*
fbsm\face_based_surface_model.fbsm_faces |
NOT (SIZEOF (QUERY (fa <* cfs.cfs_faces |
NOT (('AIC_NON_MANIFOLD_SURFACE.ADVANCED_FACE' IN TYPEOF (fa))
OR
(SIZEOF (QUERY (vlp_fbnds <* QUERY (bnds <* fa.bounds |
'AIC_NON_MANIFOLD_SURFACE.VERTEX_LOOP' IN TYPEOF (bnds.bound)) |
NOT (SIZEOF (['AIC_NON_MANIFOLD_SURFACE.CARTESIAN_POINT',
'AIC_NON_MANIFOLD_SURFACE.DEGENERATE_PCURVE',
'AIC_NON_MANIFOLD_SURFACE.POINT_ON_CURVE',
'AIC_NON_MANIFOLD_SURFACE.POINT_ON_SURFACE'] * TYPEOF
(vlp_fbnds\vertex_loop.loop_vertex\vertex_point.vertex_geometry))
= 1))) = 0)))) = 0))) = 0))) = 0;
END_ENTITY;
(*
Формальные утверждения
WR1 - элементы item в non_manifold_surface_shape_representation должны быть объектами face_based_surface_model, mapped_item или axis2_placement_3d.
Примечание - Объект axis2_placement_3d является допустимым объектом mapped_item.mapping_target. Чтобы добавить другой объект presentation в список элементов item объекта non_manifold_surface_shape_representation (см. WR3 относительно допустимых объектов mapped_item), объект mapped_item.mapping_source.mapping_origin может быть любым объектом, который геометрически определен в geometric_representation_context объекта mapped_representation. Если данный объект является объектом axis2_placement_3d, то оператор, отображающий объект mapped_representation в объект non_manifold_surface_shape_representation, соответствует матрице преобразования, в которой разрешены только поступательные перемещения и вращения. Если объект cartesian_transformation_operator_3d используется в качестве объекта mapping_origin, то допускаются масштабирование и зеркалирование.
WR2 - по крайней мере, один из элементов item объекта non_manifold_surface_shape_representation должен быть либо объектом face_based_surface_model, либо объектом mapped_item.
WR3 - если объект non_manifold_surface_shape_representation содержит объект mapped_item, то объект mapped_representation из mapping_source должен быть объектом non_manifold_surface_shape_representation. Такой объект shape_representation должен содержать, по крайней мере, один объект face_based_surface_model.
WR4 - объект face должен быть реализован как объект face_surface, его подтип advanced_face либо как объект oriented_face.
WR5 - все базовые геометрические объекты, на которые ссылаются объекты surface посредством объекта face_surface, должны присутствовать в дереве ссылок объекта advanced_face либо быть допустимыми объектами curve и surface.
Объект basis_surface из offset_surface должен быть объектом elementary_surface, b_spline_surface, offset_surface, swept_surface или surface_replica.
Объект parent_surface из surface_replica должен быть объектом elementary_surface, b_spline_surface, offset_surface, swept_surface или surface_replica.
Объект swept_curve из swept_surface должен быть объектом line, conic, pcurve, surface_curve, offset_curve_3d, b_spline_curve, polyline или curve_replica.
Атрибут self_intersect для объектов b_spline_surface и offset_surface должен иметь значение FALSE или UNKNOWN.
Примечание - Объект surface проверяется функцией nmsf_surface_check на соответствие данным ограничениям.
WR6 - все базовые геометрические объекты, на которые имеются ссылки через объект oriented_face.face_element, должны присутствовать в дереве ссылок объекта advanced_face либо являться допустимыми объектами curve и surface.
Объект basis_surface из offset_surface должен быть объектом elementary_surface, b_spline_surface, offset_surface, swept_surface либо surface_replica.
Объект parent_surface из surface_replica должен быть объектом elementary_surface, b_spline_surface, offset_surface, swept_surface либо surface_replica.
Объект swept_curve из swept_surface должен быть объектом line, conic, pcurve, surface_curve, offset_curve_3d, b_spline_curve, polyline либо curve_replica.
Атрибут self_intersect для объектов b_spline_surface и offset_surface должен иметь значение FALSE или UNKNOWN.
Примечание - Объект surface проверяется функцией nmsf_surface_check на соответствие данным ограничениям.
WR7 - объект bound из face_bound, на который ссылается объект face, на который, в свою очередь, имеются ссылки непосредственно от объекта connected_face_set либо через объект oriented_face, должен присутствовать в дереве ссылок объекта advanced_face либо быть объектом edge_loop или vertex_loop.
WR8 - геометрические объекты ограничивающего объекта edge, то есть объекты edge_element из oriented_edge, на который ссылается объект face, на который, в свою очередь, имеются ссылки непосредственно от объекта connected_face_set либо через объект oriented_face, должны присутствовать в дереве ссылок объекта advanced_face либо быть объектом edge_curve.
WR9 - объект curve, используемый для определения геометрии объекта edge, который является объектом edge_geometry из edge_curve объекта edge, на который ссылается объект face, на который, в свою очередь, имеются ссылки непосредственно от объекта connected_face_set либо через объект oriented_face, должен быть объектом b_spline_curve, conic, curve_replica, line, offset_curve_3d, pcurve, polyline, surface_curve или curve в дереве ссылок объекта advanced_face.
WR10 - все базовые геометрические объекты, на которые ссылаются объекты curve, должны присутствовать в дереве ссылок объекта advanced_face либо являться допустимыми объектами curve и surface.
Объект parent_curve из curve_replica должен быть объектом line, conic, pcurve, surface_curve, offset_curve_3d, b_spline_curve, polyline или curve_replica.
Объект basis_curve из offset_curve_3d должен быть объектом line, conic, pcurve, surface_curve, offset_curve_3d, b_spline_curve или curve_replica.
Объект curve_3d из surface_curve должен быть объектом line, conic, offset_curve_3d, b_spline_curve, polyline или curve_replica.
Объект basis_surface из surface_curve должен быть объектом b_spline_surface, elementary_surface, offset_surface, surface_replica или swept_surface.
Объекты polyline должны содержать, по крайней мере, три объекта cartesian_point.
Атрибут self_intersect для объектов b_spline_curve и offset_curve_3d должен иметь значение FALSE или UNKNOWN.
Примечание - Объект curve проверяется функцией nmsf_curve_check на соответствие данным ограничениям.
WR11 - объекты edge_start и edge_end из edge должны присутствовать в дереве ссылок объекта advanced_face либо быть объектами vertex_point.
WR12 - объект vertex_geometry из vertex, являющийся частью объекта edge_loop, должен присутствовать в дереве ссылок объекта advanced_face либо быть объектом cartesian_point, point_on_curve, point_on_surface или degenerate_pcurve.
WR13 - объект loop_vertex из vertex_loop должен присутствовать в дереве ссылок объекта advanced_face либо быть объектом vertex_point.
WR14 - объект vertex_geometry из vertex, являющийся частью объекта vertex_loop, должен присутствовать в дереве ссылок объекта advanced_face либо быть объектом cartesian_point, point_on_curve, point_on_surface или degenerate_pcurve.
Неформальные утверждения
IP1 - часть объекта b_spline_curve, входящая в топологическую область определения объекта non_manifold_surface_shape_representation, не должна самопересекаться.
IP2 - часть объекта b_spline_surface, входящая в топологическую область определения объекта non_manifold_surface_shape_representation, не должна самопересекаться.
IP3 - часть объекта offset_curve_3d, входящая в топологическую область определения объекта non_manifold_surface_shape_representation, не должна самопересекаться.
IP4 - часть объекта offset_surface, входящая в топологическую область определения объекта non_manifold_surface_shape_representation, не должна самопересекаться.
IP5 - если объект face имеет только одну связанную внешнюю границу, то соответствующий объект loop должен быть представлен как объект face_outer_bound. Если наружная граница не является связанной, то не допускается использование объекта face_outer_bound.
В данном разделе описаны функции, необходимые для формулировки ограничений для схемы aic_non_manifold_surface. Данные функции используются при конкретизации объекта non_manifold_surface_shape_representation.
Функция nmsf_curve_check проверяет экземпляр объекта curve на допустимость в контексте non_manifold_surface_shape_representation. Также проверяются все геометрические объекты, на которые ссылается данный экземпляр объекта curve, такие как другие объекты curve и surface.
Пример - Одним из ограничений, проверяемых данной функцией, является проверка, установлен ли флаг самопересечения экземпляра объекта b_spline_curve на значение TRUE, FALSE или UNKNOWN; допустимыми являются только значения FALSE и UNKNOWN.
При необходимости проверяемый экземпляр исследуется рекурсивно. Это означает, что если объект curve ссылается на другой объект curve как на базовую или порождающую кривую, то вновь вызывается функция nmsf_curve_check. Если имеется ссылка на объект surface, то вызывается функция nmsf_surface_check. Рекурсивный процесс завершается на таких типах объектов, которые не ссылаются на какие-либо объекты curve или surface.
Следующие типы кривых и их подтипы относятся к области определения объекта non_manifold_surface_shape_representation и являются, таким образом, допустимыми входными аргументами данной функции:
- b_spline_curve;
- conic;
- curve_replica;
- line;
- offset_curve_3d;
- pcurve;
- polyline;
- surface_curve.
Четыре из указанных типов объекта curve ссылаются на базовые или порождающие объекты curve. В приведенном ниже списке указаны допустимые ссылки.
Примечание - Данная функция применяется рекурсивно к типам объектов, помеченных соответствующим образом в приведенных ниже списках, чтобы проверить их ссылки на допустимые реализации.
Объект parent_curve из curve_replica должен быть одного из следующих типов:
- b_spline_curve;
- conic;
- curve_replica (рекурсивно);
- line;
- offset_curve_3d (рекурсивно);
- pcurve (рекурсивно);
- polyline;
- surface_curve (рекурсивно).
Объект basis_curve из offset_curve_3d должен быть одного из следующих типов:
- b_spline_curve;
- conic;
- curve_replica (рекурсивно);
- line;
- offset_curve_3d (рекурсивно);
- pcurve (рекурсивно);
- surface_curve (рекурсивно).
Один экземпляр в множестве элементов item из definitional_representation, на который ссылается объект p_curve через reference_to_curve, должен быть одного из следующих типов:
- b_spline_curve;
- conic;
- curve_replica (рекурсивно);
- line;
- polyline.
Объект curve_3d из surface_curve должен быть одного из следующих типов:
- b_spline_curve;
- conic;
- curve_replica (рекурсивно);
- line;
- offset_curve_3d (рекурсивно);
- polyline;
- surface_curve (рекурсивно).
Объекты pcurve и surface_curve ссылаются на объекты surface. Функция nmsf_surface_check вызывается для проверки допустимости этих объектов surface. Объект non_manifold_surface_shape_representation требует таких же ограничений на допустимые ссылки на объект surface для объектов pcurve и surface_curve, которые определены в ИСО 10303-42.
Допустимый объект polyline должен содержать, по крайней мере, три объекта cartesian_point.
Атрибут self_intersect для би-сплайновых и смещенных геометрических объектов должен иметь значение FALSE или UNKNOWN.
Данная функция возвращает значение TRUE, если типы всех ссылочных геометрических объектов принадлежат к области определения объекта non_manifold_surface_shape_representation и если все ограничения выполнены, в противном случае функция возвращает значение FALSE.
Примечание - Данная функция не проверяет правильность ссылок относительно требований, установленных в ИСО 10303-42. Проверяются только дополнительные требования, относящиеся к области определения объекта non_manifold_surface_shape_representation.
EXPRESS-спецификация:
*)
FUNCTION nmsf_curve_check (cv : representation_item) : BOOLEAN;
(* Данная функция проверяет допустимость кривой в контексте модели
многосвязной поверхности. Объекты representation_item являются
допустимым входным аргументом, однако предполагается, что они являются
объектами типа curve; в противном случае, данная функция возвращает
значение FALSE.
*)
(* сложные подтипы объекта curve, которые одновременно являются и объектом
bounded_curve и одним из объектов conic, curve_replica, line или
offset_curve_3d, являются недопустимыми
*)
IF SIZEOF (['AIC_NON_MANIFOLD_SURFACE.BOUNDED_CURVE',
' AIC_NON_MANIFOLD_SURFACE.CONIC',
' AIC_NON_MANIFOLD_SURFACE.CURVE_REPLICA',
' AIC_NON_MANIFOLD_SURFACE.LINE',
' AIC_NON_MANIFOLD_SURFACE.OFFSET_CURVE_3D'] * TYPEOF(cv)) > 1
THEN RETURN(FALSE);
ELSE
(* объекты b_spline_curve не должны самопересекаться
*)
IF (('AIC_NON_MANIFOLD_SURFACE.B_SPLINE_CURVE' IN TYPEOF (cv)) AND
(cv\b_spline_curve.self_intersect = FALSE) OR
(cv\b_spline_curve.self_intersect = UNKNOWN))
THEN RETURN (TRUE);
ELSE
(* объекты conic и line являются допустимыми типами объекта curve
*)
IF SIZEOF (['AIC_NON_MANIFOLD_SURFACE.CONIC',
'AIC_NON_MANIFOLD_SURFACE.LINE'] * TYPEOF (cv)) = 1 THEN
RETURN (TRUE);
ELSE
(* объект curve_replica должен ссылаться на допустимый объект curve
*)
IF'AIC_NON_MANIFOLD_SURFACE.CURVE_REPLICA' IN TYPEOF(cv) THEN
RETURN (nmsf_curve_check(cv\curve_replica.parent_curve));
ELSE
(* объект offset_curve_3d не должен самопересекаться и должен ссылаться
на допустимые объекты curve; объект polyline не является допустимым
объектом basis_curve
*)
IF (('AIC_NON_MANIFOLD_SURFACE.OFFSET_CURVE_3D' IN TYPEOF (cv))
AND
((cv\offset_curve_3d.self_intersect = FALSE) OR
(cv\offset_curve_3d.self_intersect = UNKNOWN))
AND
(NOT ('AIC_NON_MANIFOLD_SURFACE.POLYLINE' IN TYPEOF
(cv\offset_curve_3d.basis_curve)))) THEN
RETURN (nmsf_curve_check(cv\offset_curve_3d.basis_curve));
ELSE
(* объект pcurve должен ссылаться на допустимые объекты curve и basis_surface
*)
IF 'AIC_NON_MANIFOLD_SURFACE.PCURVE' IN TYPEOF(cv) THEN
RETURN ((nmsf_curve_check
(cv\pcurve.reference_to_curve\representation.items[1]))
AND
(nmsf_surface_check(cv\pcurve.basis_surface)));
ELSE
(* объект surface_curve ссылается на объект curve_3d и на один или два
объекта pcurve, или на один или два объекта surface, или на один из
них; все ссылки должны быть допустимыми
*)
IF 'AIC_NON_MANIFOLD_SURFACE.SURFACE_CURVE' IN TYPEOF(cv) THEN
(* если ссылка на объект curve правильна, то проверяются также
остальные
*)
IF nmsf_curve_check(cv\surface_curve.curve_3d) THEN
REPEAT i := 1 TO SIZEOF
(cv\surface_curve.associated_geometry);
(* выполняется для одного или двух объектов
associated_geometry:
*)
IF 'AIC_NON_MANIFOLD_SURFACE.SURFACE' IN
TYPEOF (cv\surface_curve.associated_geometry[i]) THEN
IF NOT nmsf_surface_check
(cv\surface_curve.associated_geometry[i]) THEN
RETURN(FALSE);
END_IF;
ELSE
IF 'AIC_NON_MANIFOLD_SURFACE.PCURVE' IN TYPEOF
(cv\surface_curve.associated_geometry[i]) THEN
IF NOT nmsf_curve_check
(cv\surface_curve.associated_geometry [i]) THEN
RETURN(FALSE);
END_IF;
END_IF;
END_IF;
END_REPEAT;
RETURN(TRUE);
END_IF;
ELSE
(* объект polyline должен содержать, по крайней мере, три объекта point
*)
IF 'AIC_NON_MANIFOLD_SURFACE.POLYLINE' IN TYPEOF(cv) THEN
IF (SIZEOF (cv\polyline.points) >= 3) THEN RETURN (TRUE);
END_IF;
END_IF;
END_IF;
END_IF;
END_IF;
END_IF;
END_IF;
END_IF;
END_IF;
(* значение FALSE возвращается, если аргумент cv не является допустимым объектом curve.
*)
RETURN (FALSE);
END_FUNCTION;
(*
Определения аргументов
cv (входной параметр) - объект representation_item, который, по предположению, является объектом curve, проверяемый на допустимость в контексте объекта non_manifold_surface_shape_representation.
BOOLEAN (выходной параметр) - имеет значение TRUE, если объект representation_item является допустимым объектом curve; в противном случае имеет значение FALSE.
Функция nmsf_surface_check проверяет экземпляр объекта surface на допустимость в контексте объекта non-manifold_surface_shape_representation. Также проверяются все геометрические объекты, на которые ссылается данный экземпляр объекта surface, например, другие объекты curve и surface.
Пример - Одним из ограничений, проверяемых данной функцией, является проверка, установлен ли флаг самопересечения экземпляра объекта b_spline_surface на значение TRUE, FALSE или UNKNOWN; допустимыми являются только значения FALSE и UNKNOWN.
При необходимости проверяемый экземпляр исследуется рекурсивно. Это означает, что если объект surface ссылается на другой объект surface как на базовую или порождающую поверхность, то вновь вызывается функция nmsf_surface_check. Если имеется ссылка на объект curve, то вызывается функция nmsf_curve_check. Рекурсивный процесс завершается на таких типах объектов, которые не ссылаются на какие-либо объекты curve или surface.
Следующие типы поверхностей и их подтипы относятся к области определения объекта non_manifold_surface_shape_representation и являются, таким образом, допустимыми входными аргументами данной функции:
- b_spline_surface;
- elementary_surface;
- offset_surface;
- surface_replica;
- swept_surface.
Два из этих типов объекта surface ссылаются на базовые или порождающие объекты surface. Объект parent_surface из surface_replica и объект basis_surface из offset_surface должны быть одного из следующих типов:
- b_spline_surface;
- elementary_surface;
- offset_surface (рекурсивно);
- surface_replica (рекурсивно);
- swept_surface.
Примечание - Данная функция применяется рекурсивно к типам объектов, помеченных соответствующим образом в приведенном выше списке, чтобы проверить их ссылки на допустимые реализации.
Объекты swept_surface ссылаются на объекты curve. Функция nmsf_curve_check вызывается для проверки допустимости этих объектов curve. Объект non_manifold_surface_shape_representation требует таких же ограничений на допустимые ссылки на изогнутые кривые, которые определены в ИСО 10303-42. Все объекты curve, относящиеся к области определения объекта non_manifold_surface_shape_representation, допустимы как объекты swept_surface.swept_curve.
Атрибут self_intersect для би-сплайновых и смещенных геометрических объектов должен иметь значение FALSE или UNKNOWN.
Данная функция возвращает значение TRUE, если типы всех ссылочных геометрических объектов принадлежат к области определения объекта non_manifold_surface_shape_representation и если все ограничения выполнены, в противном случае функция возвращает значение FALSE.
Примечание - Данная функция не проверяет правильность ссылок относительно требований, установленных в ИСО 10303-42. Проверяются только дополнительные требования, относящиеся к области определения объекта non_manifold_surface_shape_representation.
EXPRESS-спецификация:
*)
FUNCTION nmsf_surface_check (surf : surface) : BOOLEAN;
(* Данная функция проверяет допустимость объекта surface в контексте
модели многосвязной поверхности.
*)
(* объекты elementary_surface являются допустимыми типами объекта surface
*)
IF 'AIC_NON_MANIFOLD_SURFACE.ELEMENTARY_SURFACE' IN TYPEOF (surf) THEN
RETURN(TRUE);
ELSE
(* объект swept_surface должен иметь допустимую изогнутую кривую
*)
IF 'AIC_NON_MANIFOLD_SURFACE.SWEPT_SURFACE' IN TYPEOF (surf) THEN
RETURN (nmsf_curve_check(surf\swept_surface.swept_curve));
ELSE
(* объект offset_surface не должен самопересекаться и должен ссылаться
на допустимый объект surface
*)
IF (('AIC_NON_MANIFOLD_SURFACE.OFFSET_SURFACE' IN TYPEOF (surf)) AND
(surf\offset_surface.self_intersect = FALSE) OR
(surf\offset_surface.self_intersect = UNKNOWN)) THEN
RETURN (nmsf_surface_check(surf\offset_surface.basis_surface));
ELSE
(* объект surface_replica должен иметь допустимый порождающий объект surface
*)
IF 'AIC_NON_MANIFOLD_SURFACE.SURFACE_REPLICA' IN TYPEOF (surf) THEN
RETURN(nmsf_surface_check(surf\surface_replica.parent_surface));
ELSE
(* объект b_spline_surface не должен самопересекаться
*)
IF (('AIC_NON_MANIFOLD_SURFACE.B_SPLINE_SURFACE' IN TYPEOF(surf))
AND
(surf\b_spline_surface.self_intersect= FALSE) OR
(surf\b_spline_surface.self_intersect = UNKNOWN)) THEN
RETURN(TRUE);
END_IF;
END_IF;
END_IF;
END_IF;
END_IF;
RETURN(FALSE);
END_FUNCTION;
(*
Определения аргументов
surf (входной параметр) - объект surface, который проверяется на допустимость в контексте объекта non_manifold_surface_shape_representation.
BOOLEAN (выходной параметр) имеет значение TRUE, если объект surface является допустимым; в противном случае имеет значение FALSE.
*)
END_SCHEMA; --aic_non_manifold_surface
(*
(обязательное)
СОКРАЩЕННОЕ НАИМЕНОВАНИЕ ОБЪЕКТА
Сокращенное наименование объекта, установленного в настоящем стандарте, приведено в таблице A.1. Требования к использованию сокращенных наименований объектов содержатся в стандартах тематической группы "Методы реализации" комплекса ИСО 10303.
Таблица A.1
(обязательное)
РЕГИСТРАЦИЯ ИНФОРМАЦИОННОГО ОБЪЕКТА
B.1 Обозначение документа
Для обеспечения однозначного обозначения информационного объекта в открытой системе настоящему стандарту присвоен следующий идентификатор объекта:
{ iso standard 10303 part(508) version(1) }
Смысл данного обозначения установлен в ИСО/МЭК 8824-1 и описан в ИСО 10303-1.
B.2 Обозначение схемы
Для обеспечения однозначного обозначения в открытой информационной системе схеме aic_non_manifold_surface (см. раздел 4) присвоен следующий идентификатор объекта:
{ iso standard 10303 part(508) version (1) object (1) aic-non-manifold-surface(1) }
Смысл данного обозначения установлен в ИСО/МЭК 8824-1 и описан в ИСО 10303-1.
(справочное)
EXPRESS-G ДИАГРАММЫ
EXPRESS-G диаграммы, представленные на рисунках C.1 - C.22, получены из сокращенного листинга, представленного в разделе 4, с использованием спецификаций интерфейса стандарта ИСО 10303-11. В диаграммах использована графическая нотация EXPRESS-G языка EXPRESS. Описание EXPRESS-G установлено в ИСО 10303-11, приложение D.
Примечания
1 Приведенные ниже выбранные типы импортируются в расширенный листинг ПИК в соответствии с правилами неявных интерфейсов по ИСО 10303-11. В настоящем стандарте эти выбранные типы в других объектах не используются:
- curve_on_surface;
- founded_item_select;
- geometric_set_select;
- measure_value;
- reversible_topology;
- reversible_topology_item;
- shell;
- surface_model;
- transformation;
- trimming_select;
- vector_or_direction.
2 Приведенные ниже выбранные типы импортируются в расширенный листинг ПИК в соответствии с правилами неявных интерфейсов по ИСО 10303-11. В настоящем стандарте эти выбранные типы в других объектах не используются и не предназначены для независимой реализации:
- composite_curve;
- composite_curve_on_surface;
- composite_curve_segment;
- oriented_closed_shell;
- oriented_open_shell.
![]() в формате EXPRESS-G (диаграмма 1 из 22)
![]() Рисунок C.2 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 2 из 22)
![]() Рисунок C.3 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 3 из 22)
![]() Рисунок C.4 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 4 из 22)
![]() Рисунок C.5 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 5 из 22)
![]() Рисунок C.6 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 6 из 22)
![]() Рисунок C.7 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 7 из 22)
![]() Рисунок C.8 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 8 из 22)
![]() Рисунок C.9 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 9 из 22)
![]() Рисунок C.10 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 10 из 22)
![]() Рисунок C.11 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 11 из 22)
![]() Рисунок C.12 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 12 из 22)
![]() Рисунок C.13 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 13 из 22)
![]() Рисунок C.14 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 14 из 22)
![]() Рисунок C.15 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 15 из 22)
![]() Рисунок C.16 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 16 из 22)
![]() Рисунок C.17 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 17 из 22)
![]() Рисунок C.18 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 18 из 22)
![]() Рисунок C.19 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (19 из 22)
![]() Рисунок C.20 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 20 из 22)
![]() Рисунок C.21 - ПИК non_manifold_surface_shape_representation
в формате EXPRESS-G (диаграмма 21 из 22)
![]() в формате EXPRESS-G (диаграмма 22 из 22)
(справочное)
МАШИННО-ИНТЕРПРЕТИРУЕМЫЕ ЛИСТИНГИ
В данном приложении приведены ссылки на сайты, на которых находятся листинги наименований объектов на языке EXPRESS и соответствующих сокращенных наименований, установленных или на которые даются ссылки в настоящем стандарте. На этих же сайтах находятся листинги всех EXPRESS-схем, установленных в настоящем стандарте, без комментариев и другого поясняющего текста. Эти листинги доступны в машинно-интерпретируемой форме и могут быть получены по следующим адресам URL:
сокращенные наименования: /template/go.php?url=https://www.mel.nist.gov/div826/subject/apde/snr/
EXPRESS: /template/go.php?url=https://www.mel.nist.gov/step/parts/part508/IS/
При невозможности доступа к этим сайтам необходимо обратиться в центральный секретариат ИСО или непосредственно в секретариат ИСО ТК184/ПК4 по адресу электронной почты: sc4sec@cme.nist.gov.
Примечание - Информация, представленная в машинно-интерпретированном виде по указанным выше адресам URL, является справочной. Обязательным является текст настоящего стандарта.
(справочное)
ССЫЛОЧНЫМ НАЦИОНАЛЬНЫМ СТАНДАРТАМ РОССИЙСКОЙ ФЕДЕРАЦИИ
Таблица ДА.1
Вернуться в "Каталог нормативных документов"
Источник информации: https://internet-law.ru/documents/prod/gost-r_gosudarstvennyj-standart/44/gost_24504.html
На правах рекламы:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||