Методы реализации STEP. Обменный файл ISO 10303-21. Пример обменного файла, содержащего примитивную модель, соответствующую схеме sample_geometry, страница 2

B_SPLINE_CURVE (2, (#20, #30, #40, #50, #60, #70, #80, #90, #100, #110, #120, #130, #140), .UNSPECIFIED.,

.F., .F.)

B_SPLINE_CURVE_WITH_KNOTS ((3, 2, 2, 2, 2, 2, 3), (0., 0.166666666666667, 0.333333333333333, 0.5,

0.666666666666667, 0.833333333333333, 1.), .UNSPECIFIED.)

CURVE ()

GEOMETRIC_REPRESENTATION_ITEM ()

RATIONAL_B_SPLINE_CURVE ((1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.))

REPRESENTATION_ITEM ('') );

...

#16520 = LENGTH_MEASURE_WITH_UNIT (LENGTH_MEASURE (2.54), #16540);

#16530 = DIMENSIONAL_EXPONENTS (1., 0., 0., 0., 0., 0., 0.);

#16540 = (LENGTH_UNIT ()

NAMED_UNIT (*)

SI_UNIT (.CENTI., .METRE.) );

ENDSEC;

END-ISO-10303-21;

В этом примере экземпляры объектов #10 и #16540 являются составными (complex), т.е. это объекты тех типов, для которых определен сложный вид отношений подтип/супертип. Экземпляры таких объектов представлены в обменном файле как набор экземпляров входящих подтипов. Набор экземпляров имеет единый идентификатор.

Экземпляр объекта #16520 имеет первый атрибут выбираемого (select) типа. Приведем определение объекта

length_measure_with_unit:

ENTITY measure_with_unit

SUPERTYPE OF (ONEOF ( length_measure_with_unit,

mass_measure_with_unit,

time_measure_with_unit,

electric_current_measure_with_unit,

thermodynamic_temperature_measure_with_unit,

amount_of_substance_measure_with_unit,

luminous_intensity_measure_with_unit,

plane_angle_measure_with_unit,

solid_angle_measure_with_unit,

area_measure_with_unit,

volume_measure_with_unit,

ratio_measure_with_unit ));

value_component : measure_value;

unit_component : unit;

WHERE

WR1: valid_units (SELF);

END_ENTITY;

ENTITY length_measure_with_unit

SUBTYPE OF (measure_with_unit);

WHERE

WR1: 'MEASURE_SCHEMA.LENGTH_UNIT' IN TYPEOF

(SELF\measure_with_unit.unit_component);

END_ENTITY;

TYPE measure_value = SELECT

(length_measure,

mass_measure,

time_measure,

electric_current_measure,

thermodynamic_temperature_measure,

amount_of_substance_measure,

luminous_intensity_measure,

plane_angle_measure,

solid_angle_measure,

area_measure,

volume_measure,

ratio_measure,

parameter_value,

numeric_measure,

context_dependent_measure,

descriptive_measure,

positive_length_measure,

positive_plane_angle_measure,

positive_ratio_measure,

count_measure);

END_TYPE;

TYPE length_measure = REAL;

END_TYPE;

TYPE mass_measure = REAL;

END_TYPE;

TYPE time_measure = REAL;

END_TYPE;

... и т.д. ...

Из приведенного фрагмента определения видно, что атрибут value_component может иметь значения различных типов, причем тип значения никак не может быть определен на основе того, как значение представлено в обменном файле. Поэтому тип конкретного значения (length_measure) указан явно. А вот если бы выбор был возможен из числа экземпляров объектов, явного указания типа не потребовалось, так как тип может быть определен по описанию указанного экземпляра объекта.

#1600=ED(#1100,#1200);

#1700=ED(#1100,#1300);

#1800=ED(#1300,#1200);

#400= &SCOPE

#2000=ED_STRC(#1700,.F.);

#2100=ED_STRC(#1800,.F.);

#2200=ED_STRC(#1600,.T.);

ENDSCOPE

ED_LOOP((#2000,#2100,#2200));

В этом примере показано, каким образом может быть отображена в обменном файле структура модели (о предоставляемых стандартом средствах структурирования модели см. ниже). Все те экземпляры объектов, которые заключены между кодами &SCOPE

и ENDSCOPE входят в область видимости (SCOPE) того экземпляра объекта, которому принадлежит область видимости (в данном примере владельцем области видимости является экземпляр объекта с идентификатором #400 типа ED_LOOP). Область видимости имеет свою систему идентификации экземпляров объектов.