Главная › Форум › Железные дороги, версия 5.0 › Поперечные профили › Формулы при создании поперечников
- В этой теме 18 ответов, 6 участников, последнее обновление 2 года, 1 месяц назад сделано Гусаров Даниил.
-
АвторСообщения
-
08.06.2021 в 12:24 #3613giprailУчастник
Здравствуйте! Помогите пожалуйста разобраться с некоторыми функциями, используемыми при построении поперечников.
На «старом» форуме в теме по проектированию поперечников (здесь http://www.topomatic.ru/forum/showthread.php?t=5350&page=2&pp=10) разработчиками Robur при построения определенной индивидуальной конструкции предлагались следующие формулы для узлов:
Формула X: (Узел1.X + 0.5000000 if Узел2 == None or Узел2.X — Узел1.X < 0.5000000 else Узел2.X)
Формула Y: (Узел1.Y + 0.5000000 * tan(Луч1.Inclination) if Узел2 == None or Узел2.X — Узел1.X < 0.5000000 else Узел2.Y)
или
Формула X: (Узел3.X if Узел3.X == Узел2.X else Узел3.X + 0.1000000)
Формула Y: (Узел3.Y if Узел3.Y == Узел2.Y else Узел3.Y — 0.2000000)
В руководстве пользователя приведено описание функции iff (с двумя буквами f). Эта же функция есть в мастере формул. В соответствии с руководством пользователя функция iff имеет следующий синтаксис: iff(условие, выражение1, выражение2) если условие выполняется, то значение функции равно выражение1, иначе выражение2. Аргументы отделяются друг от друга запятой. В условии можно использовать символы >, <, and (логическое «и»), or (логическое «или»).
Как я понял предлагаемая разработчиками Robur функция if (с одной буквой f) это некая модификация стандартной функции iff.
Так, например, формулу
(Узел1.X + 0.5000000 if Узел2 == None or Узел2.X — Узел1.X < 0.5000000 else Узел2.X)
можно записать в виде
iff(Узел2 == None or Узел2.X — Узел1.X < 0.5000000, Узел1.X + 0.5000000, Узел2.X)
и результат не изменится.
Однако это работает не всегда. Так, например, рабочая формула, для случая, когда «Узел_верха_вырезки_3_5_м» не создается записанная в виде:
Узел_подошва_насыпи.X if Узел_верха_вырезки_3_5_м == None else Узел_верха_вырезки_3_5_м.X
не работает при записи её в виде:
iff(Узел_верха_вырезки_3_5_м == None,Узел_подошва_насыпи.X,Узел_верха_вырезки_3_5_м.X)
То есть, как я понимаю между функциями iff и if есть отличие не только по синтаксису, но и по сути их работы.
Никаких описаний работы функции if в руководстве пользователя я не нашел, так же, как и не нашел описание параметра None и знака == (двойное равно).
Можете пояснить разницу между функциями iff и if, синтаксис функции if, что за параметр None и как он используется (синтаксис), что за знак == и когда необходимо использовать не один знак равенства, а два.08.06.2021 в 15:37 #3615Гусаров ДаниилХранительЗдравствуйте,
Элементы конструкции написаны на языке Python, поэтому сам синтаксис можно поискать в интернете. Если коротко, то iff это функция, которая сначала вычисляет все свои аргументы, а уже после выполняется сама и возвращает результат. Условное выражение if выполняет условие последовательно и является более универсальным (синтаксис ИСТИНА if УСЛОВИЕ else ЛОЖЬ)
Значение None обозначает то, что конкретное значение отсутствует (например узел не смог построиться, потому что луч не нашел пересечение с землей).
Знак == это оператор сравнения, с примерами можно ознакомиться тут: http://pythonicway.com/python-operators07.12.2021 в 13:48 #4241KolyambaУчастникЗдравствуйте!
В Робур при позиционировании узлов на поперечном профиле, можно при использовании формул брать переменные с другого подобъекта (например высоту ВСП или толщину балласта), что очень удобно.
А вот можно ли при применении стандартной конструкции: «Балласт однослойный» также использовать параметры с другого подобъекта ?07.12.2021 в 13:59 #4243Гусаров ДаниилХранительЗдравствуйте,
В Робур при позиционировании узлов на поперечном профиле, можно при использовании формул брать переменные с другого подобъекта (например высоту ВСП или толщину балласта), что очень удобно.
А вот можно ли при применении стандартной конструкции: «Балласт однослойный» также использовать параметры с другого подобъекта ?Да это можно сделать. Перед написанием формулы задайте в поле Толщина,м любую величину с клавиатуры, примените её, а после воспользуйтесь Мастером формул.
Вложения:
Вы должны войти для просмотра вложений.07.12.2021 в 14:18 #4246KolyambaУчастникДа это можно сделать. Перед написанием формулы задайте в поле Толщина,м любую величину с клавиатуры, примените её, а после воспользуйтесь Мастером формул.
Здравствуйте.
Спасибо,
все получилось.
Немножко мудреный алгоритм конечно ))))) — Я имею в виду что сначала надо задать произвольную толщину балласта отличную от 0,00 и только потом воспользоваться мастером формул.
Сам я без Вашей подсказки до этого не дошел.07.12.2021 в 14:24 #4249KolyambaУчастникЗдравствуйте!
Еще вопрос:
можно ли скопировать часть дерева элементов конструкции и вставить их на другой поперечник ?вот как на скрине — выделено часть элементов.
Вложения:
Вы должны войти для просмотра вложений.07.12.2021 в 16:11 #4253Гусаров ДаниилХранительЕще вопрос:
можно ли скопировать часть дерева элементов конструкции и вставить их на другой поперечник ?Если данные элементы строятся последовательно — привязаны друг к другу, то можно попробовать воспользоваться функцией в меню Поперечник-Утилиты-Сохранить конструкцию (в результате программа сохранит выделенные элементы в качестве отдельной конструкции). Далее, для вставки воспользуйтесь функцией в меню Поперечник-Утилиты-Импортировать конструкцию с точкой вставки.
07.12.2021 в 17:12 #4254KolyambaУчастникЗдравствуйте!.
Спасибо — все получилось.
правда перед вставкой программа зачем то просит указать префикс (например А)
который потом встает перед каждым элементом конструкции.
(я так понимаю, что бы не было конфликта имен при вставке «чужеродной» конструкции
Но это не критично и сильно прощает копирование отдельных конструктивных элементов.13.12.2021 в 10:54 #4269Зеленский КонстантинУчастникВопрос, вроде обещали группировку в элементах конструкции, она есть в новой версии? а то забыл посмотреть пока тестовая лицензия была.
13.12.2021 в 12:01 #4270Гусаров ДаниилХранительЗдравствуйте,
Вопрос, вроде обещали группировку в элементах конструкции, она есть в новой версии? а то забыл посмотреть пока тестовая лицензия была.
Да, такая возможно появилась. По данной ссылке можно посмотреть нововведения (пусть они рассмотрены на примере автодороги, но принципы работы одинаковы)
Ролик01.08.2022 в 14:09 #4873АлексейУчастникДобрый день!
Не могу понять почему слетела привязка по оси Y, имеется такой узел, который я хочу связывать с профилем водоотвода №7 — 4й левый.
По моей логике значения X — «БР_ОП.X + 0.2500000» и Y — «ОП_ОСЬ.Y — ZS — 0.0400000 * (ОП_ОСЬ.X + 2.0500000 — БР_ОП.X — 0.2500000))» должны присваиваться смещению и отметке красного профиля №7 при его создании и скидываться в эти же значения если я нажимаю ПКМ и очистить в структуре проекта внутри выбранного подобъекта дороги, именно это я и получил при первом приближении, проверил — все работало. Потом добавил такой же узел с похожей конструкцией, но в другой цепочке условий, начал тестировать вторую цепочку, узел улетает на неопределенное пока что мной число, не равное нулю по оси Y, ось X сидит на месте как было задумано. Возвращаюсь в первую цепочку, повторяю действие, теперь тоже так же улетает отметка по оси Y.DrainX(design_context, 7, БР_ОП.X + 0.2500000)
DrainY(design_context, 7, ОП_ОСЬ.Y — ZS — 0.0400000 * (ОП_ОСЬ.X + 2.0500000 — БР_ОП.X — 0.2500000))
где ZS — доп переменнаяматематически отметка Y = 448,61-0,8-0,04*((-4,9)+2,05-(-8,50)-0,25)=447,59, а красный профиль создается на отметке 446,37, в общем весь участок с разными отметками получается, так и не смог понять что за отметка присваивается
Может я что то в семантике напутал?
01.08.2022 в 16:38 #4875Гусаров ДаниилХранительЗдравствуйте,
Не могу понять почему слетела привязка по оси Y, имеется такой узел, который я хочу связывать с профилем водоотвода №7 — 4й левый.
По моей логике значения X — «БР_ОП.X + 0.2500000» и Y — «ОП_ОСЬ.Y — ZS — 0.0400000 * (ОП_ОСЬ.X + 2.0500000 — БР_ОП.X — 0.2500000))» должны присваиваться смещению и отметке красного профиля №7 при его создании и скидываться в эти же значения если я нажимаю ПКМ и очистить в структуре проекта внутри выбранного подобъекта дороги, именно это я и получил при первом приближении, проверил — все работало. Потом добавил такой же узел с похожей конструкцией, но в другой цепочке условий, начал тестировать вторую цепочку, узел улетает на неопределенное пока что мной число, не равное нулю по оси Y, ось X сидит на месте как было задумано. Возвращаюсь в первую цепочку, повторяю действие, теперь тоже так же улетает отметка по оси Y.DrainX(design_context, 7, БР_ОП.X + 0.2500000)
DrainY(design_context, 7, ОП_ОСЬ.Y — ZS — 0.0400000 * (ОП_ОСЬ.X + 2.0500000 — БР_ОП.X — 0.2500000))
где ZS — доп переменнаяматематически отметка Y = 448,61-0,8-0,04*((-4,9)+2,05-(-8,50)-0,25)=447,59, а красный профиль создается на отметке 446,37, в общем весь участок с разными отметками получается, так и не смог понять что за отметка присваивается
Может я что то в семантике напутал?
Семантика тут не при чем. Направьте нам пример вашего проекта (либо модели и поверхности земли) на почту — посмотрим конкретный пример и подскажем.
26.08.2022 в 11:33 #4936Зеленский КонстантинУчастникСлушай, хотел узнать синтаксис этих команд DrainX и DrainY (в справочнике их нет). А то я с ними не разобрался и для привязки к водоотводу использую переменные LOFFSX1 и LOFFSY1 — CLY, как вы в свое время подсказали.
29.08.2022 в 17:04 #4940Гусаров ДаниилХранительСлушай, хотел узнать синтаксис этих команд DrainX и DrainY (в справочнике их нет). А то я с ними не разобрался и для привязки к водоотводу использую переменные LOFFSX1 и LOFFSY1 — CLY, как вы в свое время подсказали.
Расшифровка переменных Drain:
«DrainX(design_context, 1, 1.5)» — 1й левый профиль (X = 1.5)
«DrainY(design_context, 2, -5)» — 1й правый профиль (Y = -5)
* Профили считаются по порядку: 1-левый/1й-правый/2й-левый/2й-правый и т.д.Для привязки узла к профилю водоотвода можно либо выбрать узел, вызвать контекстное меню по ПКМ и выбрать Связать узел с профилем водоотвода. В этом случае узел примет отметку профиля, а смещение профиля будет определено по узлу, либо прописать нужную формулу напрямую в Геометрию узла.
01.09.2022 в 06:37 #4958АлексейУчастникDrainX/Y(design_context, номер профиля, базовое смещение)- смещение по X
design_context — что то на непонятном языке
номер профиля — это уже понятно
базовое смещение — это смещение по осям ординат от точки проектируемой оси пути, если не создан профиль водоотводаПолучается базовое смещение отвечает за положение Узла если не создан продольный профиль (1-левый/1й-правый/2й-левый/2й-правый…)
Если проводить параллель, то это будет конструкция водоотвода.
Отметка дна привязывается к отметке внутренней бровки, в случае если на этом участке профиль водоотвода не создан, то дно водоотвода будет отсчитывать отметку из глубины указанной в свойствах водоотвода (по умолчанию 0,6).
Также эта глубина служит основой при создании профиля водоотвода, по ней он и будет строиться.
Если профиль водоотвода удалить на данном участке или очистить, то он «скинется» к первоначальной базовой величине, которую мы и задалиДелая вывод DrainX/Y предназначена для назначения узлу координат с привязкой к профилю водоотвода.
Так что в качестве базового смещения можно указать какую то точку конструкции и указать дополнительное приращениеLOFFSX/Y — это уже функции которые считываю смещение профиля, но никак не назначают его, поэтому сначала профиль должен быть назначен функцией DrainX/Y или стандартными конструкциями (канава/кювет…) и создан водоотвод по поперечникам (или другим путем), тогда эта функция привяжется к смещению профиля, иначе будет в оси пути висеть (дельтаX/Y равна 0)
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.