Goal → Description Code ‘end’
Description → BeamObject ‘Имя’ [Material] [Distances]‘;’
Code → {ConditionSection | ConstSection | VarSection | ElementsSection | CoordsSection | ColorsSection}+
ConditionSection → ‘condition’ {Identifier = Expression [Test] ‘;’ }+
ConstSection → ‘const’ {Identifier = Expression ‘;’}+
VarSection → ‘var’ {Identifier = Expression [Min Max] ‘;’}+
CoordsSection → ‘coord’ {Identifier = PointExpression‘;’ }+
ColorsSection → ‘color’ {Identifier = Material‘;’}+
ElementSection → ‘elements’ ElementList
ElementList → {Element}+
Element → [Condition] [Distances] [Material] {Group | Beam | Cone | Sphere | Bezier | Zpart}
Condition → ‘if’ Identifier
Distances → ‘!’ PointExpression
Material → Color {[Condition Color]}*
Group → ‘begin’ ElementList ‘end’ ‘;’
Beam → ‘Beam’ [Material] Size [Size] PointExpression PointExpression [Angle] [‘Q’] [Material] [Quality]‘;’
Cone → ‘Cone’ PointExpression PointExpression Diameter [Diameter] [Material] [Quality] ‘;’
Sphere → ‘Sphere’ PointExpression Diameter [Material] [Quality]‘;’
ZPart → ‘ZPart’ [Size] PointExpression PointExpression PointExpression PointExpression Step [Material] [‘E’] [‘M’]‘;’
Bezier → ‘Bezier’ PointExpression PointExpression PointExpression PointExpression Size1 [Size2] [Material] [Quality]‘;’
Color → color3 [ColorParams3] | Identifier
Color3 → ‘[’ Expression ‘,’ Expression ‘,’ Expression ‘]’
ColorParams → ‘[’, Diffuse ‘,’ Ambient ‘,’ Emissive ‘,’ ‘]’ | Identifier
Point → coord3 | Identifier
Coord3 → ‘[’ Expression ‘,’ Expression ‘,’ Expression ‘]’
Step, Width, Height, Angle, Diameter, Diffuse, Ambient, Emissive, Quality, Min, Max → Expression
PointExpression → {[‘+’ | ‘-’] PointTerm}+
PointTerm → PointFactor {(‘*’ | ‘/’) Expression}*
PointFactor → Point | ‘(’ PointExpression ‘)’
Expression → [‘+’ | ‘-’] Term {(‘+’| ‘-’) Term}*
Term → Factor{(‘*’ | ‘/’) Factor}+
Factor → [float | Identifier | ‘(’ Expression ‘)’ | FunctionName Factor]
FunctionName → ‘sin’ | ‘cos’ | ‘tan’ | ‘abs’
Некоторые пояснения к грамматике.
В коде допускается использовать {комментарии в фигурных скобках} и // комментарии до конца строки.
ConditionSection
Слово Test после выражения переводит условие “мигающий” режим (0.5 секунды условие принимает значение Истина, 0.5 – Ложь).
Element
Если в описании элемента первым стоит условие, то элемент будет отображаться только в том случае, если значение условия отлично от нуля.
Distances
Первое число (X) – максимальная дистанция от камеры до примитива, на котором примитив отображается, второе (Y) – значение (от 0 до 1), при котором снижается в 2 раза качество отображения примитива (действует не на все примитивы), третье (Z) – значение (от 0 до 1), при котором качество отображения примитива повышается в 2 раза (действует не на все примитивы). Пример: ![50, 0.7, 0.3] означает, что примитив, к которому относится данное описание, НЕ должен отображаться при расстоянии до него более 50 метров, при дистанции от 35 метров (50*0.7) и до 50 качество отображения примитива будет вдвое ниже, но при дистанции менее 15 метров (50*0.3) – вдвое выше.
Group
На группу действуют так же и условия, написанные перед ними, Distances и материал.
FunctionName
Для Sin, Cos, Tan аргумент в градусах. Abs – модуль аргумента.
Color
В качестве Identifier может использоваться значение, определённое в секции ColorsSection. Имеются предопределённые константы Steel и Glass, которые можно использовать в качестве цвета. Steel = $969696, Glass = $FAFAFA.
Color3
R, G, B компоненты цвета от 0 до 255.
ColorParams
Все три значения от 0 до 1. Diffuse — мощность максимально освещённого участка объекта, Ambient — мощность минимально освещённого участка объекта, Emissive — мощность свечения объекта цветом. Значение «по умолчанию» (если не указано) считается равным [0.4, 0.6, 0.0]
Описание параметров примитивов:
Beam - Балка прямоугольного или круглого сечения
Size – размер (диаметр или ширина) балки.
[Size] – в случае круглой балки роли не играет. Если балка прямоугольного сечения, то можно указать его, чтобы сечение не получилось квадратным.
Две точки определяют координаты начала и конца балки.
Angle – угол вращения балки относительно оси (начало – конец) в градусах.
Q – признак того, что балка имеет прямоугольное (или квадратное) сечение.
Quality (имеет смысл только для круглых балок) – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
Cone - Конус
Две точки определяют координаты середины верхнего и нижнего оснований конуса.
Diameter – диаметр конуса во второй точке.
[Diameter] – диаметр конуса в первой точке, если не указан, считается равным 0.
Quality – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
Sphere - Шар
Точка определяют координаты центра шара.
Diameter – диаметр шара.
Quality – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
ZPart
Фигура, заполняющая по диагонали два отрезка, заданными четырьмя точками. Применяется обычно при описании металлических ЛЭП, как «заполнитель» вертикальных элементов. При описании малых архитектурных форм практически не используется.
E – признак того, что «горизонтальный» элемент должен быть в начале и в конце фигуры.
M – признак того, что между диагональными элементами должны присутствовать горизонтальные.
Пример использования: ZPart 0.2 [-2,0,0] [2,0,0] [1,0,4] [-1,0,4] 1 E;
Кривая Безье третьей степени
4 управляющих точки. Size1 и опциональный Size2 определяют ширины лент, образующих сечение в виде «крестовины» вдоль кривой.
Description → BeamObject ‘Имя’ [Material] [Distances]‘;’
Code → {ConditionSection | ConstSection | VarSection | ElementsSection | CoordsSection | ColorsSection}+
ConditionSection → ‘condition’ {Identifier = Expression [Test] ‘;’ }+
ConstSection → ‘const’ {Identifier = Expression ‘;’}+
VarSection → ‘var’ {Identifier = Expression [Min Max] ‘;’}+
CoordsSection → ‘coord’ {Identifier = PointExpression‘;’ }+
ColorsSection → ‘color’ {Identifier = Material‘;’}+
ElementSection → ‘elements’ ElementList
ElementList → {Element}+
Element → [Condition] [Distances] [Material] {Group | Beam | Cone | Sphere | Bezier | Zpart}
Condition → ‘if’ Identifier
Distances → ‘!’ PointExpression
Material → Color {[Condition Color]}*
Group → ‘begin’ ElementList ‘end’ ‘;’
Beam → ‘Beam’ [Material] Size [Size] PointExpression PointExpression [Angle] [‘Q’] [Material] [Quality]‘;’
Cone → ‘Cone’ PointExpression PointExpression Diameter [Diameter] [Material] [Quality] ‘;’
Sphere → ‘Sphere’ PointExpression Diameter [Material] [Quality]‘;’
ZPart → ‘ZPart’ [Size] PointExpression PointExpression PointExpression PointExpression Step [Material] [‘E’] [‘M’]‘;’
Bezier → ‘Bezier’ PointExpression PointExpression PointExpression PointExpression Size1 [Size2] [Material] [Quality]‘;’
Color → color3 [ColorParams3] | Identifier
Color3 → ‘[’ Expression ‘,’ Expression ‘,’ Expression ‘]’
ColorParams → ‘[’, Diffuse ‘,’ Ambient ‘,’ Emissive ‘,’ ‘]’ | Identifier
Point → coord3 | Identifier
Coord3 → ‘[’ Expression ‘,’ Expression ‘,’ Expression ‘]’
Step, Width, Height, Angle, Diameter, Diffuse, Ambient, Emissive, Quality, Min, Max → Expression
PointExpression → {[‘+’ | ‘-’] PointTerm}+
PointTerm → PointFactor {(‘*’ | ‘/’) Expression}*
PointFactor → Point | ‘(’ PointExpression ‘)’
Expression → [‘+’ | ‘-’] Term {(‘+’| ‘-’) Term}*
Term → Factor{(‘*’ | ‘/’) Factor}+
Factor → [float | Identifier | ‘(’ Expression ‘)’ | FunctionName Factor]
FunctionName → ‘sin’ | ‘cos’ | ‘tan’ | ‘abs’
Некоторые пояснения к грамматике.
В коде допускается использовать {комментарии в фигурных скобках} и // комментарии до конца строки.
ConditionSection
Слово Test после выражения переводит условие “мигающий” режим (0.5 секунды условие принимает значение Истина, 0.5 – Ложь).
Element
Если в описании элемента первым стоит условие, то элемент будет отображаться только в том случае, если значение условия отлично от нуля.
Distances
Первое число (X) – максимальная дистанция от камеры до примитива, на котором примитив отображается, второе (Y) – значение (от 0 до 1), при котором снижается в 2 раза качество отображения примитива (действует не на все примитивы), третье (Z) – значение (от 0 до 1), при котором качество отображения примитива повышается в 2 раза (действует не на все примитивы). Пример: ![50, 0.7, 0.3] означает, что примитив, к которому относится данное описание, НЕ должен отображаться при расстоянии до него более 50 метров, при дистанции от 35 метров (50*0.7) и до 50 качество отображения примитива будет вдвое ниже, но при дистанции менее 15 метров (50*0.3) – вдвое выше.
Group
На группу действуют так же и условия, написанные перед ними, Distances и материал.
FunctionName
Для Sin, Cos, Tan аргумент в градусах. Abs – модуль аргумента.
Color
В качестве Identifier может использоваться значение, определённое в секции ColorsSection. Имеются предопределённые константы Steel и Glass, которые можно использовать в качестве цвета. Steel = $969696, Glass = $FAFAFA.
Color3
R, G, B компоненты цвета от 0 до 255.
ColorParams
Все три значения от 0 до 1. Diffuse — мощность максимально освещённого участка объекта, Ambient — мощность минимально освещённого участка объекта, Emissive — мощность свечения объекта цветом. Значение «по умолчанию» (если не указано) считается равным [0.4, 0.6, 0.0]
Описание параметров примитивов:
Beam - Балка прямоугольного или круглого сечения
Size – размер (диаметр или ширина) балки.
[Size] – в случае круглой балки роли не играет. Если балка прямоугольного сечения, то можно указать его, чтобы сечение не получилось квадратным.
Две точки определяют координаты начала и конца балки.
Angle – угол вращения балки относительно оси (начало – конец) в градусах.
Q – признак того, что балка имеет прямоугольное (или квадратное) сечение.
Quality (имеет смысл только для круглых балок) – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
Cone - Конус
Две точки определяют координаты середины верхнего и нижнего оснований конуса.
Diameter – диаметр конуса во второй точке.
[Diameter] – диаметр конуса в первой точке, если не указан, считается равным 0.
Quality – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
Sphere - Шар
Точка определяют координаты центра шара.
Diameter – диаметр шара.
Quality – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
ZPart
Фигура, заполняющая по диагонали два отрезка, заданными четырьмя точками. Применяется обычно при описании металлических ЛЭП, как «заполнитель» вертикальных элементов. При описании малых архитектурных форм практически не используется.
E – признак того, что «горизонтальный» элемент должен быть в начале и в конце фигуры.
M – признак того, что между диагональными элементами должны присутствовать горизонтальные.
Пример использования: ZPart 0.2 [-2,0,0] [2,0,0] [1,0,4] [-1,0,4] 1 E;
Кривая Безье третьей степени
4 управляющих точки. Size1 и опциональный Size2 определяют ширины лент, образующих сечение в виде «крестовины» вдоль кривой.
Изменено: - 16.04.2015 16:23:06
(в Description добавлено [Distances])