DveloperY0115's picture
init repo
801501a
raw
history blame
6.55 kB
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)