C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

ランダムなRGBを取得する

色々と検索したものの、ズバリな回答は無さそうな雰囲気
でしたが、色々とヒントは頂きました。

実際出力されるものは単なる3個の数値の組み合わせですが、
RGBに割り当てて色にする予定です。

# Fusion360API Python script

import traceback
import adsk.fusion
import adsk.core
import itertools
import random

def run(context):
    ui = adsk.core.UserInterface.cast(None)
    try:
        app: adsk.core.Application = adsk.core.Application.get()
        ui = app.userInterface

        # 各値ステップ5のRGBの全セット
        rgbSets = set(itertools.permutations(range(0, 256, 5), 3))
        print(f'Max-{len(rgbSets)}')

        # 重複無しで5個サンプリング
        sampleRGB = random.sample(rgbSets, 5)
        print(sampleRGB)

        # 全セットからサンプリング分を削除
        rgbSets = rgbSets.difference(set(sampleRGB))

    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

これではダメなのですが、実際には必要になるタイミングで
1個づつ抜き出す使い方にします。最大132600個まで
ですが、まぁFusion360のボディ数としては十分なはずですし、
132600個まではダブる色は出ないはずです。


random.sample使って選び出し、differenceで選び出した分を
減らしていますが、セットを止めリストに変更しrandom.shuffleで
かき回してからpopさせた方が素直なのかな・・・。