Определить отображен ли элемент

Главная Форумы Задать вопрос Определить отображен ли элемент

Просмотр 15 сообщений - с 1 по 15 (из 16 всего)
  • Автор
    Сообщения
  • #5156 Score: 0
    txt
    Модератор
    86 pts

    Доброго времени суток,

    Мой вопрос касается определения ориентации элемента. Не могу понять как работать с нодом, например getOrientation  и похожими…

    1.) Если мы вставляем окно в стену , то как определить ориентацию окна?

    2.) если окно вставлено и отображено , то возможно ли это определить (то есть меняется ли при отображении ориентации окна (или какой то другой параметр) или она остается той  же, что и в момент вставки в стену?

    3.) как определить ориентацию стены?

    #5162 Score: 1
    Legantmar
    Хранитель
    473 pts

    Заголовок темы выбрал не правильный, я сначала о другом подумал.

    Есть такие ноды, например стандартный FacingOrientation

    Были хорошие ноды в пакете Clockwork (но с последними версиями Dynamo плохо работают)

    Я их немного поправил и выложил скрипт здесь

    #5173 Score: 0
    txt
    Модератор
    86 pts

    Спасибо за ваш труд.

    Можно еще вопрос в продолжение данной темы… Не могу найти решение..

    Допустим в стене находятся три  окна – у одного положение Flip=False, у двух других Flip=True.

    Рядом с каждым таким окном стоят по одному радиатору.

    <span style=”text-decoration: underline;”>Задача</span>: те радиаторы у которых стоит  Flip=True необходимо повернуть на 180 градусов относительно центральной вертикальной оси Y окна (либо отобразить зеркально относительно центральной горизонтальной оси с удалением исходного объекта)

    исходное положение радиаторов относительно окон:требуемый поворот радиаторов относительно окно с FLIP=TRUE :

    #5174 Score: 0
    Legantmar
    Хранитель
    473 pts

    и в чем вопрос? ))
    как расставляются радиаторы? и как так получилось, что некоторые оказались на улице ?
    p.s. радиаторы же не в одном семействе с окнами я надеюсь..

    #5178 Score: 0
    txt
    Модератор
    86 pts

    Я использую нод ScatteringAndAlign из пакета PRORUBIM выделяю окно из линк-файла (за что тебе отдельное спасибо) и рядом с ним стоящий радиатор.  Затем запускаю нод и все радиаторы расставляются напротив окон (привязка идет к отметке низа окна по вертикали и середине окна по горизонтали – как я понял) .

    Однако если архитектор вставил окно , а затем отобразил его (FLIP) вовнутрь, то радиатор вставляется со стороны улицы (наружу от помещения), но если при первой вставке окна в стену вставить с верной ориентацией, то радиатор вставится корректно с внутренней стороны помещения (но так не всегда получается, рука дрогнула , пульс и дыхание тоже вносят свои поправки ;))

    Так что хочу те окна, которые вставились  со стороны улицы отобразить нодом вовнутрь помещения , где им , как правило, и место

    Все это исходит из одного места – в арх -файле скачут отметки полов в пределах одного уровня, от этого места и происходит почкование почти всех моих вопросов в темах (включая расстановку оборудования относительно пола линк-файла и прочих портящих настроение вещей)

    #5179 Score: 0
    Legantmar
    Хранитель
    473 pts

    хоти… я так и не увидел вопроса ))
    советы:
    – не используй чужие ноды, если не можешь их поправить.
    – сделай свой скрипт, который расставлял бы радиаторы возле окна, но со стороны помещения (независимо от Flip параметра окна) (положение можно определить по пересечению их bounding box’ов или еще как то)

    #5180 Score: 0
    kulkul
    Участник
    47 pts

    Hi,

    Here is another possible way to find element is inside or no.

    #5181 Score: 0
    txt
    Модератор
    86 pts

    надо же , кроме Legantmar , кто то еще отвечает на вопросы ))

    Спасибо kulkul

    Legantmar, попробую сформулировать вопрос так:

    Рассмотрим одно окно и один радиатор. Как получить точку вращения для радиатора относительно расположения центра окна ? Получается нужно найти и задать вектор Z (главная задача), проходящий через центр окна и повернуть вокруг этого вектора элемент окно (через нод set.rotation) – вот что не получается…

    #5182 Score: 0
    Legantmar
    Хранитель
    473 pts

    А обязательно поворачивать радиатор, да еще вместе с окном? ))

    Может можно просто сдвинуть радиатор (в зависимости от ориентации Flip  у окна +Y или -Y или +X или -X, см. пример выше) ?
    отдельно flip окна я выше показал.

    p.s. можно еще добавить проверку, находится ли радиатор в помещении

    #5183 Score: 0
    txt
    Модератор
    86 pts

    ну окно вращать не нужно, только радиатор вокруг него. Сдвинуть снаружи вовнутрь радиатор не нужно – радиатор встанет не той стороной к стене.

    хотя окно  можно сдвинуть и повернуть вокруг своей оси на 180

    #5184 Score: 2
    Legantmar
    Хранитель
    473 pts

    накидал скрипт (на базе того, что уже есть в download)

    а как радиатор “знает” о своем окне !?

    #5186 Score: 0
    txt
    Модератор
    86 pts

    а это хороший вопрос)

    как я заметил , список создаваемых радиаторов и список окон совпадает относительно расположения окна и стены. Спасибо, опробуем твою наработку…

    #5187 Score: 0
    txt
    Модератор
    86 pts

    Наконец-то!

    Все заработало.

    Legantmar, благодарствую!

    #6910 Score: 0
    Анатолий
    Участник
    37 pts

    Помогите пожалуйста правильно прописать код для поворота элементов: проблема возникает при делении dX на dY, при dY=0 соответственно возникает ошибка, которую попробовал избежать через try except, но что-то не так делаю, исключение функция выкидывает из списка и соответствующие углы поворота “плывут”.. Пробовал использовать ZeroDivisionError, но правильно прописать не вышло, ошибка null.`


    Прошу прощения, снова выход нашел(( как только написал..
    inn = IN[0]
    marka = IN[1]
    if not isinstance(inn, list):
    inn= [inn]
    Rt,x1,y1,z1,z2,xz=[],[],[],[],[],[]
    for i in inn:
    try:
    elemId = UnwrapElement(i).Id
    xyz = UnwrapElement(i).Location.Point*304.8 #центри розташування елементів
    pt1 = Point.ByCoordinates(xyz.X, xyz.Y,xyz.Z) #ставимо точки
    dX=UnwrapElement(i).FacingOrientation.X
    dY=UnwrapElement(i).FacingOrientation.Y
    try:
    rotation1 = math.degrees(math.atan(dX/dY))
    Rt.append(rotation)
    except:
    pass
    Rt.append(rotation1)
    except:
    pass
    OUT=marka,Rt

    #6912 Score: 0
    Legantmar
    Хранитель
    473 pts

    вроде все правильно написано, но добавь лучше условие проверки if dy != 0: (если dy неравен 0, тогда выполнять поворот), вместо try/except

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