Exemplo n.º 1
0
    def btn_custom_input_clicked(self):
        data = prompt_custom_input()
        if not data["confirmFlag"]:
            self.writeMessage("Custom input is cancelled")
            return
        if self.upperScene.pcd == None:
            self.writeMessage("Please load data before user custom input")
            return

        try:
            points_data = [float(num) for num in data["points_data"]]
        except Exception as e:
            self.writeMessage("User input need to be int/float")

        try:
            surface_to_crop = floodfill(points_data,
                                        self.upperScene.pcd,
                                        custom_input=True)
            self.current_result_point_indices = surface_to_crop
            new_pcd = crop_reserve(self.upperScene.pcd, surface_to_crop)
            self.lowerScene.render(new_pcd)

        except Exception as e:
            self.writeMessage(str(e))

        pcd = self.upperScene.pcd
        points = np.asarray(pcd.points)
        colors = np.asarray(pcd.colors)

        self.upperScene.marker.set_data(points,
                                        edge_color=colors,
                                        face_color=colors,
                                        size=self.point_size)
Exemplo n.º 2
0
    def btn_floodfill_done_clicked(self):
        '''
        When the floodfill button is clicked
        1. get the selected points
        2. get the surface that needs to be cropped
        3. render the result in the lower scene
        '''
        x_coord = self.line_edit_x_coord.text()
        y_coord = self.line_edit_y_coord.text()
        z_coord = self.line_edit_z_coord.text()
        if not self.selected_points_id:
            if x_coord:
                self.selected_points_id.append(x_coord)
            if y_coord:
                self.selected_points_id.append(y_coord)
            if z_coord:
                self.selected_points_id.append(z_coord)

        try:
            surface_to_crop = floodfill(self.selected_points_id,
                                        self.upperScene.pcd)
            self.current_result_point_indices = surface_to_crop
            new_pcd = crop_reserve(self.upperScene.pcd, surface_to_crop)
            self.lowerScene.render(new_pcd)

        except Exception as e:
            self.writeMessage(str(e))
        self.writeMessage("Selected Points is cleared")
        self.selected_points_id = []
        self.selected_points_original_color
        # after selecting points, reset point colors
        self.refillColor()
Exemplo n.º 3
0
    def btn_floodfill_done_clicked(self):
        '''
        When the floodfill button is clicked
        1. get the selected points
        2. get the surface that needs to be cropped
        3. render the result in the lower scene
        '''
        try:
            surface_to_crop = floodfill(self.selected_points_id,
                                        self.upperScene.pcd)
            self.current_result_point_indices = surface_to_crop
            new_pcd = crop_reserve(self.upperScene.pcd, surface_to_crop)
            self.lowerScene.render(new_pcd)

        except Exception as e:
            self.writeMessage(str(e))

        pcd = self.upperScene.pcd
        points = np.asarray(pcd.points)
        colors = np.asarray(pcd.colors)

        self.upperScene.marker.set_data(points,
                                        edge_color=colors,
                                        face_color=colors,
                                        size=self.point_size)

        self.writeMessage("Selected Points is cleared")
        self.selected_points_id = []
        '''
        Added by Star Li: the highlighted points resume their original color once they are 
        no longer selected.
        '''
        self.resume_selected_points()
Exemplo n.º 4
0
    def btn_display_clicked(self):
        '''
        When display is clicked
        1. display original pointcloud in upper display box
        2. display arbitrary cropped out pointcloud in lower display box
        '''
        self.writeMessage(
            "Displaying original pointcloud and arbitrary cropped out pointcloud"
        )
        self.upperScene.render(o3d.io.read_point_cloud("./data/scene.ply"))

        arbitrary_points = [12493, 29466, 1822]

        surface_to_crop = floodfill(arbitrary_points, self.upperScene.pcd)
        self.current_result_point_indices = surface_to_crop
        new_pcd = crop_reserve(self.upperScene.pcd, surface_to_crop)
        self.lowerScene.render(new_pcd)
Exemplo n.º 5
0
    def btn_floodfill_done_clicked(self):
        '''
        When the floodfill button is clicked
        1. get the selected points
        2. get the surface that needs to be cropped
        3. render the result in the lower scene
        '''
        try:
            surface_to_crop = floodfill(self.selected_points_id,
                                        self.upperScene.pcd)
            self.current_result_point_indices = surface_to_crop
            new_pcd = crop_reserve(self.upperScene.pcd, surface_to_crop)
            self.lowerScene.render(new_pcd)

        except Exception as e:
            self.writeMessage(str(e))
        self.writeMessage("Selected Points is cleared")
        self.selected_points_id = []