2017年12月30日土曜日

クリップボードの中身を処理してみる

Blenderの位置や回転等のプロパティ等の数値はGUI上では小数点以下5桁まで表示されているものの
バージョン2.5x時代のように3桁までに丸め込みたいという話をされたので色々試してみた

一括変換なら楽なのだけれど、個別に値を調整したいらしいので
クリップボード中の数値を丸め込む方式で試作。
import bpy
class RoundingClipboard(bpy.types.Operator):
    bl_idname = "text.roundclip"
    bl_label = "round_data_on_clipboard"
    def execute(self, context):
        #bpy.ops.text.copy()
        #クリップボードデータの取得
        clipboard = context.window_manager.clipboard
        try:
            if isinstance(clipboard, float):
                rounded =  round( clipboard,3)
                context.window_manager.clipboard = rounded
                #bpy.ops.text.paste()
            else:
                rounded = str( round( float(clipboard), 3) )
                context.window_manager.clipboard = rounded
                print(rounded)
                #bpy.ops.text.paste()
        except:
            pass
        return {'FINISHED'}
def register():
    bpy.utils.register_module(__name__)

def unregister():
    bpy.utils.unregister_module(__name__)

if __name__ == "__main__":
    #unregister()
    register()

Blenderは数値をコピーしても文字列として内部で保持しているらしい
Phthonの文字列を数値に変換できるかはstr.isdigit()で調べれるということだけど
手元の環境ではfloat値の場合もFalseが返されてしまうので文字列チェックはなし。

本当はパネル上で動くようにオペレーターを割り当てたり
パネル上でのショートカットで動くようにしたかったけれど現状ではやり方が分からなくて現状では未完成だけれど
Blenderでクリップボードの中身を制御する例としてアップしておきます


0 件のコメント:

コメントを投稿