Add a per node type callback for creating node add search operations,
similar to the way link drag search is implemented (11be151d58).
Currently the searchable strings have to be separate items in the list.
In a separate step, we can look into adding invisible searchable text
to search items if that's still necessary.
Resolves #102118
Pull Request #104794
64 lines
1.7 KiB
C++
64 lines
1.7 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#include "node_geometry_util.hh"
|
|
#include "node_util.h"
|
|
|
|
#include "DNA_mesh_types.h"
|
|
#include "DNA_meshdata_types.h"
|
|
|
|
#include "BKE_mesh.h"
|
|
#include "BKE_mesh_runtime.h"
|
|
#include "BKE_pointcloud.h"
|
|
|
|
#include "NOD_add_node_search.hh"
|
|
#include "NOD_socket_search_link.hh"
|
|
|
|
namespace blender::nodes {
|
|
|
|
std::optional<eCustomDataType> node_data_type_to_custom_data_type(const eNodeSocketDatatype type)
|
|
{
|
|
switch (type) {
|
|
case SOCK_FLOAT:
|
|
return CD_PROP_FLOAT;
|
|
case SOCK_VECTOR:
|
|
return CD_PROP_FLOAT3;
|
|
case SOCK_RGBA:
|
|
return CD_PROP_COLOR;
|
|
case SOCK_BOOLEAN:
|
|
return CD_PROP_BOOL;
|
|
case SOCK_INT:
|
|
return CD_PROP_INT32;
|
|
case SOCK_STRING:
|
|
return CD_PROP_STRING;
|
|
default:
|
|
return {};
|
|
}
|
|
}
|
|
|
|
std::optional<eCustomDataType> node_socket_to_custom_data_type(const bNodeSocket &socket)
|
|
{
|
|
return node_data_type_to_custom_data_type(eNodeSocketDatatype(socket.type));
|
|
}
|
|
|
|
} // namespace blender::nodes
|
|
|
|
bool geo_node_poll_default(const bNodeType * /*ntype*/,
|
|
const bNodeTree *ntree,
|
|
const char **r_disabled_hint)
|
|
{
|
|
if (!STREQ(ntree->idname, "GeometryNodeTree")) {
|
|
*r_disabled_hint = TIP_("Not a geometry node tree");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void geo_node_type_base(bNodeType *ntype, int type, const char *name, short nclass)
|
|
{
|
|
node_type_base(ntype, type, name, nclass);
|
|
ntype->poll = geo_node_poll_default;
|
|
ntype->insert_link = node_insert_link_default;
|
|
ntype->gather_link_search_ops = blender::nodes::search_link_ops_for_basic_node;
|
|
ntype->gather_add_node_search_ops = blender::nodes::search_node_add_ops_for_basic_node;
|
|
}
|