タイトルと内容が違うのですが、こちらの続きです。
フィレットの元のエッジを探せ!!3 - C#ATIA
前回、"子" を見つけきれなかった原因を調査します。
その為、選択した要素のentityTokenをDumpするための
スクリプトを作成しました。
# Fusion360API Python script import traceback import adsk.cam import adsk.fusion import adsk.core _app: adsk.core.Application = None _ui: adsk.core.UserInterface = None _handlers = [] _selIpt: adsk.core.SelectionCommandInput = None _dumpIpt = adsk.core.BoolValueCommandInput = None _cmdInfo = { 'id': 'KANTOKU_EntityTokenDump', 'name': 'Entity TokenDump', 'tooltip': 'Entity TokenDump', } class MyCommandCreatedHandler(adsk.core.CommandCreatedEventHandler): def __init__(self): super().__init__() def notify(self, args: adsk.core.CommandCreatedEventArgs): try: global _handlers cmd: adsk.core.Command = adsk.core.Command.cast(args.command) cmd.isOKButtonVisible = False inputs: adsk.core.CommandInputs = cmd.commandInputs onDestroy = MyCommandDestroyHandler() cmd.destroy.add(onDestroy) _handlers.append(onDestroy) onPreSelect = MyPreSelectHandler() cmd.preSelect.add(onPreSelect) _handlers.append(onPreSelect) onInputChanged = MyInputChangedHandler() cmd.inputChanged.add(onInputChanged) _handlers.append(onInputChanged) global _selIpt _selIpt = inputs.addSelectionInput( 'selIptId', 'select', '' ) _selIpt.setSelectionLimits(0) global _dumpIpt _dumpIpt = inputs.addBoolValueInput( 'dumpIptId', 'Dump', False, '', False ) except: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc())) class MyInputChangedHandler(adsk.core.InputChangedEventHandler): def __init__(self): super().__init__() def notify(self, args: adsk.core.InputChangedEventArgs): global _dumpIpt if args.input != _dumpIpt: return global _selIpt tokens = ['** Dump entityToken **'] tokens.extend([_selIpt.selection(idx).entity.entityToken for idx in range(_selIpt.selectionCount)]) _app.log('\n\n'.join(tokens)) class MyPreSelectHandler(adsk.core.SelectionEventHandler): def __init__(self): super().__init__() def notify(self, args: adsk.core.SelectionEventArgs): entity = args.selection.entity if hasattr(entity, 'entityToken'): token = entity.entityToken else: token = '' global _selIpt _selIpt.commandPrompt = token class MyCommandDestroyHandler(adsk.core.CommandEventHandler): def __init__(self): super().__init__() def notify(self, args: adsk.core.CommandEventArgs): adsk.terminate() def run(context): try: global _app, _ui _app = adsk.core.Application.get() _ui = _app.userInterface global _cmdInfo cmdDef: adsk.core.CommandDefinition = _ui.commandDefinitions.itemById( _cmdInfo['id'] ) if not cmdDef: cmdDef = _ui.commandDefinitions.addButtonDefinition( _cmdInfo['id'], _cmdInfo['name'], _cmdInfo['tooltip'] ) global _handlers onCommandCreated = MyCommandCreatedHandler() cmdDef.commandCreated.add(onCommandCreated) _handlers.append(onCommandCreated) cmdDef.execute() adsk.autoTerminate(False) except: if _ui: _ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
もう、見てくれなんてどうでも良いです。
要素を選択して、"Dump" を押すとテキストコマンドウィンドウに
entityTokenを垂れ流します。
左は押し出してフィレット1を付けた状態で、
右はその後フィレット2を付けました。
左のオレンジ部はフィレット2によって消えるエッジです。
紫部はフィレット2によって長さが変更されるエッジです。
緑部はフィレット2には影響を受けないエッジです。
ここで、フィレット2を付ける前と付けた後の紫部のentityToken
を調べると・・・
/v4BAAAARlJLZXkAH4sIAAAAAAAA/21QOw7CMAxl4hzmAJGc2LRhYiozExuqAkkRG4LObJyME3ABxBW4Ac4HCaomkf3y/GwnRjCAsrV4nZGxgjRwZCp4Pbe+Xzaz2/2xvk7fF1EYoApc19W1NUH5LswVux0rZxeonNgKbc1eu6SVGpPBSv0QUjsGAkMWxLGwqXEME+rk01syQV+ChgrzQyAEfwjtOeyPp9B61ztowILS5RhYyRUjjKBwmyyhkWAEJgIsc6E4gWLH8+ivQJ4up0zOv/kAIATvVXcBAAA= /v4BAAAARlJLZXkAH4sIAAAAAAAA/3VQuw0CMQylYg4zQCTHDnehojpqKjp0CiSH6BBcTcdkTMACiBXYAOeDBCdIovjl+dmOHgIBytYSdUZkBWkwkangcV/7ft5MLtfb8jx+nkRBwBW4rqtrS0H5LkyVcRujnJ2hcnJXaGvjtUta6TEarDQPIY0zwEBsQYIRNg2OaUadYvpLJvhN8FBBHwRC8LvQHsN2fwitd72DBiwoXQ7BQp4YYQSFW2UJ/0hGQBFg8YWjAymaP3X81SC7a0pF9JleTJqPAncBAAA=
文字列の意味を調べても意味が無いので無視しますが、
変わっている事が確認出来ます。何故?面か?
フィレット2を付ける前後で青部のエッジを調べると
/v4BAAAARlJLZXkAH4sIAAAAAAAA/22NsQ3CMBBFqZjjM4Cl89lJTEUVaio6FBnsIDoEqemYjAlYALECG3B2IgER9sn/+/n7jsAg2VpU946dOA2bSInnYxO6RT273u6ry/R1lgTDlPBtW1WOowptLJT1W6u8m5PycpbkKhu0z1npMRmtPI+Qx1kYMJUQsULz4PRsSGeVKsZAjwF/AUIM+9ic4u5wjE3wnUcNB6WHYizlSskmM7B1HzEf9pPiZFLv/znz80Fyb9WnErlXAQAA /v4BAAAARlJLZXkAH4sIAAAAAAAA/22NsQ3CMBBFqZjjM4Cl89lJTEUVaio6FBnsIDoEqemYjAlYALECG3B2IgER9sn/+/n7jsAg2VpU946dOA2bSInnYxO6RT273u6ry/R1lgTDlPBtW1WOowptLJT1W6u8m5PycpbkKhu0z1npMRmtPI+Qx1kYMJUQsULz4PRsSGeVKsZAjwF/AUIM+9ic4u5wjE3wnUcNB6WHYizlSskmM7B1HzEf9pPiZFLv/znz80Fyb9WnErlXAQAA
細かく見比べていませんが、恐らく変わってません。
実はエッジがフィレット2の影響を受けていなくても、
エッジを所有している面の形状が変わった場合は、
面の境界となる全てのエッジのentityTokenも変更されるのでは?
と思ったのですが、青部が変更されないとなると
思惑が外れました。
”フィレット1のエッジを利用して、面取り1が作られている”
(=面取り1は、フィレット1の "子")と言う事を知る為には
どうすれば良いのだろうか? facesの面達の隣の面も含めて
entityTokenで管理・・・しても駄目だな。 困った。