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’
[B]Некоторые пояснения к грамматике.[/B]
В коде допускается использовать [I]{комментарии в фигурных скобках}[/I] и [I]// комментарии до конца строки.[/I]
[B]ConditionSection[/B]
Слово Test после выражения переводит условие “мигающий” режим (0.5 секунды условие принимает значение Истина, 0.5 – Ложь).
[B]Element[/B]
Если в описании элемента первым стоит условие, то элемент будет отображаться только в том случае, если значение условия отлично от нуля.
[B]Distances[/B]
Первое число (X) – максимальная дистанция от камеры до примитива, на котором примитив отображается, второе (Y) – значение (от 0 до 1), при котором снижается в 2 раза качество отображения примитива (действует не на все примитивы), третье (Z) – значение (от 0 до 1), при котором качество отображения примитива повышается в 2 раза (действует не на все примитивы). Пример: ![50, 0.7, 0.3] означает, что примитив, к которому относится данное описание, НЕ должен отображаться при расстоянии до него более 50 метров, при дистанции от 35 метров (50*0.7) и до 50 качество отображения примитива будет вдвое ниже, но при дистанции менее 15 метров (50*0.3) – вдвое выше.
[B]Group[/B]
На группу действуют так же и условия, написанные перед ними, Distances и материал.
[B]FunctionName[/B]
Для Sin, Cos, Tan аргумент в градусах. Abs – модуль аргумента.
[B]Color[/B]
В качестве Identifier может использоваться значение, определённое в секции ColorsSection. Имеются предопределённые константы Steel и Glass, которые можно использовать в качестве цвета. Steel = $969696, Glass = $FAFAFA.
[B]Color3[/B]
R, G, B компоненты цвета от 0 до 255.
[B]ColorParams[/B]
Все три значения от 0 до 1. Diffuse — мощность максимально освещённого участка объекта, Ambient — мощность минимально освещённого участка объекта, Emissive — мощность свечения объекта цветом. Значение «по умолчанию» (если не указано) считается равным [0.4, 0.6, 0.0]
[B]Описание параметров примитивов:[/B]
[B]Beam - Балка прямоугольного или круглого сечения[/B]
Size – размер (диаметр или ширина) балки.
[Size] – в случае круглой балки роли не играет. Если балка прямоугольного сечения, то можно указать его, чтобы сечение не получилось квадратным.
Две точки определяют координаты начала и конца балки.
Angle – угол вращения балки относительно оси (начало – конец) в градусах.
Q – признак того, что балка имеет прямоугольное (или квадратное) сечение.
Quality (имеет смысл только для круглых балок) – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
[B]Cone - Конус[/B]
Две точки определяют координаты середины верхнего и нижнего оснований конуса.
Diameter – диаметр конуса во второй точке.
[Diameter] – диаметр конуса в первой точке, если не указан, считается равным 0.
Quality – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
[B]Sphere - Шар[/B]
Точка определяют координаты центра шара.
Diameter – диаметр шара.
Quality – качество отображения (3..24). Смысл – насколько «круглым» будет сечение.
[B]ZPart[/B]
Фигура, заполняющая по диагонали два отрезка, заданными четырьмя точками. Применяется обычно при описании металлических ЛЭП, как «заполнитель» вертикальных элементов. При описании малых архитектурных форм практически не используется.
E – признак того, что «горизонтальный» элемент должен быть в начале и в конце фигуры.
M – признак того, что между диагональными элементами должны присутствовать горизонтальные.
Пример использования: [I]ZPart 0.2 [-2,0,0] [2,0,0] [1,0,4] [-1,0,4] 1 E;[/I]
[B]Кривая Безье третьей степени[/B]
4 управляющих точки. Size1 и опциональный Size2 определяют ширины лент, образующих сечение в виде «крестовины» вдоль кривой.
Изменено: Денис Петренко - 16.04.2015 16:23:06
(в Description добавлено [Distances])