import sys import vtk from custom_types import * from ui import ui_utils, interactors, ui_controllers import options def init_camera(*renders: vtk.vtkRenderer): for render in renders: camera = render.GetActiveCamera() camera.SetPosition(3, 1, -3) def add_shadows(renderer): colors = vtk.vtkNamedColors() colors.SetColor('HighNoonSun', [255, 255, 251, 255]) # Color temp. 5400°K colors.SetColor('100W Tungsten', [255, 214, 170, 255]) # Color temp. 2850°K light1 = vtk.vtkLight() light1.SetFocalPoint(0, 0, 0) light1.SetPosition(0, 1, 0.2) light1.SetColor(colors.GetColor3d('HighNoonSun')) light1.SetIntensity(0.3) light2 = vtk.vtkLight() light2.SetFocalPoint(0, 0, 0) light2.SetPosition(1.0, 1.0, 1.0) light2.SetColor(colors.GetColor3d('100W Tungsten')) light2.SetIntensity(0.8) renderer.AddLight(light1) renderer.AddLight(light2) shadows = vtk.vtkShadowMapPass() seq = vtk.vtkSequencePass() passes = vtk.vtkRenderPassCollection() passes.AddItem(shadows.GetShadowMapBakerPass()) passes.AddItem(shadows) seq.SetPasses(passes) # cameraP = vtk.vtkCameraPass() cameraP.SetDelegatePass(seq) # glrenderer = renderer glrenderer.SetPass(cameraP) # renderer.GetActiveCamera().SetPosition(-0.2, 0.2, 1) # renderer.GetActiveCamera().SetFocalPoint(0, 0, 0) # renderer.GetActiveCamera().SetViewUp(0, 1, 0) # renderer.ResetCamera() # renderer.GetActiveCamera().Dolly(2.25) # renderer.ResetCameraClippingRange() def main_single(opt: options.Options, with_model: bool, shape_num: int): render_window = vtk.vtkRenderWindow() background_renderer_a, background_renderer_b = vtk.vtkRenderer(), vtk.vtkRenderer() ren_left = ui_utils.CanvasRender((0.0, 0.0, 1, 1), render_window, ui_utils.rgb_to_float(ui_utils.bg_source_color)) render_window.SetMultiSamples(0) render_window.SetNumberOfLayers(2) background_renderer_a.SetViewport(0.0, 0.0, 1., 1) background_renderer_b.SetViewport(0.0, 0.05, 0.4, .15) background_renderer_a.InteractiveOff() background_renderer_b.InteractiveOff() background_renderer_a.SetLayer(0) background_renderer_b.SetLayer(0) ren_left.SetLayer(1) background_renderer_a.SetBackground(*ui_utils.rgb_to_float(ui_utils.bg_source_color)) background_renderer_b.SetBackground(*ui_utils.rgb_to_float(ui_utils.bg_menu_color)) render_window.AddRenderer(background_renderer_a) render_window.AddRenderer(background_renderer_b) init_camera(ren_left) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(render_window) view_style = [ui_utils.ViewStyle((200, 200, 200), (200, 200, 200), ui_utils.palette[0], 1)] status = ui_controllers.MeshGmmStatuses(opt, [shape_num], [ren_left], view_style, with_model) style = interactors.SingleInteractorStyle(opt, status, iren) # add_shadows(ren_left) iren.SetInteractorStyle(style) render_window.Render() iren.Initialize() render_window.Render() iren.Start() del iren del render_window status.exit() def main_mix(opt: options.Options, with_model: bool, *shape_num: int): # colors = vtk.vtkNamedColors() num_shapes = len(shape_num) # background_renderer_b = vtk.vtkRenderer() background_renderer_a, background_renderer_b = vtk.vtkRenderer(), vtk.vtkRenderer() render_window = vtk.vtkRenderWindow() render_window.SetNumberOfLayers(2) right_height = 1. / num_shapes offset_left = 1 - right_height * 1080. / 1920 ren_left = ui_utils.CanvasRender((0.0, 0.0, offset_left, 1), render_window, ui_utils.rgb_to_float(ui_utils.bg_source_color), stroke_color=list(ui_utils.bg_target_color) + [200]) background_renderer_a.SetViewport(0.0, 0.0, offset_left, 1) background_renderer_b.SetViewport(0.0, 0.05, offset_left / 2, .15) background_renderer_a.SetBackground(*ui_utils.rgb_to_float(ui_utils.bg_source_color)) background_renderer_b.SetBackground(*ui_utils.rgb_to_float(ui_utils.bg_menu_color)) background_renderer_a.InteractiveOff() background_renderer_b.InteractiveOff() background_renderer_a.SetLayer(0) background_renderer_b.SetLayer(0) ren_left.SetLayer(1) render_window.AddRenderer(background_renderer_a) render_window.AddRenderer(background_renderer_b) rens_right = [ui_utils.CanvasRender((offset_left, i * right_height, 1., (i + 1) * right_height), render_window, ui_utils.rgb_to_float(ui_utils.bg_target_color), stroke_color=list(ui_utils.bg_source_color) + [200]) for i in range(num_shapes)] gmm_united = ui_controllers.MeshGmmUnited(opt, list(shape_num), rens_right, ui_utils.get_view_styles(num_shapes + 1), ren_left, with_model) init_camera(ren_left, *rens_right) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(render_window) iren.Initialize() style = interactors.MixInteractorStyle(opt, gmm_united, iren) iren.SetInteractorStyle(style) render_window.Render() iren.Start() del iren del render_window gmm_united.exit() def main(): args = sys.argv select = 0 opt = (options.Options(device=CUDA(0), tag='chairs_sym_hard', model_name="occ_gmm"), options.Options(device=CUDA(0), tag='airplanes_sym_hard', model_name="occ_gmm"), options.Options(device=CUDA(0), tag='guitars_tb', model_name="occ_gmm"), options.Options(device=CUDA(0), tag='coseg_vases', model_name="occ_gmm"))[select].load() shape_num = [0, 0, 3631, 3718][3] if len(args) > 1: for i in range(1, len(args), 2): arg = args[i].split('-')[-1] if hasattr(opt, arg): setattr(opt, arg, args[i + 1]) elif arg == "shape_num": shape_num = int(args[i + 1]) # main_single(opt, True, shape_num) # main_mix(opt, True, 3658, 3091, 252) # main_mix(opt, True, 1637, 3631, 6567) # main_single(opt, True, 127) main_mix(opt, True, 188, 4814, 2954, 3631, 3327, 4410, 5551) # main_mix(opt, False, 3631, 5710) # main_mix(opt, False, 164, 260, 27) # main_mix(opt, True, 0, 1, 4) # main_single(opt, False, 3631) if __name__ == '__main__': torch.multiprocessing.set_start_method("spawn") main() # interactors.make_slider(None)