Differential D13198 Diff 45020 source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
| Show First 20 Lines • Show All 576 Lines • ▼ Show 20 Lines | int VolumeDataSource::tot_rows() const | ||||
| const Volume *volume = component_->get_for_read(); | const Volume *volume = component_->get_for_read(); | ||||
| if (volume == nullptr) { | if (volume == nullptr) { | ||||
| return 0; | return 0; | ||||
| } | } | ||||
| return BKE_volume_num_grids(volume); | return BKE_volume_num_grids(volume); | ||||
| } | } | ||||
| GeometrySet spreadsheet_get_display_geometry_set(const SpaceSpreadsheet *sspreadsheet, | GeometrySet spreadsheet_get_display_geometry_set(const SpaceSpreadsheet *sspreadsheet, | ||||
| Object *object_eval, | Object *object_eval) | ||||
| const GeometryComponentType used_component_type) | |||||
| { | { | ||||
| GeometrySet geometry_set; | GeometrySet geometry_set; | ||||
| if (sspreadsheet->object_eval_state == SPREADSHEET_OBJECT_EVAL_STATE_ORIGINAL) { | if (sspreadsheet->object_eval_state == SPREADSHEET_OBJECT_EVAL_STATE_ORIGINAL) { | ||||
| Object *object_orig = DEG_get_original_object(object_eval); | Object *object_orig = DEG_get_original_object(object_eval); | ||||
| if (object_orig->type == OB_MESH) { | if (object_orig->type == OB_MESH) { | ||||
| MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>(); | MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>(); | ||||
| if (object_orig->mode == OB_MODE_EDIT) { | if (object_orig->mode == OB_MODE_EDIT) { | ||||
| Mesh *mesh = (Mesh *)object_orig->data; | Mesh *mesh = (Mesh *)object_orig->data; | ||||
| Show All 15 Lines | if (sspreadsheet->object_eval_state == SPREADSHEET_OBJECT_EVAL_STATE_ORIGINAL) { | ||||
| else if (object_orig->type == OB_POINTCLOUD) { | else if (object_orig->type == OB_POINTCLOUD) { | ||||
| PointCloud *pointcloud = (PointCloud *)object_orig->data; | PointCloud *pointcloud = (PointCloud *)object_orig->data; | ||||
| PointCloudComponent &pointcloud_component = | PointCloudComponent &pointcloud_component = | ||||
| geometry_set.get_component_for_write<PointCloudComponent>(); | geometry_set.get_component_for_write<PointCloudComponent>(); | ||||
| pointcloud_component.replace(pointcloud, GeometryOwnershipType::ReadOnly); | pointcloud_component.replace(pointcloud, GeometryOwnershipType::ReadOnly); | ||||
| } | } | ||||
| } | } | ||||
| else { | else { | ||||
| if (used_component_type == GEO_COMPONENT_TYPE_MESH && object_eval->mode == OB_MODE_EDIT) { | if (object_eval->mode == OB_MODE_EDIT && object_eval->type == OB_MESH) { | ||||
| Mesh *mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(object_eval, false); | Mesh *mesh = BKE_modifier_get_evaluated_mesh_from_evaluated_object(object_eval, false); | ||||
| if (mesh == nullptr) { | if (mesh == nullptr) { | ||||
| return geometry_set; | return geometry_set; | ||||
| } | } | ||||
| BKE_mesh_wrapper_ensure_mdata(mesh); | BKE_mesh_wrapper_ensure_mdata(mesh); | ||||
| MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>(); | MeshComponent &mesh_component = geometry_set.get_component_for_write<MeshComponent>(); | ||||
| mesh_component.replace(mesh, GeometryOwnershipType::ReadOnly); | mesh_component.replace(mesh, GeometryOwnershipType::ReadOnly); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 130 Lines • ▼ Show 20 Lines | static void add_fields_as_extra_columns(SpaceSpreadsheet *sspreadsheet, | ||||
| } | } | ||||
| } | } | ||||
| std::unique_ptr<DataSource> data_source_from_geometry(const bContext *C, Object *object_eval) | std::unique_ptr<DataSource> data_source_from_geometry(const bContext *C, Object *object_eval) | ||||
| { | { | ||||
| SpaceSpreadsheet *sspreadsheet = CTX_wm_space_spreadsheet(C); | SpaceSpreadsheet *sspreadsheet = CTX_wm_space_spreadsheet(C); | ||||
| const AttributeDomain domain = (AttributeDomain)sspreadsheet->attribute_domain; | const AttributeDomain domain = (AttributeDomain)sspreadsheet->attribute_domain; | ||||
| const GeometryComponentType component_type = get_display_component_type(C, object_eval); | const GeometryComponentType component_type = get_display_component_type(C, object_eval); | ||||
| GeometrySet geometry_set = spreadsheet_get_display_geometry_set( | GeometrySet geometry_set = spreadsheet_get_display_geometry_set(sspreadsheet, object_eval); | ||||
| sspreadsheet, object_eval, component_type); | |||||
| if (!geometry_set.has(component_type)) { | if (!geometry_set.has(component_type)) { | ||||
| return {}; | return {}; | ||||
| } | } | ||||
| const GeometryComponent &component = *geometry_set.get_component_for_read(component_type); | const GeometryComponent &component = *geometry_set.get_component_for_read(component_type); | ||||
| ExtraColumns extra_columns; | ExtraColumns extra_columns; | ||||
| add_fields_as_extra_columns(sspreadsheet, component, extra_columns); | add_fields_as_extra_columns(sspreadsheet, component, extra_columns); | ||||
| Show All 12 Lines | |||||