[Bf-blender-cvs] [8d7866f4b30] temp-spreadsheet-row-filter: Merge branch 'master' into temp-spreadsheet-row-filter
Hans Goudey
noreply at git.blender.org
Tue May 18 17:21:00 CEST 2021
Commit: 8d7866f4b30f9253538a5cec9d7e096d0f5eec1b
Author: Hans Goudey
Date: Tue May 18 11:20:48 2021 -0400
Branches: temp-spreadsheet-row-filter
https://developer.blender.org/rB8d7866f4b30f9253538a5cec9d7e096d0f5eec1b
Merge branch 'master' into temp-spreadsheet-row-filter
===================================================================
===================================================================
diff --cc source/blender/editors/space_spreadsheet/spreadsheet_column_values.hh
index 29907704d51,373c988a41c..68370cf6a44
--- a/source/blender/editors/space_spreadsheet/spreadsheet_column_values.hh
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_column_values.hh
@@@ -85,13 -73,20 +85,21 @@@ template<typename GetValueF> class Lamb
/* Utility function that simplifies creating a spreadsheet column from a lambda function. */
template<typename GetValueF>
-std::unique_ptr<ColumnValues> column_values_from_function(std::string name,
+std::unique_ptr<ColumnValues> column_values_from_function(const eSpreadsheetColumnValueType type,
+ std::string name,
- int size,
- GetValueF get_value)
+ const int size,
+ GetValueF get_value,
+ const float default_width = 0.0f)
{
- return std::make_unique<LambdaColumnValues<GetValueF>>(
+ std::unique_ptr<ColumnValues> column_values = std::make_unique<LambdaColumnValues<GetValueF>>(
- std::move(name), size, std::move(get_value));
+ type, std::move(name), size, std::move(get_value));
+ column_values->default_width = default_width;
+ return column_values;
}
+ static constexpr float default_float_column_width = 3;
+ static constexpr float default_float2_column_width = 2 * default_float_column_width;
+ static constexpr float default_float3_column_width = 3 * default_float_column_width;
+ static constexpr float default_color_column_width = 4 * default_float_column_width;
+
} // namespace blender::ed::spreadsheet
diff --cc source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
index f33da1c2b86,02ffa1259fc..3a4f1984a7a
--- a/source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
@@@ -90,88 -69,58 +69,67 @@@ std::unique_ptr<ColumnValues> GeometryD
const CustomDataType type = bke::cpp_type_to_custom_data_type(varray->type());
switch (type) {
case CD_PROP_FLOAT:
- if (column_id.index != -1) {
- return {};
- }
- return column_values_from_function(
- column_id.name, domain_size, [varray](int index, CellValue &r_cell_value) {
- float value;
- varray->get(index, &value);
- r_cell_value.value_float = value;
- });
+ return column_values_from_function(SPREADSHEET_VALUE_TYPE_FLOAT,
+ column_id.name,
+ domain_size,
+ [varray](int index, CellValue &r_cell_value) {
+ float value;
+ varray->get(index, &value);
+ r_cell_value.value_float = value;
+ });
case CD_PROP_INT32:
- if (column_id.index != -1) {
- return {};
- }
- return column_values_from_function(
- column_id.name, domain_size, [varray](int index, CellValue &r_cell_value) {
- int value;
- varray->get(index, &value);
- r_cell_value.value_int = value;
- });
+ return column_values_from_function(SPREADSHEET_VALUE_TYPE_INT32,
+ column_id.name,
+ domain_size,
+ [varray](int index, CellValue &r_cell_value) {
+ int value;
+ varray->get(index, &value);
+ r_cell_value.value_int = value;
+ });
case CD_PROP_BOOL:
- if (column_id.index != -1) {
- return {};
- }
- return column_values_from_function(
- column_id.name, domain_size, [varray](int index, CellValue &r_cell_value) {
- bool value;
- varray->get(index, &value);
- r_cell_value.value_bool = value;
- });
+ return column_values_from_function(SPREADSHEET_VALUE_TYPE_BOOL,
+ column_id.name,
+ domain_size,
+ [varray](int index, CellValue &r_cell_value) {
+ bool value;
+ varray->get(index, &value);
+ r_cell_value.value_bool = value;
+ });
case CD_PROP_FLOAT2: {
- if (column_id.index < 0 || column_id.index > 1) {
- return {};
- }
- const std::array<const char *, 2> suffixes = {" X", " Y"};
- const std::string name = StringRef(column_id.name) + suffixes[column_id.index];
return column_values_from_function(
- SPREADSHEET_VALUE_TYPE_FLOAT,
- name,
++ SPREADSHEET_VALUE_TYPE_FLOAT2,
+ column_id.name,
domain_size,
- [varray, axis = column_id.index](int index, CellValue &r_cell_value) {
+ [varray](int index, CellValue &r_cell_value) {
float2 value;
varray->get(index, &value);
- r_cell_value.value_float = value[axis];
- });
+ r_cell_value.value_float2 = value;
+ },
+ default_float2_column_width);
}
case CD_PROP_FLOAT3: {
- if (column_id.index < 0 || column_id.index > 2) {
- return {};
- }
- const std::array<const char *, 3> suffixes = {" X", " Y", " Z"};
- const std::string name = StringRef(column_id.name) + suffixes[column_id.index];
return column_values_from_function(
- SPREADSHEET_VALUE_TYPE_FLOAT,
- name,
++ SPREADSHEET_VALUE_TYPE_FLOAT3,
+ column_id.name,
domain_size,
- [varray, axis = column_id.index](int index, CellValue &r_cell_value) {
+ [varray](int index, CellValue &r_cell_value) {
float3 value;
varray->get(index, &value);
- r_cell_value.value_float = value[axis];
- });
+ r_cell_value.value_float3 = value;
+ },
+ default_float3_column_width);
}
case CD_PROP_COLOR: {
- if (column_id.index < 0 || column_id.index > 3) {
- return {};
- }
- const std::array<const char *, 4> suffixes = {" R", " G", " B", " A"};
- const std::string name = StringRef(column_id.name) + suffixes[column_id.index];
return column_values_from_function(
- SPREADSHEET_VALUE_TYPE_FLOAT,
- name,
++ SPREADSHEET_VALUE_TYPE_COLOR4F,
+ column_id.name,
domain_size,
- [varray, axis = column_id.index](int index, CellValue &r_cell_value) {
+ [varray](int index, CellValue &r_cell_value) {
Color4f value;
varray->get(index, &value);
- r_cell_value.value_float = value[axis];
- });
+ r_cell_value.value_color = value;
+ },
+ default_color_column_width);
}
default:
break;
@@@ -334,63 -274,68 +288,75 @@@ std::unique_ptr<ColumnValues> Instances
return {};
}
- const std::array<const char *, 3> suffixes = {" X", " Y", " Z"};
const int size = this->tot_rows();
if (STREQ(column_id.name, "Name")) {
- Span<InstancedData> instance_data = component_->instanced_data();
+ Span<int> reference_handles = component_->instance_reference_handles();
+ Span<InstanceReference> references = component_->references();
std::unique_ptr<ColumnValues> values = column_values_from_function(
- "Name", size, [reference_handles, references](int index, CellValue &r_cell_value) {
+ SPREADSHEET_VALUE_TYPE_INSTANCES,
+ "Name",
+ size,
- [instance_data](int index, CellValue &r_cell_value) {
- const InstancedData &data = instance_data[index];
- if (data.type == INSTANCE_DATA_TYPE_OBJECT) {
- if (data.data.object != nullptr) {
- r_cell_value.value_object = ObjectCellValue{data.data.object};
++ [reference_handles, references](int index, CellValue &r_cell_value) {
+ const InstanceReference &reference = references[reference_handles[index]];
+ switch (reference.type()) {
+ case InstanceReference::Type::Object: {
+ Object &object = reference.object();
+ r_cell_value.value_object = ObjectCellValue{&object};
+ break;
}
- }
- else if (data.type == INSTANCE_DATA_TYPE_COLLECTION) {
- if (data.data.collection != nullptr) {
- r_cell_value.value_collection = CollectionCellValue{data.data.collection};
+ case InstanceReference::Type::Collection: {
+ Collection &collection = reference.collection();
+ r_cell_value.value_collection = CollectionCellValue{&collection};
+ break;
+ }
+ case InstanceReference::Type::None: {
+ break;
}
}
});
values->default_width = 8.0f;
return values;
}
- if (column_id.index < 0 || column_id.index > 2) {
- return {};
- }
- Span<float4x4> transforms = component_->transforms();
+ Span<float4x4> transforms = component_->instance_transforms();
if (STREQ(column_id.name, "Position")) {
- std::string name = StringRef("Position") + suffixes[column_id.index];
return column_values_from_function(
- SPREADSHEET_VALUE_TYPE_FLOAT,
- name,
++ SPREADSHEET_VALUE_TYPE_FLOAT3,
+ column_id.name,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list