色々と検索したものの、ズバリな回答は無さそうな雰囲気
でしたが、色々とヒントは頂きました。
実際出力されるものは単なる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させた方が素直なのかな・・・。