ГОСТ Р ИСО 13584-31—2010
поверхности. Максимальное количество внутренних границ определяется реализацией интерфейса.
Оно должно быть не меньше величины, установленной в разделе 9. Все указанные контуры долж ны
лежать в одной плоскости и не должны пересекаться. Все контуры, соответствующие внутренним
границам, должны принадлежать ограниченной поверхности, определенной контуром api_contour, со
ответствующим внешней границе. Ни один из указанных контуров не должен принадлежать ограничен
ной поверхности, определенной другим контуром api_contour. Это означает, что плоская поверхность
apij>lanar_surfaco образуется дугами. Если данное условие выполняется, то плоская поверхность api_
planar_surface вычисляется интерфейсом прикладного программирования следующим образом.
1) плоскость поверхности вычисляется по ее положению. Атрибут position.location задает первую
точку первого сегмента комбинированной кривой composite_curve_segment контура api_contour, соот
ветствующего внешней границе. ОсьХ. задаваемая ортогональным направлением position.р[1], касает ся
данного сегмента комбинированной кривой composite_curve_segmont. Положительное направление
обхода контура определено атрибутом same_sense. Ось Z. задаваемая ортогональным направлением
position.р[3], должна быть ортогональна плоскости, содержащей указанный контур api_contour, соответ
ствующий внешней границе. Положительным направлением обхода контура api_conlour является его
обход против часовой стрелки по отношению к указанной ориентированной оси;
2) для каждого контура api_contour, определяющего плоскую поверхность api_planar_surface, соз
дается экземпляр ограниченной кривой bounded_surfaco_curve. При этом каждый из них ссылается на
контур api_contour как на кривую curve_3d. Атрибут associated_geometry указанной поверхности кри вой
surfaco_cun/e содержит только один элемент, который является плоскостью для поверхности api_
planar_surface. описанной на этапе 1. Значение атрибута главного представления mastor_ropresentation
для поверхности кривой равно значению атрибута curve_3d:
3) для каждой вычисленной поверхности кривой создается экземпляр сегмонта замкнутой комби
нированной кривой composite_curve_segment. Данный сегмент:
- ссылается наповерхность кривой, которой он соответствует, как на первичную кривую paront_curve:
- содержит значение переменной перехода (для последнего сегмента комбинированной кривой
composito_curve_segmont контура api_contour, который описывается атрибутом curve_3d для соответ
ствующей ЗО-кривой на поверхности кривой) как значение атрибута transition:
- содержит атрибут same_sonse. значение которого равно «true» для composite_curve_segmcnt.
соответствующего внешней границе. Данное значение гарантирует, что все прочие сегменты замкну
той кривой composite_curve_segmentориентированы по часовой стрелке относительно оси Z плоскости
для поверхности api_planar_surface (то есть относительно ортогонального направления position.p[3],
см. этап 1);
4) создается экземпляр наружной ограниченной кривой outer_boundary_curve. сегменты которой
содержат только один элемент composite_curve_segment. первичная кривая parent_curve которого ссы
лается (как на атрибут curve_3d) на контур api_contour. соответствующий внешней границе плоской
поверхности api_planar_surface. создаваемой интерфейсом прикладного программирования;
5) для всех прочих сегментов замкнутой кривой создается экземпляр ограниченной кривой, сег
менты которого содержат только указанные сегменты;
6) окончательно создается экземпляр поверхности api_planar_surface. Его базовой поверхностью
basis_surfaco является поверхность api_planar_surface. Ее границами могут быть ограниченные кривые и
наружная ограниченная кривая, вычисленная на этапах 4 и 5. Значение атрибута implicit_outer равно
«false».
Спецификация на языке EXPRESS:
‘ >
ENTITY api_plar.ar_surface
SUBTYPE OK (curve_bounded_surface);
WHERE
api_WRl: ’API_ABSTRACT_SCHEMA.PLANE* 1NTYPEOF (SELF.basis_surface);
api_WR2: SIZEOF(QUERY{ temp <• SELF.boundaries
’APl_ABSTRACT_SCHEMA.OUTER_BCl/NDARY_CURVE * IN
TYPEOF (temp) )) -L;
api_WR3: QUERY (temp <* SELF.boundaries ISIZECF(temp.segments) <> 1) - [];
api_WR4:SELF.implicitouter - false;
END_ENTITY;
(*
"
64