Малые архитектурные формы

contact
Форум » Применение программ ИндорСофт » IndorCAD: Система автоматизированного проектирования

Сообщения 1 - 25 из 70

Малые архитектурные формы, Грамматика по малым архитектурным формам, делимся наработками
 
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 определяют ширины лент, образующих сечение в виде «крестовины» вдоль кривой.
Изменено: Денис Петренко - 16.04.2015 16:23:06 (в Description добавлено [Distances])
 
BeamObject 'Конус ограждения' ![100, 0, 0];
condition
 LightOn = 1 Test;

Color
 Orange  = [255,135,14] [0.4, 0.6, 0.0] if LightOn [255,135,14] [0.4, 0.6, 0.2];
 White   = [255,255,255] [0.5, 0.5, 0.0] if LightOn [255,255,255] [0.0, 0.0, 1.0];

var
 H = 0.5; {Высота конуса}
 W = 0.4; {Ширина основания конуса}

const
 k=0.1;   {отношение высоты белой каймы к высоте конуса}
 k2=2.5;  {отношение нижнего диаметра конуса к верхнему}
 k3=1.02; {отношение диаметров белых конусов к оранжевому}
 D = H/2; {Нижний диаметр конуса}

 pos1 = 0.5;
 pos11 = H*(Pos1-k/2);
 pos12 = H*(Pos1+k/2);
 pos2 = 0.8;
 pos21 = H*(Pos2-k/2);
 pos22 = H*(Pos2+k/2);
 pos3 = 1;
 pos31 = H*(Pos3);
 pos32 = H*(Pos3+k/2);

 TH = H/(1-1/k2);

 BaseQuality = 12;

coord
 dist1 = [5, 0.7, 0.3];
 dist2 = [20, 0.7, 0.3];

Elements

{Основание}
!dist2 Orange Beam W [0,0,0] [0, 0, H*0.02] Q;
!dist1 Orange Beam W*0.95 [0,0,H*0.02] [0, 0, H*0.04] 0 BaseQuality;

{Основной конус}
Orange Cone [0,0,0] [0,0,H] D/k2 D BaseQuality;

{Белые полосы на конусе}
White Cone [0,0,pos11] [0,0,Pos12] k3*D*(1-pos12/TH) k3*D*(1-pos11/TH) BaseQuality;
White Cone [0,0,pos21] [0,0,Pos22] k3*D*(1-pos22/TH) k3*D*(1-pos21/TH) BaseQuality;

{макушка конуса}
White Cone [0,0,pos31] [0,0,Pos32] k3*D*(1-pos32/TH) k3*D*(1-pos31/TH) BaseQuality;
White Sphere [0,0,pos32] k3*D*(1-pos32/TH) BaseQuality;

End
 
Спасибо большое!
 
Создал модель переходной опоры под развязку в упрощённом виде. Я не мостовик по этому скорее всего напутал с названиями элементов но думаю в 3D виде это не принципиально. Кому совсем лень разбираться - высотой всей конструкции можно вирировать при помощи одного числового значения, а именно h2. Денис, ещё хотел попросить, может есть ещё какая-либо информация по элементам так как шара, конуса и балки маловато) Например в "Рабочий и колхозница" есть такой элемент как bezier. Может ещё какие есть? Скажем призма. А так файл с опорой приложен к этому сообщению, буду рад если кому-то пригодится или кто-то модернизирует данный код.
 
Обновил грамматику, внеся описание кривой Безье.
 
Для тех, кто не понял: это НЕ зашифрованные ругательства, это - специальный язык, при помощи которого можно моделировать внешний вид малых архитектурных форм в системе IndorCAD.
 
Здравствуйте!!!!! Скажите пожалуйста как сделать так что бы линия изображалась в 3D виде. Например: Отображение забора, каб. столбик ну и т. д.
Заранее спасибо!!!!
 
Что неужели никто не работает в 3D?
 
Работаем, работаем :)
Кабельный столбик можно сделать самому как Малую архитектурную форму, сохранить в файл, потом использовать, сколько надо.
Можете и нам прислать :)
Заборы - были в 6й версии, скоро, наверное, вернём в 8й.
 
а где взять  литературу чтоб создавать малые формы в 3D
 
Грамматика языка, описывающего 3D-объекты (малые архитектурные формы), приведена здесь:
http://www.indorsoft.ru/support/forum/forum2/topic145/messages/
Осталось загрузить любую форму из тех, что поставляются с программой, в свойствах посмотреть её код, разобраться с грамматикой :)
:!: Сначала лучше попробовать на простой форме, затем на более сложной
 
Цитата
Сначала лучше попробовать на простой форме, затем на более сложной
это точно
 
Почему бы не создать в окне просмотра 3Д в редакторе малых архитектурных форм кнопку типа вращение по орбите, постоянное самопроизвольное вращение модели очень не удобно.
 
В редакторе малых архитектурных форм можно пользоваться
а) колесом мыши для приближения/удаления;
б) Ctrl+колесо - для уменьшения/увеличения вращения камеры вокруг объекта в горизонтальной плоскости;
в) Shift+колесо - для перемещения камеры в вертикальной плоскости вокруг объекта.
 
