Определить отображен ли элемент
Главная › Форумы › Задать вопрос › Определить отображен ли элемент
- В этой теме 15 ответов, 4 участника, последнее обновление 6 лет, 11 месяцев назад сделано
Анатолий.
-
АвторСообщения
-
Доброго времени суток,
Мой вопрос касается определения ориентации элемента. Не могу понять как работать с нодом, например getOrientation и похожими…
1.) Если мы вставляем окно в стену , то как определить ориентацию окна?
2.) если окно вставлено и отображено , то возможно ли это определить (то есть меняется ли при отображении ориентации окна (или какой то другой параметр) или она остается той же, что и в момент вставки в стену?
3.) как определить ориентацию стены?
Заголовок темы выбрал не правильный, я сначала о другом подумал.
Есть такие ноды, например стандартный FacingOrientation
Были хорошие ноды в пакете Clockwork (но с последними версиями Dynamo плохо работают)
Я их немного поправил и выложил скрипт здесь
Спасибо за ваш труд.
Можно еще вопрос в продолжение данной темы… Не могу найти решение..
Допустим в стене находятся три окна – у одного положение Flip=False, у двух других Flip=True.
Рядом с каждым таким окном стоят по одному радиатору.
<span style=”text-decoration: underline;”>Задача</span>: те радиаторы у которых стоит Flip=True необходимо повернуть на 180 градусов относительно центральной вертикальной оси Y окна (либо отобразить зеркально относительно центральной горизонтальной оси с удалением исходного объекта)
исходное положение радиаторов относительно окон:
требуемый поворот радиаторов относительно окно с FLIP=TRUE :
и в чем вопрос? ))
как расставляются радиаторы? и как так получилось, что некоторые оказались на улице ?
p.s. радиаторы же не в одном семействе с окнами я надеюсь..Я использую нод ScatteringAndAlign из пакета PRORUBIM выделяю окно из линк-файла (за что тебе отдельное спасибо) и рядом с ним стоящий радиатор. Затем запускаю нод и все радиаторы расставляются напротив окон (привязка идет к отметке низа окна по вертикали и середине окна по горизонтали – как я понял) .
Однако если архитектор вставил окно , а затем отобразил его (FLIP) вовнутрь, то радиатор вставляется со стороны улицы (наружу от помещения), но если при первой вставке окна в стену вставить с верной ориентацией, то радиатор вставится корректно с внутренней стороны помещения (но так не всегда получается, рука дрогнула , пульс и дыхание тоже вносят свои поправки ;))
Так что хочу те окна, которые вставились со стороны улицы отобразить нодом вовнутрь помещения , где им , как правило, и место
Все это исходит из одного места – в арх -файле скачут отметки полов в пределах одного уровня, от этого места и происходит почкование почти всех моих вопросов в темах (включая расстановку оборудования относительно пола линк-файла и прочих портящих настроение вещей)
хоти… я так и не увидел вопроса ))
советы:
– не используй чужие ноды, если не можешь их поправить.
– сделай свой скрипт, который расставлял бы радиаторы возле окна, но со стороны помещения (независимо от Flip параметра окна) (положение можно определить по пересечению их bounding box’ов или еще как то)Hi,
Here is another possible way to find element is inside or no.
надо же , кроме Legantmar , кто то еще отвечает на вопросы ))
Спасибо kulkul
Legantmar, попробую сформулировать вопрос так:
Рассмотрим одно окно и один радиатор. Как получить точку вращения для радиатора относительно расположения центра окна ? Получается нужно найти и задать вектор Z (главная задача), проходящий через центр окна и повернуть вокруг этого вектора элемент окно (через нод set.rotation) – вот что не получается…
А обязательно поворачивать радиатор, да еще вместе с окном? ))
Может можно просто сдвинуть радиатор (в зависимости от ориентации Flip у окна +Y или -Y или +X или -X, см. пример выше) ?
отдельно flip окна я выше показал.p.s. можно еще добавить проверку, находится ли радиатор в помещении
ну окно вращать не нужно, только радиатор вокруг него. Сдвинуть снаружи вовнутрь радиатор не нужно – радиатор встанет не той стороной к стене.
хотя окно можно сдвинуть и повернуть вокруг своей оси на 180
а это хороший вопрос)
как я заметил , список создаваемых радиаторов и список окон совпадает относительно расположения окна и стены. Спасибо, опробуем твою наработку…
Наконец-то!
Все заработало.
Legantmar, благодарствую!
Помогите пожалуйста правильно прописать код для поворота элементов: проблема возникает при делении 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вроде все правильно написано, но добавь лучше условие проверки if dy != 0: (если dy неравен 0, тогда выполнять поворот), вместо try/except
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.