def __init__(self, frame: wx.Frame, parent: wx.Notebook, tab_idx: int): super().__init__(frame, parent, tab_idx) self.convert_csv_worker = None self.description_txt = wx.StaticText( self, wx.ID_ANY, "指定されたVMDファイルの解析結果を、ボーン/モーフ/カメラに分けてCSVファイルとして出力します。", wx.DefaultPosition, wx.DefaultSize, 0) self.sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.sizer.Add(self.static_line, 0, wx.EXPAND | wx.ALL, 5) # CSVファイルコントロール self.vmd_file_ctrl = BaseFilePickerCtrl(frame, self, u"VMDファイル", u"VMDファイルを開く", ("vmd"), wx.FLP_DEFAULT_STYLE, \ u"CSVに変換したいVMDのファイルパスを指定してください。", \ is_aster=False, is_save=False, set_no=0) self.sizer.Add(self.vmd_file_ctrl.sizer, 0, wx.EXPAND | wx.ALL, 0) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # CSV変換実行ボタン self.csv_btn_ctrl = wx.Button(self, wx.ID_ANY, u"CSV変換実行", wx.DefaultPosition, wx.Size(200, 50), 0) self.csv_btn_ctrl.SetToolTip(u"VMDをCSVに変換します。") self.csv_btn_ctrl.Bind(wx.EVT_BUTTON, self.on_convert_csv) btn_sizer.Add(self.csv_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, self.frame.logging_level, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.fit() # フレームに変換完了処理バインド self.frame.Bind(EVT_CSV_THREAD, self.on_convert_csv_result)
def __init__(self, frame: wx.Frame, parent: wx.Notebook, tab_idx: int, file_hitories: dict): super().__init__(frame, parent, tab_idx) self.file_hitories = file_hitories self.timer = None # ファイルセット self.file_set = SizingFileSet(frame, self, self.file_hitories, 1) self.sizer.Add(self.file_set.set_sizer, 0, wx.ALL, 0) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # 変換前チェックボタン self.check_btn_ctrl = wx.Button(self, wx.ID_ANY, u"変換前チェック", wx.DefaultPosition, wx.Size(200, 50), 0) self.check_btn_ctrl.SetToolTip(u"入力されたファイル情報で処理可能かどうか、チェックを行います。") self.check_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) self.check_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_check_click) btn_sizer.Add(self.check_btn_ctrl, 0, wx.ALL, 5) # 実行ボタン self.exec_btn_ctrl = wx.Button(self, wx.ID_ANY, u"VMDサイジング実行", wx.DefaultPosition, wx.Size(200, 50), 0) self.exec_btn_ctrl.SetToolTip(u"VMDサイジング処理を実行します。") self.exec_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) self.exec_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_exec_click) btn_sizer.Add(self.exec_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, -1), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.fit()
def __init__(self, frame: wx.Frame, multi_join: wx.Notebook, tab_idx: int): super().__init__(frame, multi_join, tab_idx) self.timer = wx.Timer(self, TIMER_ID) self.convert_multi_join_worker = None self.header_sizer = wx.BoxSizer(wx.VERTICAL) self.description_txt = wx.StaticText(self, wx.ID_ANY, u"モーションの指定ボーンの移動量XYZと回転量XYZを統合します。\n" \ + "統合するボーンは「ボーン指定」ボタンから定義できます。多段分割の設定エクスポートファイル流用可能です。" \ + "\n不要キー削除を行うと、キーが間引きされます。キー間がオリジナルから多少ずれ、やや時間がかかります。", wx.DefaultPosition, wx.DefaultSize, 0) self.header_sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line01 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.header_sizer.Add(self.static_line01, 0, wx.EXPAND | wx.ALL, 5) # 対象VMDファイルコントロール self.vmd_file_ctrl = HistoryFilePickerCtrl(self.frame, self, u"対象モーションVMD/VPD", u"対象モーションVMDファイルを開く", ("vmd", "vpd"), wx.FLP_DEFAULT_STYLE, \ u"調整したい対象モーションのVMDパスを指定してください。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=46, title_parts_ctrl=None, title_parts2_ctrl=None, file_histories_key="multi_join_vmd", is_change_output=True, \ is_aster=False, is_save=False, set_no=1) self.vmd_file_ctrl.file_ctrl.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_change_file) self.header_sizer.Add(self.vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) # 対象PMXファイルコントロール self.model_file_ctrl = HistoryFilePickerCtrl(self.frame, self, u"多段化済みモデルPMX", u"多段化済みモデルPMXファイルを開く", ("pmx"), wx.FLP_DEFAULT_STYLE, \ u"モーションを適用したい多段化済みモデルのPMXパスを指定してください。\n人体モデル以外にも適用可能です。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=49, title_parts_ctrl=None, title_parts2_ctrl=None, file_histories_key="multi_join_pmx", \ is_change_output=True, is_aster=False, is_save=False, set_no=1) self.model_file_ctrl.file_ctrl.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_change_file) self.header_sizer.Add(self.model_file_ctrl.sizer, 1, wx.EXPAND, 0) # 出力先VMDファイルコントロール self.output_vmd_file_ctrl = BaseFilePickerCtrl(frame, self, u"出力対象VMD", u"出力対象VMDファイルを開く", ("vmd"), wx.FLP_OVERWRITE_PROMPT | wx.FLP_SAVE | wx.FLP_USE_TEXTCTRL, \ u"調整結果の対象VMD出力パスを指定してください。\n対象VMDファイル名に基づいて自動生成されますが、任意のパスに変更することも可能です。", \ is_aster=False, is_save=True, set_no=1) self.header_sizer.Add(self.output_vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) self.sizer.Add(self.header_sizer, 0, wx.EXPAND | wx.ALL, 5) self.setting_sizer = wx.BoxSizer(wx.HORIZONTAL) # ボーン名指定 self.bone_target_txt_ctrl = wx.TextCtrl( self, wx.ID_ANY, "", wx.DefaultPosition, (450, 50), wx.HSCROLL | wx.VSCROLL | wx.TE_MULTILINE | wx.TE_READONLY) self.bone_target_txt_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.setting_sizer.Add(self.bone_target_txt_ctrl, 1, wx.EXPAND | wx.ALL, 5) self.bone_target_btn_ctrl = wx.Button(self, wx.ID_ANY, u"ボーン指定", wx.DefaultPosition, wx.DefaultSize, 0) self.bone_target_btn_ctrl.SetToolTip( u"モーションに登録されているボーンから、統合したいボーンを指定できます") self.bone_target_btn_ctrl.Bind(wx.EVT_BUTTON, self.on_click_bone_target) self.setting_sizer.Add(self.bone_target_btn_ctrl, 0, wx.ALIGN_BOTTOM | wx.ALL, 5) self.sizer.Add(self.setting_sizer, 0, wx.EXPAND | wx.ALL, 5) # 不要キー削除処理 self.flg_sizer = wx.BoxSizer(wx.VERTICAL) self.remove_unnecessary_flg_ctrl = wx.CheckBox(self, wx.ID_ANY, u"不要キー削除処理を追加実行する", wx.DefaultPosition, wx.DefaultSize, 0) self.remove_unnecessary_flg_ctrl.SetToolTip( u"チェックを入れると、不要キー削除処理を追加で実行します。キーが減る分、キー間が少しズレる事があります。") self.remove_unnecessary_flg_ctrl.Bind(wx.EVT_CHECKBOX, self.on_change_file) self.flg_sizer.Add(self.remove_unnecessary_flg_ctrl, 0, wx.ALL, 5) self.sizer.Add(self.flg_sizer, 0, wx.EXPAND | wx.ALL, 5) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # 実行ボタン self.multi_join_btn_ctrl = wx.Button(self, wx.ID_ANY, u"多段統合", wx.DefaultPosition, wx.Size(200, 50), 0) self.multi_join_btn_ctrl.SetToolTip(u"キーフレを多段用に統合したモーションを生成します") self.multi_join_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_convert_multi_join) self.multi_join_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) btn_sizer.Add(self.multi_join_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, self.frame.logging_level, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.Layout() self.fit() # ボーン選択用ダイアログ self.bone_dialog = TargetBoneDialog(self.frame, self, "←", "分割") # フレームに変換完了処理バインド self.frame.Bind(EVT_SMOOTH_THREAD, self.on_convert_multi_join_result)
def __init__(self, frame: wx.Frame, arm_ik2fk: wx.Notebook, tab_idx: int): super().__init__(frame, arm_ik2fk, tab_idx) self.convert_arm_ik2fk_worker = None self.header_sizer = wx.BoxSizer(wx.VERTICAL) self.description_txt = wx.StaticText(self, wx.ID_ANY, u"腕IKを腕FK(腕・ひじ・手首)に変換します" \ + "\n不要キー削除を行うと、キーが間引きされます。キー間がオリジナルから多少ずれ、またそれなりに時間がかかります。", wx.DefaultPosition, wx.DefaultSize, 0) self.header_sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line01 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.header_sizer.Add(self.static_line01, 0, wx.EXPAND | wx.ALL, 5) # 対象VMDファイルコントロール self.arm_ik2fk_vmd_file_ctrl = HistoryFilePickerCtrl(self.frame, self, u"対象モーションVMD/VPD", u"対象モーションVMDファイルを開く", ("vmd", "vpd"), wx.FLP_DEFAULT_STYLE, \ u"調整したい対象モーションのVMDパスを指定してください。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=46, title_parts_ctrl=None, title_parts2_ctrl=None, file_histories_key="arm_ik2fk_vmd", is_change_output=True, \ is_aster=False, is_save=False, set_no=1) self.header_sizer.Add(self.arm_ik2fk_vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) # 対象PMXファイルコントロール self.arm_ik2fk_model_file_ctrl = HistoryFilePickerCtrl(self.frame, self, u"適用モデルPMX", u"適用モデルPMXファイルを開く", ("pmx"), wx.FLP_DEFAULT_STYLE, \ u"モーションを適用したいモデルのPMXパスを指定してください。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=60, title_parts_ctrl=None, title_parts2_ctrl=None, file_histories_key="arm_ik2fk_pmx", \ is_change_output=True, is_aster=False, is_save=False, set_no=1) self.header_sizer.Add(self.arm_ik2fk_model_file_ctrl.sizer, 1, wx.EXPAND, 0) # 出力先VMDファイルコントロール self.output_arm_ik2fk_vmd_file_ctrl = BaseFilePickerCtrl(frame, self, u"出力対象VMD", u"出力対象VMDファイルを開く", ("vmd"), wx.FLP_OVERWRITE_PROMPT | wx.FLP_SAVE | wx.FLP_USE_TEXTCTRL, \ u"調整結果の対象VMD出力パスを指定してください。\n対象VMDファイル名に基づいて自動生成されますが、任意のパスに変更することも可能です。", \ is_aster=False, is_save=True, set_no=1) self.header_sizer.Add(self.output_arm_ik2fk_vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) # 不要キー削除処理 self.remove_unnecessary_flg_ctrl = wx.CheckBox(self, wx.ID_ANY, u"不要キー削除処理を追加実行する", wx.DefaultPosition, wx.DefaultSize, 0) self.remove_unnecessary_flg_ctrl.SetToolTip( u"チェックを入れると、不要キー削除処理を追加で実行します。キーが減る分、キー間が少しズレる事があります。") self.header_sizer.Add(self.remove_unnecessary_flg_ctrl, 0, wx.ALL, 5) self.sizer.Add(self.header_sizer, 0, wx.EXPAND | wx.ALL, 5) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # 多段分割変換実行ボタン self.arm_ik2fk_btn_ctrl = wx.Button(self, wx.ID_ANY, u"腕IK変換", wx.DefaultPosition, wx.Size(200, 50), 0) self.arm_ik2fk_btn_ctrl.SetToolTip(u"足FKを足IKに変換したモーションを再生成します。") self.arm_ik2fk_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_convert_arm_ik2fk) self.arm_ik2fk_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) btn_sizer.Add(self.arm_ik2fk_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, self.frame.logging_level, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.Layout() self.fit() # フレームに変換完了処理バインド self.frame.Bind(EVT_SMOOTH_THREAD, self.on_convert_arm_ik2fk_result)
def __init__(self, frame: wx.Frame, parent: wx.Notebook, tab_idx: int): super().__init__(frame, parent, tab_idx) self.convert_smooth_worker = None self.header_sizer = wx.BoxSizer(wx.VERTICAL) self.description_txt = wx.StaticText(self, wx.ID_ANY, u"指定されたVMDファイルに対して、キーを分割し、滑らかな補間曲線で繋いで、再出力します。\n" \ + "スムージング回数1回で、全打ちとなり、2回目以降はフィルタリングした後に補間曲線で繋ぎます。", wx.DefaultPosition, wx.DefaultSize, 0) self.header_sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line01 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.header_sizer.Add(self.static_line01, 0, wx.EXPAND | wx.ALL, 5) # 対象VMDファイルコントロール self.smooth_vmd_file_ctrl = HistoryFilePickerCtrl(self.frame, self, u"対象モーションVMD", u"対象モーションVMDファイルを開く", ("vmd"), wx.FLP_DEFAULT_STYLE, \ u"調整したい対象モーションのVMDパスを指定してください。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=0, title_parts_ctrl=None, title_parts2_ctrl=None, file_histories_key="smooth_vmd", is_change_output=True, \ is_aster=False, is_save=False, set_no=1) self.header_sizer.Add(self.smooth_vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) # 対象PMXファイルコントロール self.smooth_model_file_ctrl = HistoryFilePickerCtrl(self.frame, self, u"適用モデルPMX", u"適用モデルPMXファイルを開く", ("pmx"), wx.FLP_DEFAULT_STYLE, \ u"モーションを適用したいモデルのPMXパスを指定してください。\n人体モデル以外にも適用可能です。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=0, title_parts_ctrl=None, title_parts2_ctrl=None, file_histories_key="smooth_pmx", \ is_change_output=True, is_aster=False, is_save=False, set_no=1) self.header_sizer.Add(self.smooth_model_file_ctrl.sizer, 1, wx.EXPAND, 0) # 出力先VMDファイルコントロール self.output_smooth_vmd_file_ctrl = BaseFilePickerCtrl(frame, self, u"出力対象VMD", u"出力対象VMDファイルを開く", ("vmd"), wx.FLP_OVERWRITE_PROMPT | wx.FLP_SAVE | wx.FLP_USE_TEXTCTRL, \ u"調整結果の対象VMD出力パスを指定してください。\n対象VMDファイル名に基づいて自動生成されますが、任意のパスに変更することも可能です。", \ is_aster=False, is_save=True, set_no=1) self.header_sizer.Add(self.output_smooth_vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) self.sizer.Add(self.header_sizer, 0, wx.EXPAND | wx.ALL, 5) self.setting_sizer = wx.BoxSizer(wx.HORIZONTAL) # 処理回数 self.loop_cnt_txt = wx.StaticText(self, wx.ID_ANY, u"処理回数", wx.DefaultPosition, wx.DefaultSize, 0) self.setting_sizer.Add(self.loop_cnt_txt, 0, wx.ALL, 5) self.loop_cnt_ctrl = wx.SpinCtrl(self, id=wx.ID_ANY, size=wx.Size(60, -1), value="2", min=1, max=99999999, initial=2) self.loop_cnt_ctrl.SetToolTip( u"スムージングを行う回数を指定してください。\n1回だと全打ちになります。\n2回目以降はフィルタをかけた上で間引きします。\n回数が増えると、変化が遅く、弱くなります。" ) self.loop_cnt_ctrl.Bind(wx.EVT_SPINCTRL, self.on_change_file) self.setting_sizer.Add(self.loop_cnt_ctrl, 0, wx.ALL, 5) # 補間 self.interpolation_txt = wx.StaticText(self, wx.ID_ANY, u"補間方法", wx.DefaultPosition, wx.DefaultSize, 0) self.setting_sizer.Add(self.interpolation_txt, 0, wx.ALL, 5) self.interpolation_ctrl = wx.Choice( self, id=wx.ID_ANY, choices=["補間曲線に従う", "補間曲線無視(円形)", "補間曲線無視(曲線)"]) self.interpolation_ctrl.SetSelection(0) self.interpolation_ctrl.SetToolTip(u"キーとキーの補間方法を指定してください。\n「補間曲線に従う」は、補間曲線に従って繋ぎます。" \ + "\n「補間曲線無視(円形)」は、補間曲線を無視して、\n3つのキーを円周上に置いた円になるように補間します。" \ + "\n「補間曲線無視(曲線)」は、補間曲線を無視して、\nキーを滑らかな曲線(カトマル曲線)で繋いで補間します。") self.interpolation_ctrl.Bind(wx.EVT_CHOICE, self.on_change_file) self.setting_sizer.Add(self.interpolation_ctrl, 0, wx.ALL, 5) self.sizer.Add(self.setting_sizer, 0, wx.EXPAND | wx.ALL, 5) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # スムージング変換実行ボタン self.smooth_btn_ctrl = wx.Button(self, wx.ID_ANY, u"スムージング実行", wx.DefaultPosition, wx.Size(200, 50), 0) self.smooth_btn_ctrl.SetToolTip(u"VMDを滑らかに繋いだモーションを再生成します。") self.smooth_btn_ctrl.Bind(wx.EVT_BUTTON, self.on_convert_smooth) btn_sizer.Add(self.smooth_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.Layout() self.fit() # フレームに変換完了処理バインド self.frame.Bind(EVT_SMOOTH_THREAD, self.on_convert_smooth_result)
def __init__(self, frame: wx.Frame, parent: wx.Notebook, tab_idx: int, file_hitories: dict): super().__init__(frame, parent, tab_idx) self.file_hitories = file_hitories self.timer = None self.tree_process_dict = {} # ファイルセット self.file_set = SizingFileSet(frame, self, self.file_hitories, 1) self.sizer.Add(self.file_set.set_sizer, 0, wx.ALL, 0) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # 変換前チェックボタン self.check_btn_ctrl = wx.Button(self, wx.ID_ANY, u"変換前チェック", wx.DefaultPosition, wx.Size(200, 50), 0) self.check_btn_ctrl.SetToolTip(u"入力されたファイル情報で処理可能かどうか、チェックを行います。") self.check_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) self.check_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_check_click) btn_sizer.Add(self.check_btn_ctrl, 0, wx.ALL, 5) # 実行ボタン self.exec_btn_ctrl = wx.Button(self, wx.ID_ANY, u"VMDサイジング実行", wx.DefaultPosition, wx.Size(200, 50), 0) self.exec_btn_ctrl.SetToolTip(u"VMDサイジング処理を実行します。") self.exec_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) self.exec_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_exec_click) btn_sizer.Add(self.exec_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, self.frame.logging_level, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, -1), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) status_sizer = wx.BoxSizer(wx.HORIZONTAL) # 進捗ダイアログ self.process_dialog = None # 進捗ステータス self.before_bracket_ctrl = wx.TextCtrl( self, wx.ID_ANY, "(", wx.DefaultPosition, wx.Size(5, -1), wx.TE_READONLY | wx.BORDER_NONE | wx.WANTS_CHARS) self.before_bracket_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) status_sizer.Add(self.before_bracket_ctrl, 0, wx.ALIGN_LEFT, 5) self.now_process_ctrl = StatusCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(20, -1), wx.TE_READONLY | wx.BORDER_NONE | wx.WANTS_CHARS) self.now_process_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.now_process_ctrl.SetToolTip( u"現在進んでいるの大まかな処理数です。クリックすると、具体的な処理進捗がダイアログで表示されます。") self.now_process_ctrl.Bind(wx.EVT_LEFT_DOWN, self.show_process_dialog) status_sizer.Add(self.now_process_ctrl, 0, wx.ALIGN_LEFT, 5) self.slash_ctrl = wx.TextCtrl( self, wx.ID_ANY, "/", wx.DefaultPosition, wx.Size(5, -1), wx.TE_READONLY | wx.BORDER_NONE | wx.WANTS_CHARS) self.slash_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) status_sizer.Add(self.slash_ctrl, 0, wx.ALIGN_LEFT, 5) self.total_process_ctrl = StatusCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(20, -1), wx.TE_READONLY | wx.BORDER_NONE | wx.WANTS_CHARS) self.total_process_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.total_process_ctrl.SetToolTip( u"全体の大まかな処理数です。クリックすると、具体的な処理進捗がダイアログで表示されます。") self.total_process_ctrl.Bind(wx.EVT_LEFT_DOWN, self.show_process_dialog) status_sizer.Add(self.total_process_ctrl, 0, wx.ALIGN_LEFT, 5) self.after_bracket_ctrl = wx.TextCtrl( self, wx.ID_ANY, ")", wx.DefaultPosition, wx.Size(5, -1), wx.TE_READONLY | wx.BORDER_NONE | wx.WANTS_CHARS) self.after_bracket_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) status_sizer.Add(self.after_bracket_ctrl, 0, wx.ALIGN_LEFT, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.Size(550, -1), wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) status_sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.sizer.Add(status_sizer, 0, wx.ALL, 0) self.fit()
def __init__(self, frame: wx.Frame, parent: wx.Notebook, tab_idx: int): super().__init__(frame, parent, tab_idx) self.description_txt = wx.StaticText(self, wx.ID_ANY, "設定を一括で指定して、連続して処理させる事ができます。", wx.DefaultPosition, wx.DefaultSize, 0) self.sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.sizer.Add(self.static_line, 0, wx.EXPAND | wx.ALL, 5) # バルクBULKファイルコントロール self.bulk_csv_file_ctrl = HistoryFilePickerCtrl(frame, self, u"一括処理用CSV", u"一括処理用CSVファイルを開く", ("csv"), wx.FLP_DEFAULT_STYLE, \ u"一括処理用のCSVを指定してください。\nフォーマットは、DLボタンから取得できます。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=0, title_parts_ctrl=None, title_parts2_ctrl=None, \ file_histories_key="bulk_csv", is_change_output=False, is_aster=False, is_save=False, set_no=0) self.sizer.Add(self.bulk_csv_file_ctrl.sizer, 0, wx.EXPAND | wx.ALL, 0) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # 一括サイジング確認ボタン self.check_btn_ctrl = wx.Button(self, wx.ID_ANY, u"一括サイジング確認", wx.DefaultPosition, wx.Size(200, 50), 0) self.check_btn_ctrl.SetToolTip(u"指定されたCSVデータの設定を確認します。") self.check_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) self.check_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_check_click) btn_sizer.Add(self.check_btn_ctrl, 0, wx.ALL, 5) # 一括サイジング実行ボタン self.bulk_btn_ctrl = wx.Button(self, wx.ID_ANY, u"一括サイジング実行", wx.DefaultPosition, wx.Size(200, 50), 0) self.bulk_btn_ctrl.SetToolTip(u"一括でサイジングを実行します") self.bulk_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) self.bulk_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_bulk_click) btn_sizer.Add(self.bulk_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, self.frame.logging_level, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.fit() # 変換完了処理バインド self.frame.Bind(EVT_BULK_LOAD_THREAD, self.on_load_result) self.frame.Bind(EVT_BULK_SIZING_THREAD, self.on_exec_result)
def __init__(self, frame: wx.Frame, parent: wx.Notebook, tab_idx: int): super().__init__(frame, parent, tab_idx) self.blend_worker = None self.description_txt = wx.StaticText(self, wx.ID_ANY, "指定されたPMXファイルのモーフをランダムに変化させた結果を、VMDファイルとして出力します。\n" \ + "モーフの組み合わせが多くなると破綻する確率が高くなりますので、その状態での一般公開は避けてください。", wx.DefaultPosition, wx.DefaultSize, 0) self.sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.sizer.Add(self.static_line, 0, wx.EXPAND | wx.ALL, 5) # PMXファイルコントロール self.pmx_file_ctrl = LoadFilePickerCtrl(frame, self, u"PMXファイル", u"PMXファイルを開く", ("pmx"), wx.FLP_DEFAULT_STYLE, \ u"モーフをブレンドさせたいPMXのパスを指定してください。\nD&Dでの指定、開くボタンからの指定ができます。\nパスを指定すると下部欄にモーフリストが表示されます。", \ is_aster=False, is_save=False, set_no=0) self.pmx_file_ctrl.file_ctrl.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_change_file) self.sizer.Add(self.pmx_file_ctrl.sizer, 0, wx.EXPAND, 0) # モーフ選択欄 --------- self.morph_sizer = wx.BoxSizer(wx.HORIZONTAL) MORPH_TOOLTIP = "ブレンド対象となるモーフを選択して下さい。" self.morph_eye_txt = wx.StaticText(self, wx.ID_ANY, "目") self.morph_eye_txt.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_eye_txt, 0, wx.EXPAND | wx.ALL, 5) self.morph_eye_list = wx.ListBox(self, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(110, 100), choices=[], style=wx.LB_MULTIPLE | wx.LB_ALWAYS_SB) self.morph_eye_list.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_eye_list, 0, wx.ALL, 5) self.morph_eyebrow_txt = wx.StaticText(self, wx.ID_ANY, "眉") self.morph_eyebrow_txt.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_eyebrow_txt, 0, wx.EXPAND | wx.ALL, 5) self.morph_eyebrow_list = wx.ListBox(self, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(110, 100), choices=[], style=wx.LB_MULTIPLE | wx.LB_ALWAYS_SB) self.morph_eyebrow_list.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_eyebrow_list, 0, wx.ALL, 5) self.morph_lip_txt = wx.StaticText(self, wx.ID_ANY, "口") self.morph_lip_txt.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_lip_txt, 0, wx.EXPAND | wx.ALL, 5) self.morph_lip_list = wx.ListBox(self, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(110, 100), choices=[], style=wx.LB_MULTIPLE | wx.LB_ALWAYS_SB) self.morph_lip_list.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_lip_list, 0, wx.ALL, 5) self.morph_other_txt = wx.StaticText(self, wx.ID_ANY, "他") self.morph_other_txt.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_other_txt, 0, wx.EXPAND | wx.ALL, 5) self.morph_other_list = wx.ListBox(self, id=wx.ID_ANY, pos=wx.DefaultPosition, size=(110, 100), choices=[], style=wx.LB_MULTIPLE | wx.LB_ALWAYS_SB) self.morph_other_list.SetToolTip(MORPH_TOOLTIP) self.morph_sizer.Add(self.morph_other_list, 0, wx.ALL, 5) self.sizer.Add(self.morph_sizer, 0, wx.EXPAND | wx.ALL, 0) # モーフ増減値 --------- self.value_sizer = wx.BoxSizer(wx.HORIZONTAL) # モーフ最小値 self.morph_value_min_txt = wx.StaticText(self, wx.ID_ANY, u"最小値", wx.DefaultPosition, wx.DefaultSize, 0) self.morph_value_min_txt.SetToolTip(u"モーフ増減の最小値です。-10から10の間で設定できます。(小数点可)") self.value_sizer.Add(self.morph_value_min_txt, 0, wx.EXPAND | wx.ALL, 5) self.morph_spin_min = wx.SpinCtrlDouble(self, id=wx.ID_ANY, size=wx.Size(80, -1), min=-10, max=10, initial=0.0, inc=0.1) self.morph_spin_min.SetToolTip(u"モーフ増減の最小値です。-10から10の間で設定できます。(小数点可)") self.morph_spin_min.Bind(wx.EVT_MOUSEWHEEL, lambda event: self.frame.on_wheel_spin_ctrl(event, 0.1)) self.value_sizer.Add(self.morph_spin_min, 0, wx.ALL, 5) # モーフ最大値 self.morph_value_max_txt = wx.StaticText(self, wx.ID_ANY, u"最大値", wx.DefaultPosition, wx.DefaultSize, 0) self.morph_value_max_txt.SetToolTip(u"モーフ増減の最大値です。-10から10の間で設定できます。(小数点可)") self.value_sizer.Add(self.morph_value_max_txt, 0, wx.EXPAND | wx.ALL, 5) self.morph_spin_max = wx.SpinCtrlDouble(self, id=wx.ID_ANY, size=wx.Size(80, -1), min=-10, max=10, initial=0.6, inc=0.1) self.morph_spin_max.SetToolTip(u"モーフ増減の最大値です。-10から10の間で設定できます。(小数点可)") self.morph_spin_max.Bind(wx.EVT_MOUSEWHEEL, lambda event: self.frame.on_wheel_spin_ctrl(event, 0.1)) self.value_sizer.Add(self.morph_spin_max, 0, wx.ALL, 5) # モーフ増加値 self.morph_value_inc_txt = wx.StaticText(self, wx.ID_ANY, u"増加値", wx.DefaultPosition, wx.DefaultSize, 0) self.morph_value_inc_txt.SetToolTip(u"モーフ増減の増加量です。この増加量分ごとにモーフ組み合わせを生成していきます。0から1の間で設定できます。(小数点可)") self.morph_value_inc_txt.Wrap(-1) self.value_sizer.Add(self.morph_value_inc_txt, 0, wx.EXPAND | wx.ALL, 5) self.morph_spin_inc = wx.SpinCtrlDouble(self, id=wx.ID_ANY, size=wx.Size(80, -1), min=0.01, max=1, initial=0.1, inc=0.05) self.morph_spin_inc.SetToolTip(u"モーフ増減の増加量です。この増加量分ごとにモーフ組み合わせを生成していきます。0から1の間で設定できます。(小数点可)") self.morph_spin_inc.Bind(wx.EVT_MOUSEWHEEL, lambda event: self.frame.on_wheel_spin_ctrl(event, 0.05)) self.value_sizer.Add(self.morph_spin_inc, 0, wx.ALL, 5) self.sizer.Add(self.value_sizer, 0, wx.EXPAND | wx.ALL, 0) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # モーフブレンド実行ボタン self.blend_btn_ctrl = wx.Button(self, wx.ID_ANY, u"モーフブレンド実行", wx.DefaultPosition, wx.Size(200, 50), 0) self.blend_btn_ctrl.SetToolTip(u"モーフをブレンドしたVMDを生成します。") self.blend_btn_ctrl.Bind(wx.EVT_BUTTON, self.on_convert_blend) btn_sizer.Add(self.blend_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour(wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind(wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.fit() # フレームに変換完了処理バインド self.frame.Bind(EVT_CSV_THREAD, self.on_convert_blend_result)
def __init__(self, frame: wx.Frame, parent: wx.Notebook, tab_idx: int): super().__init__(frame, parent, tab_idx) self.convert_vmd_worker = None self.description_txt = wx.StaticText(self, wx.ID_ANY, "指定されたCSVファイル(ボーン+モーフ or カメラ)を、VMDファイルとして出力します。\n" \ + "モデルモーション(ボーン・モーフ)とカメラモーション(カメラ)は別々に出力できます。\n" \ + "CSVのフォーマットは、CSVタブで出力したデータと同じものを定義してください。", wx.DefaultPosition, wx.DefaultSize, 0) self.sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.sizer.Add(self.static_line, 0, wx.EXPAND | wx.ALL, 5) # CSVファイルコントロール(ボーン) self.bone_csv_file_ctrl = BaseFilePickerCtrl(frame, self, u"CSVファイル(ボーン)", u"CSVファイルを選択してください", ("csv"), wx.FLP_DEFAULT_STYLE, \ u"VMDに変換したいボーンモーションのファイルパスを指定してください。", \ is_aster=False, is_save=False, set_no=0, required=False) self.sizer.Add(self.bone_csv_file_ctrl.sizer, 0, wx.EXPAND | wx.ALL, 0) # CSVファイルコントロール(モーフ) self.morph_csv_file_ctrl = BaseFilePickerCtrl(frame, self, u"CSVファイル(モーフ)", u"CSVファイルを選択してください", ("csv"), wx.FLP_DEFAULT_STYLE, \ u"VMDに変換したいモーフモーションのファイルパスを指定してください。", \ is_aster=False, is_save=False, set_no=0, required=False) self.sizer.Add(self.morph_csv_file_ctrl.sizer, 0, wx.EXPAND | wx.ALL, 0) self.static_line2 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.sizer.Add(self.static_line2, 0, wx.EXPAND | wx.ALL, 5) # CSVファイルコントロール(カメラ) self.camera_csv_file_ctrl = BaseFilePickerCtrl(frame, self, u"CSVファイル(カメラ)", u"CSVファイルを選択してください", ("csv"), wx.FLP_DEFAULT_STYLE, \ u"VMDに変換したいカメラモーションのファイルパスを指定してください。", \ is_aster=False, is_save=False, set_no=0, required=False) self.sizer.Add(self.camera_csv_file_ctrl.sizer, 0, wx.EXPAND | wx.ALL, 0) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # VMD変換実行ボタン self.vmd_btn_ctrl = wx.Button(self, wx.ID_ANY, u"VMD変換実行", wx.DefaultPosition, wx.Size(200, 50), 0) self.vmd_btn_ctrl.SetToolTip(u"CSVをVMDに変換します。") self.vmd_btn_ctrl.Bind(wx.EVT_BUTTON, self.on_convert_vmd) btn_sizer.Add(self.vmd_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, self.frame.logging_level, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.fit() # フレームに変換完了処理バインド self.frame.Bind(EVT_VMD_THREAD, self.on_convert_vmd_result)
def __init__(self, frame: wx.Frame, noise: wx.Notebook, tab_idx: int): super().__init__(frame, noise, tab_idx) self.timer = wx.Timer(self, TIMER_ID) self.convert_noise_worker = None self.header_sizer = wx.BoxSizer(wx.VERTICAL) self.description_txt = wx.StaticText(self, wx.ID_ANY, u"モーションをゆらぎ(ノイズ)を付与して複製します。\n" \ + "出力ファイル名のNxxは指定ゆらぎの大きさ、nxxxは複製連番、axxはやる気係数(身体の振りの大きさ)です。", wx.DefaultPosition, wx.DefaultSize, 0) self.header_sizer.Add(self.description_txt, 0, wx.ALL, 5) self.static_line01 = wx.StaticLine(self, wx.ID_ANY, wx.DefaultPosition, wx.DefaultSize, wx.LI_HORIZONTAL) self.header_sizer.Add(self.static_line01, 0, wx.EXPAND | wx.ALL, 5) # 対象VMDファイルコントロール self.noise_vmd_file_ctrl = HistoryFilePickerCtrl(self.frame, self, u"対象モーションVMD/VPD", u"対象モーションVMD/VPDファイルを開く", ("vmd", "vpd"), wx.FLP_DEFAULT_STYLE, \ u"調整したい対象モーションのVMDパスを指定してください。\nD&Dでの指定、開くボタンからの指定、履歴からの選択ができます。", \ file_model_spacer=46, title_parts_ctrl=None, title_parts2_ctrl=None, file_histories_key="noise_vmd", is_change_output=True, \ is_aster=False, is_save=False, set_no=1) self.header_sizer.Add(self.noise_vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) # 出力先VMDファイルコントロール self.output_noise_vmd_file_ctrl = BaseFilePickerCtrl(frame, self, u"出力対象VMD", u"出力対象VMDファイルを開く", ("vmd"), wx.FLP_OVERWRITE_PROMPT | wx.FLP_SAVE | wx.FLP_USE_TEXTCTRL, \ u"調整結果の対象VMD出力パスを指定してください。\n対象VMDファイル名に基づいて自動生成されますが、任意のパスに変更することも可能です。", \ is_aster=False, is_save=True, set_no=1) self.header_sizer.Add(self.output_noise_vmd_file_ctrl.sizer, 1, wx.EXPAND, 0) self.sizer.Add(self.header_sizer, 0, wx.EXPAND | wx.ALL, 5) self.setting_sizer = wx.BoxSizer(wx.HORIZONTAL) # ゆらぎの大きさ self.noise_size_txt = wx.StaticText(self, wx.ID_ANY, u"ゆらぎの大きさ", wx.DefaultPosition, wx.DefaultSize, 0) self.setting_sizer.Add(self.noise_size_txt, 0, wx.ALL, 5) self.noise_size_ctrl = wx.SpinCtrl(self, id=wx.ID_ANY, size=wx.Size(60, -1), value="8", min=0, max=99999999, initial=8) self.noise_size_ctrl.SetToolTip( u"ゆらぎの大きさを指定して下さい。値が大きいほど、ゆらぎが大きくなります。") self.noise_size_ctrl.Bind(wx.EVT_SPINCTRL, self.on_change_file) self.setting_sizer.Add(self.noise_size_ctrl, 0, wx.ALL, 5) # 複製数 self.copy_cnt_txt = wx.StaticText(self, wx.ID_ANY, u"複製数", wx.DefaultPosition, wx.DefaultSize, 0) self.setting_sizer.Add(self.copy_cnt_txt, 0, wx.ALL, 5) self.copy_cnt_ctrl = wx.SpinCtrl(self, id=wx.ID_ANY, size=wx.Size(60, -1), value="2", min=1, max=99999999, initial=2) self.copy_cnt_ctrl.SetToolTip(u"複製する数を指定して下さい。") self.copy_cnt_ctrl.Bind(wx.EVT_SPINCTRL, self.on_change_file) self.setting_sizer.Add(self.copy_cnt_ctrl, 0, wx.ALL, 5) # やる気係数 self.motivation_flg_ctrl = wx.CheckBox(self, wx.ID_ANY, u"やる気係数を適用する", wx.DefaultPosition, wx.DefaultSize, 0) self.motivation_flg_ctrl.SetToolTip( u"チェックを入れると、やる気係数もランダムに発生します。\nやる気係数は値が大きいほどモーションの振り幅が大きくなります。\n値が小さいほどモーションの振り幅が小さくなります。" ) self.setting_sizer.Add(self.motivation_flg_ctrl, 0, wx.ALL, 5) # 指ゆらぎ self.finger_noise_flg_ctrl = wx.CheckBox(self, wx.ID_ANY, u"指にもゆらぎを適用する", wx.DefaultPosition, wx.DefaultSize, 0) self.finger_noise_flg_ctrl.SetToolTip( u"チェックを入れると、「指」をボーン名に含むボーンも揺らがせます。") self.setting_sizer.Add(self.finger_noise_flg_ctrl, 0, wx.ALL, 5) self.sizer.Add(self.setting_sizer, 0, wx.EXPAND | wx.ALL, 5) btn_sizer = wx.BoxSizer(wx.HORIZONTAL) # 実行ボタン self.noise_btn_ctrl = wx.Button(self, wx.ID_ANY, u"ゆらぎ複製", wx.DefaultPosition, wx.Size(200, 50), 0) self.noise_btn_ctrl.SetToolTip(u"ゆらぎを付与したモーションを複製します") self.noise_btn_ctrl.Bind(wx.EVT_LEFT_DOWN, self.on_convert_noise) self.noise_btn_ctrl.Bind(wx.EVT_LEFT_DCLICK, self.on_doubleclick) btn_sizer.Add(self.noise_btn_ctrl, 0, wx.ALL, 5) self.sizer.Add(btn_sizer, 0, wx.ALIGN_CENTER | wx.SHAPED, 5) # コンソール self.console_ctrl = ConsoleCtrl(self, self.frame.logging_level, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.Size(-1, 420), \ wx.TE_MULTILINE | wx.TE_READONLY | wx.BORDER_NONE | wx.HSCROLL | wx.VSCROLL | wx.WANTS_CHARS) self.console_ctrl.SetBackgroundColour( wx.SystemSettings.GetColour(wx.SYS_COLOUR_3DLIGHT)) self.console_ctrl.Bind( wx.EVT_CHAR, lambda event: MFormUtils.on_select_all(event, self.console_ctrl)) self.sizer.Add(self.console_ctrl, 1, wx.ALL | wx.EXPAND, 5) # ゲージ self.gauge_ctrl = wx.Gauge(self, wx.ID_ANY, 100, wx.DefaultPosition, wx.DefaultSize, wx.GA_HORIZONTAL) self.gauge_ctrl.SetValue(0) self.sizer.Add(self.gauge_ctrl, 0, wx.ALL | wx.EXPAND, 5) self.Layout() self.fit() # フレームに変換完了処理バインド self.frame.Bind(EVT_SMOOTH_THREAD, self.on_convert_noise_result)