[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