def execute(self, context): path = self.directory # Remove trailing slash path = os.path.dirname(path) self.report({'INFO'}, 'path: ' + str(path)) self.image_dp = get_default_image_path(path, self.image_dp) self.report({'INFO'}, 'image_dp: ' + str(self.image_dp)) cameras, points, mesh_ifp = ColmapFileHandler.parse_colmap_folder( path, self.image_dp, self.image_fp_type, self) self.report({'INFO'}, 'Number cameras: ' + str(len(cameras))) self.report({'INFO'}, 'Number points: ' + str(len(points))) self.report({'INFO'}, 'Mesh file path: ' + str(mesh_ifp)) reconstruction_collection = add_collection('Reconstruction Collection') self.import_photogrammetry_cameras(cameras, reconstruction_collection) self.import_photogrammetry_points(points, reconstruction_collection) self.import_photogrammetry_mesh(mesh_ifp, reconstruction_collection) self.report({'INFO'}, 'Parse Colmap model folder: Done') return {'FINISHED'}
def execute(self, context): path = os.path.join(self.directory, self.filepath) self.report({'INFO'}, 'path: ' + str(path)) points = PLYFileHandler.parse_ply_file(path) self.report({'INFO'}, 'Number points: ' + str(len(points))) transformations_sorted = TransformationFileHandler.parse_transformation_folder( self.path_to_transformations, self) reconstruction_collection = add_collection('Reconstruction Collection') self.import_photogrammetry_points(points, reconstruction_collection, transformations_sorted) return {'FINISHED'}
def execute(self, context): path = os.path.join(self.directory, self.filepath) self.report({'INFO'}, 'path: ' + str(path)) self.image_dp = get_default_image_path(path, self.image_dp) self.report({'INFO'}, 'image_dp: ' + str(self.image_dp)) cameras = Open3DFileHandler.parse_open3d_file(path, self.image_dp, self.image_fp_type, self) self.report({'INFO'}, 'Number cameras: ' + str(len(cameras))) reconstruction_collection = add_collection('Reconstruction Collection') self.import_photogrammetry_cameras(cameras, reconstruction_collection) return {'FINISHED'}
def execute(self, context): path = os.path.join(self.directory, self.filepath) self.report({'INFO'}, 'path: ' + str(path)) self.image_dp = get_default_image_path(path, self.image_dp) self.report({'INFO'}, 'image_dp: ' + str(self.image_dp)) cameras, points = NVMFileHandler.parse_nvm_file( path, self.image_dp, self.image_fp_type, self.suppress_distortion_warnings, self) self.report({'INFO'}, 'Number cameras: ' + str(len(cameras))) self.report({'INFO'}, 'Number points: ' + str(len(points))) reconstruction_collection = add_collection('Reconstruction Collection') self.import_photogrammetry_cameras(cameras, reconstruction_collection) self.import_photogrammetry_points(points, reconstruction_collection) return {'FINISHED'}
def add_cameras(op, cameras, parent_collection, image_dp=None, add_background_images=False, add_image_planes=False, convert_camera_coordinate_system=True, camera_collection_name='Cameras', image_plane_collection_name='Image Planes', camera_scale=1.0, image_plane_transparency=0.5, add_image_plane_emission=True): """ ======== The images are currently only shown in BLENDER RENDER ======== ======== Make sure to enable TEXTURE SHADING in the 3D view to make the images visible ======== :param cameras: :param image_dp: :param add_image_planes: :param convert_camera_coordinate_system: :param camera_collection_name: :param image_plane_collection_name: :return: """ op.report({'INFO'}, 'Adding Cameras: ...') stop_watch = StopWatch() camera_collection = add_collection(camera_collection_name, parent_collection) if add_image_planes: op.report({'INFO'}, 'Adding image planes: True') image_planes_collection = add_collection(image_plane_collection_name, parent_collection) camera_image_plane_pair_collection = add_collection( "Camera Image Plane Pair Collection", parent_collection) else: op.report({'INFO'}, 'Adding image planes: False') # Adding cameras and image planes: for index, camera in enumerate(cameras): # camera_name = "Camera %d" % index # original code # Replace the camera name so it matches the image name (without extension) blender_image_name_stem = camera.get_blender_obj_gui_str() camera_name = blender_image_name_stem + '_cam' bcamera = add_single_camera(op, camera_name, camera) camera_object = add_obj(bcamera, camera_name, camera_collection) matrix_world = compute_camera_matrix_world(camera) camera_object.matrix_world = matrix_world camera_object.scale *= camera_scale if not add_image_planes and not add_background_images: continue if camera.has_undistorted_absolute_fp(): path_to_image = camera.get_undistored_absolute_fp() else: path_to_image = camera.get_absolute_fp() if not os.path.isfile(path_to_image): continue blender_image = bpy.data.images.load(path_to_image) if add_background_images: # op.report({'INFO'}, 'Adding background image for: ' + camera_name) camera_data = bpy.data.objects[camera_name].data camera_data.show_background_images = True background_image = camera_data.background_images.new() background_image.image = blender_image if add_image_planes and not camera.is_panoramic(): # op.report({'INFO'}, 'Adding image plane for: ' + camera_name) # Group image plane and camera: camera_image_plane_pair_collection_current = add_collection( "Camera Image Plane Pair Collection %s" % blender_image_name_stem, camera_image_plane_pair_collection) image_plane_name = blender_image_name_stem + '_image_plane' # do not add image planes by default, this is slow ! image_plane_obj = add_camera_image_plane( matrix_world, blender_image, camera=camera, name=image_plane_name, transparency=image_plane_transparency, add_image_plane_emission=add_image_plane_emission, image_planes_collection=image_planes_collection, op=op) camera_image_plane_pair_collection_current.objects.link( camera_object) camera_image_plane_pair_collection_current.objects.link( image_plane_obj) op.report({'INFO'}, 'Duration: ' + str(stop_watch.get_elapsed_time())) op.report({'INFO'}, 'Adding Cameras: Done')