Формулы при создании поперечников

Главная Форум Железные дороги, версия 5.0 Поперечные профили Формулы при создании поперечников

Просмотр 15 сообщений - с 1 по 15 (из 19 всего)
  • Автор
    Сообщения
  • #3613
    giprail
    Участник

    Здравствуйте! Помогите пожалуйста разобраться с некоторыми функциями, используемыми при построении поперечников.
    На «старом» форуме в теме по проектированию поперечников (здесь 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 и как он используется (синтаксис), что за знак == и когда необходимо использовать не один знак равенства, а два.

    #3615
    Гусаров Даниил
    Хранитель

    Здравствуйте,

    Элементы конструкции написаны на языке Python, поэтому сам синтаксис можно поискать в интернете. Если коротко, то iff это функция, которая сначала вычисляет все свои аргументы, а уже после выполняется сама и возвращает результат. Условное выражение if выполняет условие последовательно и является более универсальным (синтаксис ИСТИНА if УСЛОВИЕ else ЛОЖЬ)
    Значение None обозначает то, что конкретное значение отсутствует (например узел не смог построиться, потому что луч не нашел пересечение с землей).
    Знак == это оператор сравнения, с примерами можно ознакомиться тут: http://pythonicway.com/python-operators

    #4241
    Kolyamba
    Участник

    Здравствуйте!
    В Робур при позиционировании узлов на поперечном профиле, можно при использовании формул брать переменные с другого подобъекта (например высоту ВСП или толщину балласта), что очень удобно.
    А вот можно ли при применении стандартной конструкции: «Балласт однослойный» также использовать параметры с другого подобъекта ?

    #4243
    Гусаров Даниил
    Хранитель

    Здравствуйте,

    В Робур при позиционировании узлов на поперечном профиле, можно при использовании формул брать переменные с другого подобъекта (например высоту ВСП или толщину балласта), что очень удобно.
    А вот можно ли при применении стандартной конструкции: «Балласт однослойный» также использовать параметры с другого подобъекта ?

    Да это можно сделать. Перед написанием формулы задайте в поле Толщина,м любую величину с клавиатуры, примените её, а после воспользуйтесь Мастером формул.

    Вложения:
    Вы должны войти для просмотра вложений.
    #4246
    Kolyamba
    Участник

    Да это можно сделать. Перед написанием формулы задайте в поле Толщина,м любую величину с клавиатуры, примените её, а после воспользуйтесь Мастером формул.

    Здравствуйте.
    Спасибо,
    все получилось.
    Немножко мудреный алгоритм конечно ))))) — Я имею в виду что сначала надо задать произвольную толщину балласта отличную от 0,00 и только потом воспользоваться мастером формул.
    Сам я без Вашей подсказки до этого не дошел.

    #4249
    Kolyamba
    Участник

    Здравствуйте!

    Еще вопрос:
    можно ли скопировать часть дерева элементов конструкции и вставить их на другой поперечник ?

    вот как на скрине — выделено часть элементов.

    Вложения:
    Вы должны войти для просмотра вложений.
    #4253
    Гусаров Даниил
    Хранитель

    Еще вопрос:
    можно ли скопировать часть дерева элементов конструкции и вставить их на другой поперечник ?

    Если данные элементы строятся последовательно — привязаны друг к другу, то можно попробовать воспользоваться функцией в меню Поперечник-Утилиты-Сохранить конструкцию (в результате программа сохранит выделенные элементы в качестве отдельной конструкции). Далее, для вставки воспользуйтесь функцией в меню Поперечник-Утилиты-Импортировать конструкцию с точкой вставки.

    #4254
    Kolyamba
    Участник

    Здравствуйте!.
    Спасибо — все получилось.
    правда перед вставкой программа зачем то просит указать префикс (например А)
    который потом встает перед каждым элементом конструкции.
    (я так понимаю, что бы не было конфликта имен при вставке «чужеродной» конструкции
    Но это не критично и сильно прощает копирование отдельных конструктивных элементов.

    #4269

    Вопрос, вроде обещали группировку в элементах конструкции, она есть в новой версии? а то забыл посмотреть пока тестовая лицензия была.

    #4270
    Гусаров Даниил
    Хранитель

    Здравствуйте,

    Вопрос, вроде обещали группировку в элементах конструкции, она есть в новой версии? а то забыл посмотреть пока тестовая лицензия была.

    Да, такая возможно появилась. По данной ссылке можно посмотреть нововведения (пусть они рассмотрены на примере автодороги, но принципы работы одинаковы)
    Ролик

    #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, в общем весь участок с разными отметками получается, так и не смог понять что за отметка присваивается

    Может я что то в семантике напутал?

    #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, в общем весь участок с разными отметками получается, так и не смог понять что за отметка присваивается

    Может я что то в семантике напутал?

    Семантика тут не при чем. Направьте нам пример вашего проекта (либо модели и поверхности земли) на почту — посмотрим конкретный пример и подскажем.

    #4936

    Слушай, хотел узнать синтаксис этих команд DrainX и DrainY (в справочнике их нет). А то я с ними не разобрался и для привязки к водоотводу использую переменные LOFFSX1 и LOFFSY1 — CLY, как вы в свое время подсказали.

    #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й-правый и т.д.

    Для привязки узла к профилю водоотвода можно либо выбрать узел, вызвать контекстное меню по ПКМ и выбрать Связать узел с профилем водоотвода. В этом случае узел примет отметку профиля, а смещение профиля будет определено по узлу, либо прописать нужную формулу напрямую в Геометрию узла.

    #4958
    Алексей
    Участник

    DrainX/Y(design_context, номер профиля, базовое смещение)- смещение по X
    design_context — что то на непонятном языке
    номер профиля — это уже понятно
    базовое смещение — это смещение по осям ординат от точки проектируемой оси пути, если не создан профиль водоотвода

    Получается базовое смещение отвечает за положение Узла если не создан продольный профиль (1-левый/1й-правый/2й-левый/2й-правый…)

    Если проводить параллель, то это будет конструкция водоотвода.
    Отметка дна привязывается к отметке внутренней бровки, в случае если на этом участке профиль водоотвода не создан, то дно водоотвода будет отсчитывать отметку из глубины указанной в свойствах водоотвода (по умолчанию 0,6).
    Также эта глубина служит основой при создании профиля водоотвода, по ней он и будет строиться.
    Если профиль водоотвода удалить на данном участке или очистить, то он «скинется» к первоначальной базовой величине, которую мы и задали

    Делая вывод DrainX/Y предназначена для назначения узлу координат с привязкой к профилю водоотвода.
    Так что в качестве базового смещения можно указать какую то точку конструкции и указать дополнительное приращение

    LOFFSX/Y — это уже функции которые считываю смещение профиля, но никак не назначают его, поэтому сначала профиль должен быть назначен функцией DrainX/Y или стандартными конструкциями (канава/кювет…) и создан водоотвод по поперечникам (или другим путем), тогда эта функция привяжется к смещению профиля, иначе будет в оси пути висеть (дельтаX/Y равна 0)

Просмотр 15 сообщений - с 1 по 15 (из 19 всего)
  • Для ответа в этой теме необходимо авторизоваться.