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