Как создать прерываемый цикл в mel

Есть ли способ сделать цикл, который можно прервать или отменить в MEL (Maya Embedded Language)?


person Sukhpal Vasdev    schedule 04.06.2012    source источник


Ответы (2)


Вы должны использовать индикатор выполнения. Пример прямо из мануала:

{
    global string $gMainProgressBar;  // This is defined on maya startup

    progressBar -edit
        -beginProgress
        -isInterruptable true
        -status "Example Calculation ..."
        -maxValue 5000
        $gMainProgressBar;

    int $i;
    for($i=0; $i < 5000; $i++) {
        if(`progressBar -query -isCancelled $gMainProgressBar`)
            break;

        progressBar -edit
            -step 1 $gMainProgressBar; 
    }

    progressBar -edit
        -endProgress
        $gMainProgressBar;
}

Maya теперь показывает прогресс и позволяет вам использовать esc для прерывания.

person joojaa    schedule 10.06.2012

Вы можете использовать инструкцию break. Например:

string $joints[] = {"joint1","joint2","joint3","joint4","joint5","joint6"};
for ($i = 0; $i < size($joints); $i++) {
    if ($i > 3){
        break;
    }
    print $joints[$i];
}

напечатает только первые 4 элемента: соединение1 соединение2 соединение3 соединение4

person cansadadeserfeliz    schedule 04.06.2012
comment
Цикл всегда легко разорвать с помощью условия. Я хочу выйти из цикла, как только цикл начнется. Это связано с тем, что цикл должен начинаться и заканчиваться с учетом всех элементов, в случае если в этом процессе пользователь хочет остановить цикл, он должен иметь возможность это сделать. Надеюсь, я смогу ясно изложить свою точку зрения. - person Sukhpal Vasdev; 06.06.2012