Очень часто бывает необходимо найти узел (нод) или часть модели. Ниже мы рассмотрим несколько методов, посвященных этому. Первая и наиболее часто используемая команда ls(): myNodePath.ls() Команда выводит список всех чайлдов указанного NodePath. Так же она показывает трансформации и эффекты рендеринга каждого чайлда. Два метода find() и findAllMatches() возвращают NodePath и NodePathCollection соответственно. Методы требуют строку в качестве аргумента. Поиск может базироваться на имени или типе. В простейшем случае эта строка содержит серию имён узлов, разделённых слешами — наподобие пути к файлу. При задании строки вместо имени любого узла могут быть использованы следующие специальные имена. * Соответствует одному узлу с любым именем ** Соответствует любой последовательности узлов, начиная с 0 +typename Соответствует любому узлу, производному от данного типа -typename Соответствует любому узлу, исключая узлы указанного типа =tag Соответствует любому узлу, помеченному тегом =tag=value Соответствует любому узлу, чей тег соответствует значению Стандартные условные символы, такие как *, ?, и [a-z] так же могут использоваться. @@ специальный символ перед именем узла, что данный конкретный узел спрятан. Обычно такие узлы не включаются в возвращаемое значение, соответственно для их поиска используется @@*. Аргумент может сопровождаться контрольными флагами. Для этого после аргумента ставится точка с запятой и указываются необходимые флаги -h Не возвращать невидимые узлы (невидимые и спрятанные узлы — это разные вещи) +h Возвращать невидимые узлы -s Не возвращать спрятанные узлы, если не указан префикс @@ +s Возвращать спрятанные узлы независимо от указания @@ -i Регистрозависимое сравнение имён узлов +i Сравнение имён узлов независимо от регистра символов. Этот флаг влияет только на имена узлов. Типы и теги узлов по прежнему будут регистрозависимы. По умолчанию флаги соответствуют +h-s-i. Метод find() возвращает единственный узел, соответствующий поисковой строке. Если соответствй несколько, то возвращается кратчайшее. Если ничего не найдено, то возвращается пустой NodePath. Другой вариант - findAllMatches() возвращает все найденные NodePath. myNodePath.find("") myNodePath.findAllMatches("") Несколько примеров: myNodePath.find("house/door") Ищет узел с именем "door", являющийся чайлдом узла "house", который в свою очередь является чайлдом myNodePath. myNodePath.find("**/red*") Ищет любой узел в дереве узлов, начиная от myNodePath с именем, начинающимся на "red". Дополнительно есть методы getParent() и getChildren(). getParent() возвращает NodePath родительского узла. getChildren() возвращает чайлды текущего узла как NodePathCollection ( если нужно получить их как список, то используйте getChildrenAsList()). getChildrenAsList пример for child in myNodePath.getChildrenAsList(): print child Ещё пример: #если мы хотим найти определённый узел, идя вверх по дереву узлов while myNodePath.getParent()!=someAncestor: myNodePath=myNodePath.getParent()
|