Пример 2:
ENTITY axis2_placement_3d
SUBTYPE OF (placement);
axis : OPTIONAL direction;
ref_direction : OPTIONAL direction;
DERIVE
p : LIST [3:3] OF direction := build_axes(axis,ref_direction);
WHERE
WR4: ((NOT EXISTS(axis)) OR (NOT EXISTS(ref_direction))) OR
(cross_product(axis,ref_direction).magnitude > 0);
END_ENTITY; -- axis2_placement_3d
FUNCTION build_axes (axis, ref_direction: direction): LIST [3:3] OF
direction;
LOCAL
u : LIST [3:3] OF direction;
END_LOCAL;
u[3] := NVL(normalise(axis),direction([0,0,1]));
u[1] := first_proj_axis(u[3],ref_direction);
u[2] := normalise(cross_product(u[3],u[1])).orientation;
RETURN(u);
END_FUNCTION; -- build_axes
FUNCTION cross_product (arg1, arg2: direction): vector;
LOCAL
v2 : LIST [3:3] OF REAL;
v1 : LIST [3:3] OF REAL;
mag : REAL;
res : direction;
result : vector;
END_LOCAL;
IF ((NOT EXISTS(arg1)) OR (arg1.dim = 2)) OR ((NOT EXISTS(arg2)) OR
(arg2.dim = 2)) THEN
RETURN(?);
ELSE
BEGIN
v1 := normalise(arg1).direction_ratios;
v2 := normalise(arg2).direction_ratios;
res.direction_ratios[1] := (v1[2] * v2[3]) - (v1[3] * v2[2]);
res.direction_ratios[2] := (v1[3] * v2[1]) - (v1[1] * v2[3]);
res.direction_ratios[3] := (v1[1] * v2[2]) - (v1[2] * v2[1]);
mag := 0;
REPEAT i := 1 TO 3 BY 1;
mag := mag + (res.direction_ratios[i] * res.direction_ratios[i]);
END_REPEAT;
IF mag > 0 THEN
result.orientation := res;
result.magnitude := SQRT(mag);
ELSE
result.orientation := arg1;
result.magnitude := 0;
END_IF;
RETURN(result);
END;
END_IF;
END_FUNCTION; -- cross_product
Правило RULE, определяющее отношения между значениями атрибутов множества экземпляров объектов. Из названия правила
RULE, приведенного в примере 3 видно, что правило определяет то, что стартовая работа должна быть утверждена.
Пример 3:
RULE start_work_requires_approval FOR (start_work, cc_design_approval);
WHERE
WR1: SIZEOF (QUERY (sw <* start_work |
NOT (SIZEOF (QUERY (ccda <* cc_design_approval |
sw IN ccda.items )) = 1 ))) = 0;
END_RULE; -- start_work_requires_approval
Как мы видим из примеров 2 и 3, использование исполняемых операторов языка Express может понадобиться для проверки правил
WHERE и правил RULE;
Кроме этого, исполняемые операторы служат для вычисления значения производных (DERIVED) атрибутов. Производным называется атрибут, значение которого определяется значениями других атрибутов. В примере 2 значением производного атрибута
“p” является список из трех осей местной ортогональной системы координат: две оси заданы в виде атрибутов, а третью можно найти как произведение двух заданных осей и затем из всех трех осей сформировать список.
Express-G – правила графического представления структур данных
Первоначальным и пока основным назначением языка Express является информационное моделирование. Соответственно к первым и пока основным пользователям языка Express относятся специалисты по структурам данных, которые любят изображать структуры в графическом виде.
Поэтому еще на ранней стадии разработки языка Express был выработан набор правил его изображения в графическом виде. Эти правила получившие название Express-G, приведены в одном из приложений к тому 11 ISO 10303.
Разумеется, специалисту, привыкшему к своему способу изображения, переход на другой способ доставляет немало хлопот, однако
Express-G, во-первых облегчает взаимопонимание специалистов, а во-вторых, позволяет разработать программное обеспечение для автоматизированного изображения структур данных.
Сплошные прямоугольники представляют объекты (ENTITY), а пунктирные прямоугольники с вертикальной перегородкой –
определенные пользователем типы (USER DEFINED TYPE).
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.