From ddb48c2a49c8cd9c89979050f1a542ef3c7aa4f7 Mon Sep 17 00:00:00 2001 From: mhby1g21 <mhby1g21@soton.ac.uk> Date: Tue, 29 Oct 2024 13:10:30 +0000 Subject: [PATCH] fixed mesh split and flip normal ttest --- scripts/debug_tool/tabs/edge_net_tab.py | 251 +++++++++++++++--------- 1 file changed, 153 insertions(+), 98 deletions(-) diff --git a/scripts/debug_tool/tabs/edge_net_tab.py b/scripts/debug_tool/tabs/edge_net_tab.py index 754b68f..fc2446e 100644 --- a/scripts/debug_tool/tabs/edge_net_tab.py +++ b/scripts/debug_tool/tabs/edge_net_tab.py @@ -16,6 +16,7 @@ class EdgeNetTab: self.config_reader = config_reader self.edge_net_dir = self.config_reader.directories['edgeNetDir'] self.output_dir = self.config_reader.directories['outputDir'] + self.script_dir = self.config_reader.directories['scriptDir'] # Updated default input directory self.input_dir = os.path.join(self.edge_net_dir, "Data", "Input") @@ -396,46 +397,6 @@ class EdgeNetTab: self.update_status("All required files present for infer360.py") return True - def verify_mesh_split_inputs(self): - """Verify input files for mesh splitting""" - obj_file = os.path.join(self.edge_net_dir, "Input", "input_prediction.obj") - mtl_file = os.path.join(self.edge_net_dir, "Input", "input_prediction.mtl") - - missing_files = [] - if not os.path.exists(obj_file): - missing_files.append("input_prediction.obj") - if not os.path.exists(mtl_file): - missing_files.append("input_prediction.mtl") - - if missing_files: - self.update_status("Missing required files for mesh splitting:") - for file in missing_files: - self.update_status(f"- {file}") - return False - - self.update_status("All required files present for mesh splitting") - return True - - def verify_blender_flip_inputs(self): - """Verify input files for Blender flip""" - obj_file = os.path.join(self.output_dir, "Input_prediction_mesh.obj") - mtl_file = os.path.join(self.output_dir, "Input_prediction_mesh.mtl") - - missing_files = [] - if not os.path.exists(obj_file): - missing_files.append("Input_prediction_mesh.obj") - if not os.path.exists(mtl_file): - missing_files.append("Input_prediction_mesh.mtl") - - if missing_files: - self.update_status("Missing required files for Blender flip:") - for file in missing_files: - self.update_status(f"- {file}") - return False - - self.update_status("All required files present for Blender flip") - return True - def run_edge_net(self): if self.is_processing: messagebox.showwarning("Warning", "A process is already running!") @@ -510,6 +471,7 @@ class EdgeNetTab: finally: self.is_processing = False + self.update_depth_preview() def _process_complete(self, success, error_message=None): """Handle process completion in the main thread""" @@ -547,6 +509,23 @@ class EdgeNetTab: self.status_text.see(tk.END) def run_mesh_split(self): + if self.is_processing: + messagebox.showwarning("Warning", "A process is already running!") + return + + # Start processing in a separate thread + thread = threading.Thread(target=self._run_mesh_split_thread) + thread.daemon = True + thread.start() + + # Start progress bar + self.progress_bar.start(10) + self.is_processing = True + self.cancel_button.config(state='normal') + self.monitor_output() + + def _run_mesh_split_thread(self): + """Run mesh splitting in a separate thread""" try: # Verify input files first if not self.verify_mesh_split_inputs(): @@ -558,39 +537,66 @@ class EdgeNetTab: original_dir = os.getcwd() os.chdir(self.edge_net_dir) - cmd = f'call "{self.config_reader.config["condaDir"]}\\condabin\\activate.bat" {self.config_reader.config["materialEnv"]} && python "{self.edge_net_dir}\\replace.py"' - - process = subprocess.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - shell=True, - text=True - ) - stdout, stderr = process.communicate() - - if process.returncode != 0: - raise Exception(f"Mesh splitting failed: {stderr}") + try: + # Construct and run command + cmd = (f'call "{self.config_reader.config["condaDir"]}\\Scripts\\activate.bat" ' + f'{self.config_reader.config["materialEnv"]} && ' + f'python replace.py') - # Verify output files were created - output_obj = os.path.join(self.output_dir, "Input_prediction_mesh.obj") - output_mtl = os.path.join(self.output_dir, "Input_prediction_mesh.mtl") - - if not (os.path.exists(output_obj) and os.path.exists(output_mtl)): - raise Exception("Mesh splitting did not generate expected output files") - - self.update_status("Mesh splitting completed successfully") - self.split_status.config(text="✓ Complete", foreground="green") + self.update_status(f"Executing command:\n{cmd}") + + if self.run_process_with_output(cmd, "Mesh Splitting") != 0: + raise Exception("Mesh splitting process failed") + + # Verify output files were created + output_obj = os.path.join(self.output_dir, "Input_prediction_mesh.obj") + + if not (os.path.exists(output_obj)): + raise Exception("Mesh splitting did not generate expected output files") + + self.tab.after(0, self._split_complete, True) + + finally: + os.chdir(original_dir) except Exception as e: - self.update_status(f"Error in mesh splitting: {str(e)}") - self.split_status.config(text="✗ Failed", foreground="red") - messagebox.showerror("Error", f"Mesh splitting failed: {str(e)}") + self.tab.after(0, self._split_complete, False, str(e)) + finally: - if original_dir: - os.chdir(original_dir) + self.is_processing = False + + def _split_complete(self, success, error_message=None): + """Handle mesh split completion in the main thread""" + self.progress_bar.stop() + self.cancel_button.config(state='disabled') + self.operation_label.config(text="") + + if success: + self.update_status("Mesh splitting completed successfully") + self.split_status.config(text="✓ Complete", foreground="green") + else: + self.update_status(f"Error in mesh splitting: {error_message}") + self.split_status.config(text="✗ Failed", foreground="red") + messagebox.showerror("Error", f"Mesh splitting failed: {error_message}") def run_blender_flip(self): + if self.is_processing: + messagebox.showwarning("Warning", "A process is already running!") + return + + # Start processing in a separate thread + thread = threading.Thread(target=self._run_blender_flip_thread) + thread.daemon = True + thread.start() + + # Start progress bar + self.progress_bar.start(10) + self.is_processing = True + self.cancel_button.config(state='normal') + self.monitor_output() + + def _run_blender_flip_thread(self): + """Run blender flip in a separate thread""" try: # Verify input files first if not self.verify_blender_flip_inputs(): @@ -600,42 +606,91 @@ class EdgeNetTab: self.flip_status.config(text="Running...", foreground="orange") original_dir = os.getcwd() - os.chdir(self.edge_net_dir) - - cmd = (f'call "{self.config_reader.config["condaDir"]}\\condabin\\activate.bat" ' - f'{self.config_reader.config["unityEnv"]} && ' - f'python "{os.path.join(self.config_reader.directories["scriptDir"], "blenderFlip.py")}" ' - f'"{os.path.join(self.output_dir, "Input_prediction_mesh.obj")}"') + os.chdir(self.config_reader.directories['scriptDir']) - process = subprocess.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - shell=True, - text=True - ) - stdout, stderr = process.communicate() - - if process.returncode != 0: - raise Exception(f"Blender flip failed: {stderr}") + try: + # Construct and run command + cmd = (f'call "{self.config_reader.config["condaDir"]}\\Scripts\\activate.bat" ' + f'{self.config_reader.config["unityEnv"]} && ' + f'python blenderFlip.py ' + f'"{os.path.join(self.output_dir, "Input_prediction_mesh.obj")}"') - # Verify output files were created - output_obj = os.path.join(self.output_dir, "final_output_scene_mesh.obj") - output_mtl = os.path.join(self.output_dir, "final_output_scene_mesh.mtl") - - if not (os.path.exists(output_obj) and os.path.exists(output_mtl)): - raise Exception("Blender flip did not generate expected output files") - - self.update_status("Blender flip completed successfully") - self.flip_status.config(text="✓ Complete", foreground="green") + self.update_status(f"Executing command:\n{cmd}") + + if self.run_process_with_output(cmd, "Blender Flip") != 0: + raise Exception("Blender flip process failed") + + # Verify output files were created + output_obj = os.path.join(self.output_dir, "final_output_scene_mesh.obj") + + if not (os.path.exists(output_obj)): + raise Exception("Blender flip did not generate expected output files") + + self.tab.after(0, self._flip_complete, True) + + finally: + os.chdir(original_dir) except Exception as e: - self.update_status(f"Error in Blender flip: {str(e)}") - self.flip_status.config(text="✗ Failed", foreground="red") - messagebox.showerror("Error", f"Blender flip failed: {str(e)}") + self.tab.after(0, self._flip_complete, False, str(e)) + finally: - if original_dir: - os.chdir(original_dir) + self.is_processing = False + + def _flip_complete(self, success, error_message=None): + """Handle blender flip completion in the main thread""" + self.progress_bar.stop() + self.cancel_button.config(state='disabled') + self.operation_label.config(text="") + + if success: + self.update_status("Blender flip completed successfully") + self.flip_status.config(text="✓ Complete", foreground="green") + else: + self.update_status(f"Error in Blender flip: {error_message}") + self.flip_status.config(text="✗ Failed", foreground="red") + messagebox.showerror("Error", f"Blender flip failed: {error_message}") + + def verify_mesh_split_inputs(self): + """Verify input files for mesh splitting""" + required_files = { + 'input_prediction.obj': os.path.join(self.output_dir, "Input_prediction.obj") + } + + missing_files = [] + for name, path in required_files.items(): + if not os.path.exists(path): + missing_files.append(f"{name} ({path})") + + if missing_files: + self.update_status("Missing required files for mesh splitting:") + for file in missing_files: + self.update_status(f"- {file}") + return False + + self.update_status("All required files present for mesh splitting") + return True + + def verify_blender_flip_inputs(self): + """Verify input files for Blender flip""" + required_files = { + 'Input_prediction_mesh.obj': os.path.join(self.output_dir, "Input_prediction_mesh.obj") + } + + missing_files = [] + for name, path in required_files.items(): + if not os.path.exists(path): + missing_files.append(f"{name} ({path})") + + if missing_files: + self.update_status("Missing required files for Blender flip:") + for file in missing_files: + self.update_status(f"- {file}") + return False + + self.update_status("All required files present for Blender flip") + return True + def run_all_steps(self): """Run all EdgeNet processing steps in sequence""" try: -- GitLab