Welcome to mirror list, hosted at ThFree Co, Russian Federation.

ED_viewer_path.hh « include « editors « blender « source - git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 957dfddb8af1b698b7bbc339ffaa3bfb5c45ca88 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/* SPDX-License-Identifier: GPL-2.0-or-later */

#pragma once

#include <optional>

#include "BLI_string_ref.hh"
#include "BLI_vector.hh"

#include "BKE_viewer_path.h"

struct Main;
struct SpaceNode;
struct bNode;
struct bContext;
struct Object;

namespace blender::ed::viewer_path {

/**
 * Activates the given node in the context provided by the editor. This indirectly updates all
 * non-pinned viewer paths in other editors (spreadsheet and 3d view).
 */
void activate_geometry_node(Main &bmain, SpaceNode &snode, bNode &node);

/**
 * Returns the object referenced by the viewer path. This only returns something if the viewer path
 * *only* contains the object and nothing more.
 */
Object *parse_object_only(const ViewerPath &viewer_path);

/**
 * Represents a parsed #ViewerPath for easier consumption.
 */
struct ViewerPathForGeometryNodesViewer {
  Object *object;
  blender::StringRefNull modifier_name;
  blender::Vector<blender::StringRefNull> group_node_names;
  blender::StringRefNull viewer_node_name;
};

/**
 * Parses a #ViewerPath into a #ViewerPathForGeometryNodesViewer or returns none if that does not
 * work.
 */
std::optional<ViewerPathForGeometryNodesViewer> parse_geometry_nodes_viewer(
    const ViewerPath &viewer_path);

/**
 * Finds the node referenced by the #ViewerPath within the provided editor. If no node is
 * referenced, null is returned. When two different editors show the same node group but in a
 * different context, it's possible that the same node is active in one editor but not the other.
 */
bNode *find_geometry_nodes_viewer(const ViewerPath &viewer_path, SpaceNode &snode);

/**
 * Checks if the node referenced by the viewer path and its entire context still exists. The node
 * does not have to be visible for this to return true.
 */
bool exists_geometry_nodes_viewer(const ViewerPathForGeometryNodesViewer &parsed_viewer_path);

/**
 * Checks if the node referenced by the viewer and its entire context is still active, i.e. some
 * editor is showing it.
 */
bool is_active_geometry_nodes_viewer(const bContext &C,
                                     const ViewerPathForGeometryNodesViewer &parsed_viewer_path);

}  // namespace blender::ed::viewer_path