Дать каждому объекту в сцене уникальный проводной цвет? - PullRequest
2 голосов
/ 18 января 2012

Известны ли какие-либо сценарии или код для этого?

Я видел несколько сценариев, которые дают случайные цвета, но мне нужно убедиться, что два объекта не имеют одинакового цвета проводов.1004 * Спасибо!=)

1 Ответ

1 голос
/ 20 января 2012

Я не знаю ничего, но написать не так сложно.

Вот, пожалуйста, надеюсь, что все будет так, как вы ожидали:

fn shuffle &arr =
(
    local temp, swapIndex, counter = arr.count + 1
    while counter > 1 do
    (
        swapIndex = random 1 (counter -= 1)
        temp = arr[counter]
        arr[counter] = arr[swapIndex]
        arr[swapIndex] = temp
    )
    OK
)

fn incrementCounters &r &g &b step =
(
    if (b += step) > 256 do
    (
        b = 1
        if (g += step) > 256 do
        (
            g = 1
            if (r += step) > 256 do r = 1
        )
    )
)

fn assignRandomWirecolor objs simple:true =
(
    local stepCount = objs.count^(double 1/3) + 1
    local step = 255./stepCount
    local redArr = #(0) + #{1..255}
    local greenArr = copy redArr #noMap
    local blueArr = copy redArr #noMap
    local r = local g = local b = 1

    if simple then
    (
        shuffle &redArr
        shuffle &greenArr
        shuffle &blueArr
    )
    else shuffle &sel -- slower with many objects

    for obj in objs do
    (
        obj.wirecolor = [redArr[int(r)], greenArr[int(g)], blueArr[int(b)]]
        incrementCounters &r &g &b step
    )
)


sel = selection as array
clearSelection()
assignRandomWirecolor sel --simple:false --> if simple is not so cool, try the other option
select sel

Конечно, все это также зависит от цели, для которой вы хотите его использовать, это всего лишь общий подход, и поэтому он может не подходить для этой конкретной задачи. Если это так, вы можете дать более подробную информацию, и я внесу некоторые коррективы.

...