[Bf-blender-cvs] [94c0a59f959] master: Merge branch 'blender-v3.1-release'

Howard Trickey noreply at git.blender.org
Sun Feb 6 00:05:33 CET 2022


Commit: 94c0a59f959f6adfea48f8105b9aa25c3c5161bb
Author: Howard Trickey
Date:   Sat Feb 5 18:04:30 2022 -0500
Branches: master
https://developer.blender.org/rB94c0a59f959f6adfea48f8105b9aa25c3c5161bb

Merge branch 'blender-v3.1-release'

Also fixed conflicts due to the change in file writing in the new obj exporter
in master, and fixed one of the tests that was added in master but not 3.1.

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



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

diff --cc source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc
index 4f5321019d5,38163af64b6..13d1a4fdde6
--- a/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_file_writer.cc
@@@ -369,15 -352,28 +369,29 @@@ void OBJWriter::write_nurbs_curve(Forma
  
      /**
       * In `parm u 0 0.1 ..` line:, (total control points + 2) equidistant numbers in the
-      * parameter range are inserted.
+      * parameter range are inserted. However for curves with endpoint flag,
+      * first degree+1 numbers are zeroes, and last degree+1 numbers are ones
       */
++
+     const short flagsu = obj_nurbs_data.get_nurbs_flagu(spline_idx);
+     const bool cyclic = flagsu & CU_NURB_CYCLIC;
+     const bool endpoint = !cyclic && (flagsu & CU_NURB_ENDPOINT);
 -    file_handler_->write<eOBJSyntaxElement::nurbs_parameter_begin>();
 +    fh.write<eOBJSyntaxElement::nurbs_parameter_begin>();
      for (int i = 1; i <= total_control_points + 2; i++) {
-       fh.write<eOBJSyntaxElement::nurbs_parameters>(1.0f * i / (total_control_points + 2 + 1));
+       float parm = 1.0f * i / (total_control_points + 2 + 1);
+       if (endpoint) {
+         if (i <= nurbs_degree) {
+           parm = 0;
+         }
+         else if (i > total_control_points + 2 - nurbs_degree) {
+           parm = 1;
+         }
+       }
 -      file_handler_->write<eOBJSyntaxElement::nurbs_parameters>(parm);
++      fh.write<eOBJSyntaxElement::nurbs_parameters>(parm);
      }
 -    file_handler_->write<eOBJSyntaxElement::nurbs_parameter_end>();
 +    fh.write<eOBJSyntaxElement::nurbs_parameter_end>();
  
 -    file_handler_->write<eOBJSyntaxElement::nurbs_group_end>();
 +    fh.write<eOBJSyntaxElement::nurbs_group_end>();
    }
  }
  
diff --cc source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc
index ac2ee8d566b,ecae93f8f7a..01f201897cf
--- a/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc
+++ b/source/blender/io/wavefront_obj/tests/obj_exporter_tests.cc
@@@ -238,38 -238,6 +238,38 @@@ TEST(obj_exporter_writer, mtllib
    BLI_delete(out_file_path.c_str(), false, false);
  }
  
 +TEST(obj_exporter_writer, format_handler_buffer_chunking)
 +{
 +  /* Use a tiny buffer chunk size, so that the test below ends up creating several blocks. */
 +  FormatHandler<eFileType::OBJ, 16, 8> h;
 +  h.write<eOBJSyntaxElement::object_name>("abc");
 +  h.write<eOBJSyntaxElement::object_name>("abcd");
 +  h.write<eOBJSyntaxElement::object_name>("abcde");
 +  h.write<eOBJSyntaxElement::object_name>("abcdef");
 +  h.write<eOBJSyntaxElement::object_name>("012345678901234567890123456789abcd");
 +  h.write<eOBJSyntaxElement::object_name>("123");
 +  h.write<eOBJSyntaxElement::curve_element_begin>();
 +  h.write<eOBJSyntaxElement::new_line>();
 +  h.write<eOBJSyntaxElement::nurbs_parameter_begin>();
 +  h.write<eOBJSyntaxElement::new_line>();
 +
 +  size_t got_blocks = h.get_block_count();
 +  ASSERT_EQ(got_blocks, 7);
 +
 +  std::string got_string = h.get_as_string();
 +  using namespace std::string_literals;
 +  const char *expected = R"(o abc
 +o abcd
 +o abcde
 +o abcdef
 +o 012345678901234567890123456789abcd
 +o 123
 +curv 0.0 1.0
- parm 0.0
++parm u 0.0
 +)";
 +  ASSERT_EQ(got_string, expected);
 +}
 +
  /* Return true if string #a and string #b are equal after their first newline. */
  static bool strings_equal_after_first_lines(const std::string &a, const std::string &b)
  {
@@@ -410,6 -378,17 +410,19 @@@ TEST_F(obj_exporter_regression_test, nu
        "io_tests/blend_geometry/nurbs.blend", "io_tests/obj/nurbs.obj", "", _export.params);
  }
  
+ TEST_F(obj_exporter_regression_test, nurbs_curves_as_nurbs)
+ {
+   OBJExportParamsDefault _export;
+   _export.params.forward_axis = OBJ_AXIS_Y_FORWARD;
+   _export.params.up_axis = OBJ_AXIS_Z_UP;
+   _export.params.export_materials = false;
+   _export.params.export_curves_as_nurbs = true;
 -  compare_obj_export_to_golden(
 -      "io_tests/blend_geometry/nurbs_curves.blend", "io_tests/obj/nurbs_curves.obj", "", _export.params);
++  compare_obj_export_to_golden("io_tests/blend_geometry/nurbs_curves.blend",
++                               "io_tests/obj/nurbs_curves.obj",
++                               "",
++                               _export.params);
+ }
+ 
  TEST_F(obj_exporter_regression_test, nurbs_as_mesh)
  {
    OBJExportParamsDefault _export;



More information about the Bf-blender-cvs mailing list