Render.ru

проверка топологии

Snusmumrik

Активный участник
Рейтинг
16
#1
Пожалуйста подскажите способ быстро отыскать все точки на модели в которые сходятся более 5 граней. Cleanap такой функции не имеет. Может есть скрипт. Вероятно проблемка пустяковая, но с ходу не нашел. Буду благодарен за подсказку.
 

Владимир Забелин

Активный участник
Рейтинг
17
#2
если с ходу. то точки. в которых сходятся больше 5 граней - это точки, из которых выходят больше 5 ребер. ребра хранятся в виде списка пар целых чисел -номеров точек, которые они соединяют. так что берем список ребер и считаем вершины. те вершины. номера которых встречаются больше 5 раз и есть те, что вам нужны
 

iNOD

Активный участник
Рейтинг
18
#3
Воть :

Код:
global proc strVtx(){
string $slctdMsh[] = ` ls -sl `;
string $slctdEdgs[];
string $lstStr[];
int $a = 0;

int $vtxCnt[] = ` polyEvaluate -v $slctdMsh[0] `;


for( $i = 0; $i < $vtxCnt[0]; $i++ ){
    clear( $slctdEdgs );
    select -r ( $slctdMsh[0] + ".vtx[" + $i + "]" );
    ConvertSelectionToEdges;
    $slctdEdgs = ` ls -sl `;
    if( size( $slctdEdgs ) == 5 ){
        $lstStr[$a] = ( $slctdMsh[0] + ".vtx[" + $i + "]" );
        $a++;
    }
    }
    select -r $lstStr;
}

strVtx;
 

Snusmumrik

Активный участник
Рейтинг
16
#5
не работает, но все равно спасибо. Понятно, что mel поможет, но ради такой задачки учить его как-то нерационально. Подожду пока созреет более существенная потребность. Может в других программах есть более широкий ассортимент инструментов проверки?
 

Lemieux

Знаток
Рейтинг
58
#6
Snusmumrik сказал(а):
не работает, но все равно спасибо. Понятно, что mel поможет, но ради такой задачки учить его как-то нерационально. Подожду пока созреет более существенная потребность. Может в других программах есть более широкий ассортимент инструментов проверки?
Ну я бы не был столь категоричен, что его нужно прямо изучать. Нужно понять принципы и пользоваться хелпом.
 

iNOD

Активный участник
Рейтинг
18
#7
Не знаю что у вас там не работает, я проверял и работало. Выделаете просто меш в режиме обжект и запускаете скрипт, скрипт нужно запускать с скрипт эдитора(можно так же создать батон на шелфе и вкинуть туда код), но это должен быть MEL а не Pyton!
 

Snusmumrik

Активный участник
Рейтинг
16
#8
Я извиняюсь, но правда не совсем работает. Выделяются только точки в которые сходятся 5 ( не больше не меньше )ребер и то не все почему-то.
 

Вложения

iNOD

Активный участник
Рейтинг
18
#9
заменить строчку:
Код:
if( size( $slctdEdgs ) == 5 ){
на:
Код:
if( size( $slctdEdgs ) >= 5 ){
 

Snusmumrik

Активный участник
Рейтинг
16
#10
Да я даже сам догадался поменять знак " = "на ">", только постеснялся сказать, поскольку это не дало принципиального различия. Все равно не все точки с 5 ребрами выделяются, с 7 ребрами тоже не выделяются, с 6 ребрами часть выделяется и принцип отбора непонятен.
 

iNOD

Активный участник
Рейтинг
18
#12
Ой сори действительно ошибся, проверял на равномерной топологии вот и не вылезла тогда ошибка.
Вместо:
Код:
$slctdEdgs = ` ls -sl `;
Нужно:
Код:
$slctdEdgs = ` ls -sl -fl `;
Но Monkibase уже показал еще один способ. Так что методов выполнить одну задачу существует несколько, и бывает и десятки, нужно лишь желание.
 

Snusmumrik

Активный участник
Рейтинг
16
#13
Большое Спасибо. Всё работает. хотя скрипт на полке удобнее, здорово, что есть и в инструментарии подходящие настройки.
 
Сверху