Geometry Nodes: Show supported geometry types tooltip without computing
Socket declarations exist all the time and it would be useful to use them for tooltips at all times, not just when there is a computed log. Differential Revision: https://developer.blender.org/D16846
This commit is contained in:
parent
bdb34c9804
commit
d45ad0acd3
|
@ -900,8 +900,7 @@ static void create_inspection_string_for_field_info(const bNodeSocket &socket,
|
|||
}
|
||||
|
||||
static void create_inspection_string_for_geometry_info(const geo_log::GeometryInfoLog &value_log,
|
||||
std::stringstream &ss,
|
||||
const nodes::decl::Geometry *socket_decl)
|
||||
std::stringstream &ss)
|
||||
{
|
||||
Span<GeometryComponentType> component_types = value_log.component_types;
|
||||
if (component_types.is_empty()) {
|
||||
|
@ -917,7 +916,6 @@ static void create_inspection_string_for_geometry_info(const geo_log::GeometryIn
|
|||
|
||||
ss << TIP_("Geometry:\n");
|
||||
for (GeometryComponentType type : component_types) {
|
||||
const char *line_end = (type == component_types.last()) ? "" : ".\n";
|
||||
switch (type) {
|
||||
case GEO_COMPONENT_TYPE_MESH: {
|
||||
const geo_log::GeometryInfoLog::MeshInfo &mesh_info = *value_log.mesh_info;
|
||||
|
@ -928,7 +926,7 @@ static void create_inspection_string_for_geometry_info(const geo_log::GeometryIn
|
|||
to_string(mesh_info.verts_num).c_str(),
|
||||
to_string(mesh_info.edges_num).c_str(),
|
||||
to_string(mesh_info.faces_num).c_str());
|
||||
ss << line << line_end;
|
||||
ss << line;
|
||||
break;
|
||||
}
|
||||
case GEO_COMPONENT_TYPE_POINT_CLOUD: {
|
||||
|
@ -939,7 +937,7 @@ static void create_inspection_string_for_geometry_info(const geo_log::GeometryIn
|
|||
sizeof(line),
|
||||
TIP_("\u2022 Point Cloud: %s points"),
|
||||
to_string(pointcloud_info.points_num).c_str());
|
||||
ss << line << line_end;
|
||||
ss << line;
|
||||
break;
|
||||
}
|
||||
case GEO_COMPONENT_TYPE_CURVE: {
|
||||
|
@ -949,7 +947,7 @@ static void create_inspection_string_for_geometry_info(const geo_log::GeometryIn
|
|||
sizeof(line),
|
||||
TIP_("\u2022 Curve: %s splines"),
|
||||
to_string(curve_info.splines_num).c_str());
|
||||
ss << line << line_end;
|
||||
ss << line;
|
||||
break;
|
||||
}
|
||||
case GEO_COMPONENT_TYPE_INSTANCES: {
|
||||
|
@ -959,11 +957,11 @@ static void create_inspection_string_for_geometry_info(const geo_log::GeometryIn
|
|||
sizeof(line),
|
||||
TIP_("\u2022 Instances: %s"),
|
||||
to_string(instances_info.instances_num).c_str());
|
||||
ss << line << line_end;
|
||||
ss << line;
|
||||
break;
|
||||
}
|
||||
case GEO_COMPONENT_TYPE_VOLUME: {
|
||||
ss << TIP_("\u2022 Volume") << line_end;
|
||||
ss << TIP_("\u2022 Volume");
|
||||
break;
|
||||
}
|
||||
case GEO_COMPONENT_TYPE_EDIT: {
|
||||
|
@ -975,26 +973,38 @@ static void create_inspection_string_for_geometry_info(const geo_log::GeometryIn
|
|||
TIP_("\u2022 Edit Curves: %s, %s"),
|
||||
edit_info.has_deformed_positions ? TIP_("positions") : TIP_("no positions"),
|
||||
edit_info.has_deform_matrices ? TIP_("matrices") : TIP_("no matrices"));
|
||||
ss << line << line_end;
|
||||
ss << line;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (type != component_types.last()) {
|
||||
ss << ".\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void create_inspection_string_for_geometry_socket(std::stringstream &ss,
|
||||
const nodes::decl::Geometry *socket_decl,
|
||||
const bool after_log)
|
||||
{
|
||||
/* If the geometry declaration is null, as is the case for input to group output,
|
||||
* or it is an output socket don't show supported types. */
|
||||
if (socket_decl == nullptr || socket_decl->in_out == SOCK_OUT) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (after_log) {
|
||||
ss << ".\n\n";
|
||||
}
|
||||
|
||||
Span<GeometryComponentType> supported_types = socket_decl->supported_types();
|
||||
if (supported_types.is_empty()) {
|
||||
ss << ".\n\n" << TIP_("Supported: All Types");
|
||||
ss << TIP_("Supported: All Types");
|
||||
return;
|
||||
}
|
||||
|
||||
ss << ".\n\n" << TIP_("Supported: ");
|
||||
ss << TIP_("Supported: ");
|
||||
for (GeometryComponentType type : supported_types) {
|
||||
switch (type) {
|
||||
case GEO_COMPONENT_TYPE_MESH: {
|
||||
|
@ -1021,7 +1031,9 @@ static void create_inspection_string_for_geometry_info(const geo_log::GeometryIn
|
|||
break;
|
||||
}
|
||||
}
|
||||
ss << ((type == supported_types.last()) ? "" : ", ");
|
||||
if (type != supported_types.last()) {
|
||||
ss << ", ";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1036,9 +1048,6 @@ static std::optional<std::string> create_socket_inspection_string(TreeDrawContex
|
|||
|
||||
tree_draw_ctx.geo_tree_log->ensure_socket_values();
|
||||
ValueLog *value_log = tree_draw_ctx.geo_tree_log->find_socket_value_log(socket);
|
||||
if (value_log == nullptr) {
|
||||
return std::nullopt;
|
||||
}
|
||||
std::stringstream ss;
|
||||
if (const geo_log::GenericValueLog *generic_value_log =
|
||||
dynamic_cast<const geo_log::GenericValueLog *>(value_log)) {
|
||||
|
@ -1050,10 +1059,13 @@ static std::optional<std::string> create_socket_inspection_string(TreeDrawContex
|
|||
}
|
||||
else if (const geo_log::GeometryInfoLog *geo_value_log =
|
||||
dynamic_cast<const geo_log::GeometryInfoLog *>(value_log)) {
|
||||
create_inspection_string_for_geometry_info(
|
||||
*geo_value_log,
|
||||
ss,
|
||||
dynamic_cast<const nodes::decl::Geometry *>(socket.runtime->declaration));
|
||||
create_inspection_string_for_geometry_info(*geo_value_log, ss);
|
||||
}
|
||||
|
||||
if (const nodes::decl::Geometry *socket_decl = dynamic_cast<const nodes::decl::Geometry *>(
|
||||
socket.runtime->declaration)) {
|
||||
const bool after_log = value_log != nullptr;
|
||||
create_inspection_string_for_geometry_socket(ss, socket_decl, after_log);
|
||||
}
|
||||
|
||||
std::string str = ss.str();
|
||||
|
|
Loading…
Reference in New Issue