中々納得出来る状態になりません。
よくよく考えたら、監視している曲線とユーザーパラメータとの
関係がはっきりすれば良いので、ドキュメントの属性に書き込むより、
ユーザーパラメータの属性に監視している曲線のentityTokenを
関連付ければ良い事に気が付きました・・・今更。
今までは、1曲線につき1属性を作っていたのですが、試した所
1属性に結構な量の曲線のentityTokenを突っ込んでも大丈夫だと
分かってきましたよ。
import traceback
import adsk.fusion
import adsk.core
import json
GROUPNAME = 'kantoku'
def run(context):
ui: adsk.core.UserInterface = None
try:
app: adsk.core.Application = adsk.core.Application.get()
ui = app.userInterface
doc: adsk.fusion.FusionDocument = app.documents.add(
adsk.core.DocumentTypes.FusionDesignDocumentType
)
des: adsk.fusion.Design = app.activeProduct
root: adsk.fusion.Component = des.rootComponent
prm: adsk.fusion.UserParameter = des.userParameters.add(
'test',
adsk.core.ValueInput.createByReal(0),
des.unitsManager.defaultLengthUnits,
'hoge'
)
lst = [
root.entityToken,
root.originConstructionPoint.entityToken,
root.xYConstructionPlane.entityToken
]
tokens = {str(idx): v for idx, v in enumerate(lst)}
prm.attributes.add(
GROUPNAME,
'test',
json.dumps(tokens)
)
attr: adsk.core.Attribute
for groupName in prm.attributes.groupNames:
group = prm.attributes.itemsByGroup(groupName)
app.log(f'GroupName:{groupName}')
for attr in group:
app.log(f' Name:{attr.name} ValueSize:{len(attr.value.encode())}')
dict = json.loads(attr.value)
for key in dict.keys():
app.log(f' {key}:{dict[key]}')
except:
if ui:
ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
valueのサイズが2MBまでとなっていますが、全然余裕あります。
Fusion 360 Help
ほぼ作り直しになりますが、後から悩むより、今のタイミングで
大幅修正した方が正解のような気がしてます。