2012-01-18 2 views

ответ

1

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

Здесь вы идете, надеюсь, что он будет делать то, что вы ожидали, что это:

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 

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

+0

Большое спасибо за помощь. Это именно то, что я искал, и теперь он работает! ;) Спасибо друг! –

Смежные вопросы