Интерактивное графическое программное обеспечение PC-DMIS (Глава 26: Использование выражений и переменных), страница 8

При заданном условии, что V1  - тип point.

V1.X то же, что и V1.I V1.Y то же, что и V1.J V1.Z то же, что и V1.K

V1.XYZ то же, что и V1.IJK и V1 без расширения.

Если переменная типа string имеет рядовое значение, равное имени id фигуры, размера или настройки, эта переменная может быть использована в качестве объекта референции.

Пример: ASSIGN/ V1 = “CIRCLE1”

Следующие операнды являются действительными и возможными при условии того, что существует фигура с именем CIRCLE1 .

V1.X – Измеренное значение X CIRCLE1 V1.TX – Теоретическое значение X CIRCLE1 V1.Diameter – Измеренный диаметр CIRCLE1 V1.Radius – Измеренный радиус CIRCLE1

Этот тип обратного направления (indirection) для переменных типа string доступен только для одного уровня обратного движения. Следующее не будет работать:.

ASSIGN/ V1 = “CIRCLE1” ASSIGN/ V2 = “V1” V2.X – Это выражение будет вычислено как ноль, вместо текущего измеренного значения CIRCLE1.X.

Примечание: ссылка V2.X не будет отмечена как ошибка красным текстом, даже хотя выражение над ней устанавливает тип string. Причина, по которой ссылка не будет отмечена как ошибочная, состоит в том, что течение выполнения программы не известно до самого конца.

Однако, если вы используете фигурные скобки, следующее не будет работать:

ASSIGN/ V1 = {CIRCLE1} ASSIGN/ V2 = {V1} V2.X – Это даст вам значение CIRCLE1.X.[CA2] 

Рассмотрим следующий пример:

ASSIGN/ V1 = “CIRCLE1”     ASSIGN/ V2 = “V1”     IF / CIRCLE1.X > CIRCLE1.TX, GOTO, L2 L1 = LABEL /     ASSIGN/ V3 = V2.X     GOTO / LABEL, L3 L2 = LABEL /     ASSIGN/ V2 = MPOINT( 2, 5, 7)     GOTO / LABEL, L1 L3 = LABEL /

Если во время выполнения программы значение CIRCLE1.X оказывается больше значения CIRCLE1.TX, то выражение V2.X будет действительным и будет вычислено как 2. Иначе, выражение V2.X будет вычислено как 0, т.к. значение V2 в момент ASSIGN для V3  - это ряд “V1”. Это задача программы убедиться в том, что выражения будут работать, как предполагается в подобных случаях.

Дополнительное примечание по записи Assign: Почти  все ссылки на фигуры могут быть использованы в левой части записи по присвоению, чтобы  поместить значение к измеренным или теоретическим элементам данных по фигуре. Единственным исключением являются одиночные компоненты векторов I, J, K. Чтобы присвоить векторам, целый вектор должен быть присвоен сразу же с помощью выражения, которое вычисляется до точки. Данные вектора нормализуются, когда он вводится в элементы данных по векторам фигуры.

Пример:

ASSIGN/ CIRCLE1.I = 2  - illegal ASSIGN/ CIRCLE1.IJK = MPOINT(2, 0, 0)-legal (vector is normalized to 1, 0, 0)

Конструкции

С помощью версии 3.5 и более поздних версий вы можете использовать новый тип переменной, названный конструкциями. С помощью структур можно поместите выражение на переменную, чтобы определить субэлемент этой переменной. Рассмотрим пример:

Пример:

ASSIGN/V1.HEIGHT = 6 ASSIGN/V1.WIDTH = 4.3 ASSIGN/V1.MODE = "CIRCULAR" ASSIGN/V1.POINT = MPOINT(100.3, 37.5, 63.1)

В данном примере,

·  V1  - конструкция.

·  HEIGHT, WIDTH, MODE, и POINT  - субэлементы этой конструкции[JLH3] .

Правила, применимые к конструкциям

·  Как и переменные, конструкции не объявляются окончательными единицами.

·  Субэлементы конструкции могут быть различного вида переменными:

q  Целое число

q  Двойное количество

q  Точка

q  Фигурный указатель

q  Функция

q  Множество

q  Конструкции

Например, возможно говорить об элементах конструкции, которые являются множествами, и множественных элементах, которые представляют собой конструкции. В данном случае мы можем рассматривать следующие примеры выражений действительными:

Пример

ASSIGN/CAR.LEFTSIDE.DOOR[2].QUADRANT[3].JOINT[5].HIT[4] = MPOINT(558.89, 910.12, 42.45) COMMENT/OPER,"Current Z Position: " + CAR.LEFTSIDE.DOOR[2].QUADRANT[3].JOINT[5].HIT[4].Z ASSIGN/CURRENTJOINT = LEFTSIDE.DOOR[2].QUADRANT[3].JOINT[5] COMMENT/OPER,"Next Hit: " + CURRENTJOINT.HIT[4]