def __init__(self, parent, setting_info, work_path): super(Setting, self).__init__(parent) self.frame = parent self.setting = setting_info self.path = work_path self.data = GlobalData() pic = ImageWork.pic_transform( os.path.join(self.path, "core\\assets\\img.png"), list(self.m_bitmap2.GetSize())) bitmap = wx.Bitmap.FromBufferRGBA(pic.width, pic.height, pic.tobytes()) self.m_bitmap2.SetBitmap(bitmap) self.setting_hold = SettingHolder(setting_info) self.input_filter_tex = ( r'^.+(?<!_[\dhg])\.[Pp][Nn][Gg]$', r'^.+(?<=_\d)\.[Pp][Nn][Gg]$', r'^.+(?<=_g)\.[Pp][Nn][Gg]$', r'^.+(?<=_h)\.[Pp][Nn][Gg]$', r'^.+_younvy(?:_[\dhg])?\.[Pp][Nn][Gg]$', ) self.input_filter_mesh = ( r'^.+(?<!_[\dhg])-mesh\.[Oo][Bb][Jj]$', r'^.+(?<=_\d)-mesh\.[Oo][Bb][Jj]$', r'^.+(?<=_g)-mesh\.[Oo][Bb][Jj]$', r'^.+(?<=_h)-mesh\.[Oo][Bb][Jj]$', r'^.+_younvy(?:_[\dhg])?-mesh\.[Oo][Bb][Jj]$', )
def __init__(self, name, val, has_cn): super(PerInfo, self).__init__(name, val) self.data = GlobalData() self._tex_path = "Empty" self.more_tex = [] self._mesh_path = "Empty" self.more_mesh = [] self.lay_in = "" self.is_able_work = False self._save_path: str = "" self.cn_name = val self.has_cn = has_cn self.tree_ID = ... self.tex_id = ... self.more_tex_per_id = [] self.mesh_id = ... self.more_mesh_per_id = [] self._is_save_as_cn = True
def __init__(self, parent: es.PerWorkList, view_work: es.PerWorkList, frame: MainFrame): super(DragOrder, self).__init__() self.view_work = view_work self.frame = frame self.parent = parent self.data = GlobalData()
def __init__(self, parent, path=os.getcwd()): super(MainFrame, self).__init__(parent) # 添加图标 icon = wx.Icon(os.path.join(path, "core\\assets\\Tools.ico")) self.SetIcon(icon) # 舰娘名称文件 self.names = {} with open(os.path.join(path, "core\\assets\\names.json"), "r")as file: self.names = json.load(file) # 设置文件 with open(os.path.join(path, "core\\assets\\setting.json"), 'r')as file: self.setting_info = json.load(file) self.root = self.m_treeCtrl_info.AddRoot(u"碧蓝航线") # 数据储存结构实例 self.painting_work = PerWorkList() self.view_work = PerWorkList() # 查找tree索引的信息 self.pos, self.type_is, self.name = None, None, None # 设置拖动绑定 self.drop = DragOrder(self.painting_work, self.view_work, self) self.m_treeCtrl_info.SetDropTarget(self.drop) # 立绘还原线程 self.thread_quick = None self.thread_main = None # 进入退出状态 self.enter_exit = False # 保存路径,脚本路径 self.save_path = "" self.work_path = path # 之窗口(只有一个) self.__dialog = None # ,搜索,筛选器 self.search_type = False self.filter_type = False # 常参储存类 self.data = GlobalData() self.select_data = None self.frame_size = self.Size
def __init__(self, item: collections.abc.Iterable = None): super(PerWorkList, self).__init__(item) self.data = GlobalData()
def run(self): data = GlobalData() for self.index in range(len(self.able)): if self.stop: return if self.index < len(self.able) and not self.stop: now_info: PerInfo = self.able[self.index] self.format.m_staticText_info.SetLabel( "当前第%d个!为:%s 类型-直接还原" % (self.index + 1, now_info.cn_name)) now_info.is_save_as_cn = self.setting[data.sk_use_cn_name] # 文件分类部分 if self.setting[data.sk_output_group] == data.feg_do_no_group: save_path = self.save_path elif self.setting[data.sk_output_group] == data.feg_by_type: pattern_skin = data.fp_skin pattern_power = data.fp_build_up pattern_marry = data.fp_wedding pattern_young = data.fp_young pattern_self = data.fp_default_skin if pattern_skin.match(now_info.name) is not None: save_path = f"{self.save_path}\\皮肤" elif pattern_marry.match(now_info.name) is not None: save_path = f"{self.save_path}\\婚纱" elif pattern_power.match(now_info.name) is not None: save_path = f"{self.save_path}\\改造" elif pattern_self.match(now_info.name) is not None: save_path = f"{self.save_path}\\原皮" elif pattern_young.match(now_info.name) is not None: save_path = f"{self.save_path}\\Lily化" else: save_path = f"{self.save_path}\\其他" elif self.setting[data.sk_output_group] == data.feg_by_name: val = re.match(r'^(.+)(_[hg\d])$', now_info.name) if val is not None: val = val.group(1) if now_info.has_cn and self.setting[ data.sk_use_cn_name]: value = self.names[val] if value != "": val = value else: if now_info.has_cn and self.setting[ data.sk_use_cn_name]: val = now_info.cn_name else: val = now_info.name save_path = f"{self.save_path}\\{val}" elif self.setting[data.sk_output_group] == data.feg_by_is_able: save_path = f"{self.save_path}\\{'还原'}" else: save_path = self.save_path os.makedirs(save_path, exist_ok=True) now_info.add_save(save_path) is_good, info = ImageWork.restore_tool(now_info) if not is_good: self.format.m_staticText_info.SetLabel(info) val = round(100 * (self.index / len(self.able))) self.format.m_gauge_state.SetValue(val) self.index += 1 if self.stop: return if self.setting[data.sk_export_all_while_copy]: num = 0 if self.setting[data.sk_output_group] == data.feg_by_is_able: save_path = f'{self.save_path}\\拷贝' else: save_path = self.save_path os.makedirs(save_path, exist_ok=True) for name in self.unable: if self.stop: return name: PerInfo = name name.add_save(save_path) num += 1 shutil.copyfile(name.tex_path, name.save_path) self.format.m_gauge_state.SetValue( round(100 * (num / len(self.unable)))) self.format.m_staticText_info.SetLabel( f"当前:{name.cn_name},仅拷贝") self.format.m_staticText_info.SetLabel( f"完成,共{len(self.able) + len(self.unable)}") self.format.start = False if self.stop: return self.format.m_gauge_state.SetValue(100) if self.setting[data.sk_open_output_dir]: os.system(r'start "%s"' % self.save_path) if self.setting[data.sk_finish_exit]: self.format.exit(None)
def file_deal(paths, info_list: PerWorkList, clear_list: bool = False, pattern=r'^[.\n]*$', is_file=True, replace_str: str = '', names: dict = None, type_set=1): data = GlobalData() def info_write_builder(is_files, dict_path_group, replace_string, info_group, names_dict, type_use): def info_write(per_path): if not is_files: name = per_path per_path = dict_path_group[name] name = op.splitext(name)[0].replace(replace_string, '') else: name = op.splitext(op.basename(per_path))[0].replace(replace_string, '') name = re.sub(r'\s#\d+?$', "", name, flags=re.IGNORECASE) key = info_group.append_name(name, names_dict) if type_use == data.fi_texture_type: info_group.set_tex(per_path, key) if type_use == data.fi_mesh_type: info_group.set_mesh(per_path, key) return info_write try: if names is None: names = {} pattern_re = re.compile(pattern) if not is_file: dict_path = paths.copy() paths = paths.keys() num = len(paths) else: dict_path = {} num = len(info_list) if clear_list: if type_set == 2: info_list.clear_mesh() if type_set == 1: info_list.clear_tex() num = 0 if not len(paths) == 0: path = filter(lambda x: pattern_re.match( re.sub(r'\s#\d+?(?=\.png|obj)', "", os.path.basename(x), flags=re.IGNORECASE)) is not None, paths) path = list(path) info_write2 = info_write_builder(is_file, dict_path, replace_str, info_list, names, type_set) path_len = len(path) num += len(list(map(info_write2, path))) if path_len == 0: return False, '导入完成,无新增项!' else: return False, '导入失败,无导入项!' except (TypeError, KeyError, RuntimeError)as info: # raise return False, '导入失败,发生错误!%s' % info else: return True, '导入成功! 成功导入%d个!' % num
from core.src.static_classes.static_data import GlobalData data = GlobalData() a = { data.sk_clear_when_input: True, data.sk_finish_exit: True, data.sk_skip_exist: True, data.sk_open_output_dir: True, data.sk_use_cn_name: True, data.sk_make_new_dir: True, data.sk_export_all_while_copy: False, data.sk_input_filter_mesh: r'.+\.[Oo][Bb][Jj]', data.sk_input_filter_tex: r'.+\.[Pp][Nn][Gg]', data.sk_input_filter: 0, data.sk_output_group: 0 } print(a) import json with open("setting.json", 'w') as file: json.dump(a, file)