Цитата
Денис Петренко пишет:
В редакторе малых архитектурных форм можно пользоваться
а) колесом мыши для приближения/удаления;
б) Ctrl+колесо - для уменьшения/увеличения вращения камеры вокруг объекта в горизонтальной плоскости;
в) Shift+колесо - для перемещения камеры в вертикальной плоскости вокруг объекта.
вот за это прям спасибо спасибо.
А вы будите добавлять в общую базу "малых архитектурных форм" удачные образцы присланные со стороны юзерами? А то пока весьма скудный набор )
 
С удовольствием!
Если есть удачные образцы - присылайте!
Войдёт в автообновление и появится у всех!
Можете в комментариях (в коде малой архитектурной формы) свои реквизиты и копирайты вставить - удалять не будем )
 
Сообщений здесь давно не было, может тема уже не актуальна ?
Но я вдохновился и склепал МАЗ 5516
Может кому понадобиться ?
 
Цитата
Но я вдохновился и склепал МАЗ 5516
Может кому понадобиться ?
Алексей Петрович, класс!
В ближайшее обновление ваша модель будет добавлена для всех!
Если вдохновление ещё осталось - будем рады новым моделям!
 
Ещё не закончил, но загружу сюда чтоб не потерялся. Он мне тяжело дался. Для нескольких элементов стрелы так и не смог найти формулу вычисления угла. Пришлось строить в автокаде, чтобы подобрать более менее похожую зависимость.

Добавьте в шапку ( описание кода)
ShapeSection → ‘shape’ {Identifier = ShapeExpression  NumberPoint ‘[’ Expression ‘,’ Expression ‘]’ ‘,’ ‘[’ Expression ‘,’ Expression ‘]’...‘;’ }+
                         Пример использования:     Main = 5 [0,1], [0.1,0.9], [0.2,0.25], [0.3,0], [0.05,0]; плоская фигура

Shape → ShapeExpression Size PointExpression PointExpression [Angle] [‘Q’] [Material] [Quality]
      Пример использования:      Main h [0,-L/2,0] rel [0,L,0] AColor;

(описание параметров балки)
Две точки определяют координаты начала и конца балки.
  Пример использования:     координаты абсолютные [2,0,0] [3,0,4]
                                             или первая абсолютная а вторая относительно первой [2,0,0] rel [1,0,4]
         StartPoint = [x1,y1,z1];
         EndPoint = [x2,y2,z2];
         CenterPoint =  StartPoint + (EndPoint-StartPoint)/(1/0.5);


Мне не хватало функции извлечения координат из    Point = [x1,y1,z1];
         например: Get_coord3(Point ) → z1 ; Get_coord1(Point ) → x1

А можно  пользовательскую функцию с параметрами создать?
 
Алексей, вы не перестаёте нас удивлять!
Это супер!
Чуть-чуть допилить модель в части колёс на гусеницах и будет бомба!
Цитата

Мне не хватало функции извлечения координат из    Point = [x1,y1,z1];
         например: Get_coord3(Point ) → z1 ; Get_coord1(Point ) → x1

А можно  пользовательскую функцию с параметрами создать?
По части использования одной из координат точки (X, Y или Z) - сделали, войдёт в ближайшее обновление.
Пример использования: A = A + Point.X; // Ещё допустимы .Y и .Z (через точку).
Про пользовательские функции нужно подумать...
Можете прислать прототипы, которые нужны, для обдумывания концепции?
Например:

coord function(coord Pos; float dX, dY, dZ) // добавит к входящей трёхмерной точке дельту: Result = Pos + [dX,dY,dZ];

или

float function Length(coord Pos1, Pos2) // вернёт скалярное значение = расстоянию от Pos1 до Pos2:  Result = sqrt(sqr(Pos1.X-Pos2.X) + sqr(Pos1.Y-Pos2.Y) + sqr(Pos1.Z-Pos2.Z))
 
На счет прототипов функций. Это для меня сложно, я не очень продвинут в программировании. Приведенные примеры мне нравятся, но я не вижу различий. Разве что у первой нет имени (ошибка ?). Зарезервированное слово Result  будет всегда присутствовать, как результат работы функции? А если я хочу описать часть кода  (ElementList)  в функции без параметров и результата.
Ещё подскажите варианты использования if  .. end.  Такую конструкцию можно?
Если Условие  Тогда   ...
                         Иначе  ...
                         Если Условие  Тогда  ...
                                                  Иначе  ...
                         Всё
Всё
 
Выкладываю незаконченную немного инструкцию (методичку с примерами) по использованию языка для создания собственных 3D-объектов.
Инструкция
 
Выкладываю Экскаватор и Пень
 
Цитата
Алексей Фещенко
Спасибо.
... но у Вас отваливается какая то часть экскаватора при задании угла поворота для модели)
 
Денис поправьте пожалуйста в   Экскаватор ЭО-4121.las  5 строку (развернем избушку к лесу...)

BeamObject 'Экскаватор ЭО-4121' {$X=11;Y=6;Z=3;dY=-2.0;dZ=1};


И ещё посмотрите почему этот объект (Стрелка3D) не реагирует на угол поворота?
(У меня такая же проблема с бампером экскаватора строка 209)
Стрела3D.png (26.31 КБ)

Сообщения 1 - 25 из 70

Читают тему