中々納得出来る状態になりません。
よくよく考えたら、監視している曲線とユーザーパラメータとの
関係がはっきりすれば良いので、ドキュメントの属性に書き込むより、
ユーザーパラメータの属性に監視している曲線のentityTokenを
関連付ければ良い事に気が付きました・・・今更。
今までは、1曲線につき1属性を作っていたのですが、試した所
1属性に結構な量の曲線のentityTokenを突っ込んでも大丈夫だと
分かってきましたよ。
# Fusion360API Python script 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 # new doc doc: adsk.fusion.FusionDocument = app.documents.add( adsk.core.DocumentTypes.FusionDesignDocumentType ) # init UserParameter 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' ) # get data lst = [ root.entityToken, root.originConstructionPoint.entityToken, root.xYConstructionPlane.entityToken ] tokens = {str(idx): v for idx, v in enumerate(lst)} # UserParameter attribute prm.attributes.add( GROUPNAME, 'test', json.dumps(tokens) ) # dump 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
ほぼ作り直しになりますが、後から悩むより、今のタイミングで
大幅修正した方が正解のような気がしてます。