[Bf-blender-cvs] [587a1b16aeb] master: Attributes: Autofill for attribute conversion operators

Ramil Roosileht noreply at git.blender.org
Mon Dec 5 23:31:01 CET 2022


Commit: 587a1b16aeb087888de3188a0c44d25e86de7169
Author: Ramil Roosileht
Date:   Mon Dec 5 16:28:50 2022 -0600
Branches: master
https://developer.blender.org/rB587a1b16aeb087888de3188a0c44d25e86de7169

Attributes: Autofill for attribute conversion operators

Make "Convert Attribute" and "Convert Color Attribute" operators
auto-fill their initial settings with active attribute's domain
and data type if it wasn't already set explicitly.

Differential Revision: https://developer.blender.org/D16550

===================================================================

M	source/blender/editors/geometry/geometry_attributes.cc

===================================================================

diff --git a/source/blender/editors/geometry/geometry_attributes.cc b/source/blender/editors/geometry/geometry_attributes.cc
index 7f163da493b..4e53349707d 100644
--- a/source/blender/editors/geometry/geometry_attributes.cc
+++ b/source/blender/editors/geometry/geometry_attributes.cc
@@ -34,6 +34,7 @@
 #include "UI_resources.h"
 
 #include "ED_geometry.h"
+#include "ED_mesh.h"
 #include "ED_object.h"
 
 #include "geometry_intern.hh"
@@ -559,6 +560,28 @@ void GEOMETRY_OT_color_attribute_duplicate(wmOperatorType *ot)
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
 }
 
+static int geometry_attribute_convert_invoke(bContext *C,
+                                             wmOperator *op,
+                                             const wmEvent * /*event*/)
+{
+  Object *ob = ED_object_context(C);
+  Mesh *mesh = static_cast<Mesh *>(ob->data);
+
+  const bke::AttributeMetaData meta_data = *mesh->attributes().lookup_meta_data(
+      BKE_id_attributes_active_get(&mesh->id)->name);
+
+  PropertyRNA *prop = RNA_struct_find_property(op->ptr, "domain");
+  if (!RNA_property_is_set(op->ptr, prop)) {
+    RNA_enum_set(op->ptr, "domain", meta_data.domain);
+  }
+  prop = RNA_struct_find_property(op->ptr, "data_type");
+  if (!RNA_property_is_set(op->ptr, prop)) {
+    RNA_enum_set(op->ptr, "data_type", meta_data.data_type);
+  }
+
+  return WM_operator_props_dialog_popup(C, op, 300);
+}
+
 static void geometry_attribute_convert_ui(bContext * /*C*/, wmOperator *op)
 {
   uiLayout *layout = op->layout;
@@ -576,13 +599,6 @@ static void geometry_attribute_convert_ui(bContext * /*C*/, wmOperator *op)
   }
 }
 
-static int geometry_attribute_convert_invoke(bContext *C,
-                                             wmOperator *op,
-                                             const wmEvent * /*event*/)
-{
-  return WM_operator_props_dialog_popup(C, op, 300);
-}
-
 static bool geometry_color_attribute_convert_poll(bContext *C)
 {
   if (!geometry_attributes_poll(C)) {
@@ -614,6 +630,28 @@ static int geometry_color_attribute_convert_exec(bContext *C, wmOperator *op)
   return OPERATOR_FINISHED;
 }
 
+static int geometry_color_attribute_convert_invoke(bContext *C,
+                                                   wmOperator *op,
+                                                   const wmEvent * /*event*/)
+{
+  Object *ob = ED_object_context(C);
+  Mesh *mesh = static_cast<Mesh *>(ob->data);
+
+  const bke::AttributeMetaData meta_data = *mesh->attributes().lookup_meta_data(
+      BKE_id_attributes_active_color_get(&mesh->id)->name);
+
+  PropertyRNA *prop = RNA_struct_find_property(op->ptr, "domain");
+  if (!RNA_property_is_set(op->ptr, prop)) {
+    RNA_enum_set(op->ptr, "domain", meta_data.domain);
+  }
+  prop = RNA_struct_find_property(op->ptr, "data_type");
+  if (!RNA_property_is_set(op->ptr, prop)) {
+    RNA_enum_set(op->ptr, "data_type", meta_data.data_type);
+  }
+
+  return WM_operator_props_dialog_popup(C, op, 300);
+}
+
 static void geometry_color_attribute_convert_ui(bContext *UNUSED(C), wmOperator *op)
 {
   uiLayout *layout = op->layout;
@@ -630,7 +668,7 @@ void GEOMETRY_OT_color_attribute_convert(wmOperatorType *ot)
   ot->description = "Change how the color attribute is stored";
   ot->idname = "GEOMETRY_OT_color_attribute_convert";
 
-  ot->invoke = geometry_attribute_convert_invoke;
+  ot->invoke = geometry_color_attribute_convert_invoke;
   ot->exec = geometry_color_attribute_convert_exec;
   ot->poll = geometry_color_attribute_convert_poll;
   ot->ui = geometry_color_attribute_convert_ui;



More information about the Bf-blender-cvs mailing list