Commit: c7f135ffbc857a4b3ef8cde7ff3f0d4329cf930d
Author: Kévin Dietrich
Date:   Thu Jun 23 18:39:17 2016 +0200
Branches: alembic_basic_io
https://developer.blender.org/rBc7f135ffbc857a4b3ef8cde7ff3f0d4329cf930d

Split curves reader/writer in a separate file.

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

M       source/blender/alembic/CMakeLists.txt
A       source/blender/alembic/intern/abc_curves.cc
A       source/blender/alembic/intern/abc_curves.h
M       source/blender/alembic/intern/abc_exporter.cc
M       source/blender/alembic/intern/abc_hair.cc
M       source/blender/alembic/intern/abc_hair.h
M       source/blender/alembic/intern/alembic_capi.cc

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

diff --git a/source/blender/alembic/CMakeLists.txt 
b/source/blender/alembic/CMakeLists.txt
index 58f4366..03a6f50 100644
--- a/source/blender/alembic/CMakeLists.txt
+++ b/source/blender/alembic/CMakeLists.txt
@@ -44,6 +44,7 @@ set(INC_SYS
 set(SRC
        intern/abc_camera.cc
        intern/abc_customdata.cc
+       intern/abc_curves.cc
        intern/abc_exporter.cc
        intern/abc_export_options.cc
        intern/abc_hair.cc
@@ -58,6 +59,7 @@ set(SRC
        ABC_alembic.h
        intern/abc_camera.h
        intern/abc_customdata.h
+       intern/abc_curves.h
        intern/abc_exporter.h
        intern/abc_export_options.h
        intern/abc_hair.h
diff --git a/source/blender/alembic/intern/abc_curves.cc 
b/source/blender/alembic/intern/abc_curves.cc
new file mode 100644
index 0000000..09b75ed
--- /dev/null
+++ b/source/blender/alembic/intern/abc_curves.cc
@@ -0,0 +1,211 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software  Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2016 Kévin Dietrich.
+ * All rights reserved.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ *
+ */
+
+#include "abc_curves.h"
+
+#include <cstdio>
+
+#include "abc_transform.h"
+#include "abc_util.h"
+
+extern "C" {
+#include "MEM_guardedalloc.h"
+
+#include "DNA_curve_types.h"
+#include "DNA_object_types.h"
+
+#include "BLI_listbase.h"
+
+#include "BKE_curve.h"
+#include "BKE_object.h"
+
+#include "ED_curve.h"
+}
+
+using Alembic::Abc::IInt32ArrayProperty;
+using Alembic::Abc::Int32ArraySamplePtr;
+using Alembic::Abc::P3fArraySamplePtr;
+
+using Alembic::AbcGeom::ICurves;
+using Alembic::AbcGeom::ICurvesSchema;
+using Alembic::AbcGeom::ISampleSelector;
+using Alembic::AbcGeom::kWrapExisting;
+
+using Alembic::AbcGeom::OCurves;
+using Alembic::AbcGeom::OCurvesSchema;
+using Alembic::AbcGeom::ON3fGeomParam;
+using Alembic::AbcGeom::OV2fGeomParam;
+
+/* ************************************************************************** 
*/
+
+AbcCurveWriter::AbcCurveWriter(Scene *scene,
+                               Object *ob,
+                               AbcTransformWriter *parent,
+                               uint32_t time_sampling,
+                               ExportSettings &settings)
+    : AbcObjectWriter(scene, ob, time_sampling, settings, parent)
+{
+       OCurves curves(parent->alembicXform(), m_name, m_time_sampling);
+       m_schema = curves.getSchema();
+}
+
+void AbcCurveWriter::do_write()
+{
+       Curve *curve = static_cast<Curve *>(m_object->data);
+
+       std::vector<Imath::V3f> verts;
+       std::vector<int32_t> vert_counts;
+       std::vector<float> widths;
+       Imath::V3f temp_vert;
+
+       Alembic::AbcGeom::BasisType curve_basis;
+       Alembic::AbcGeom::CurveType curve_type;
+       Alembic::AbcGeom::CurvePeriodicity periodicity;
+
+       Nurb *nurbs = static_cast<Nurb *>(curve->nurb.first);
+       for (; nurbs; nurbs = nurbs->next) {
+               if ((nurbs->flagu & CU_NURB_ENDPOINT) != 0) {
+                       periodicity = Alembic::AbcGeom::kNonPeriodic;
+               }
+               else if ((nurbs->flagu & CU_NURB_CYCLIC) != 0) {
+                       periodicity = Alembic::AbcGeom::kPeriodic;
+               }
+
+               if (nurbs->bp) {
+                       curve_basis = Alembic::AbcGeom::kNoBasis;
+                       curve_type = Alembic::AbcGeom::kLinear;
+
+                       const int totpoint = nurbs->pntsu * nurbs->pntsv;
+                       vert_counts.push_back(totpoint);
+
+                       const BPoint *point = nurbs->bp;
+
+                       for (int i = 0; i < totpoint; ++i, ++point) {
+                               copy_zup_yup(temp_vert.getValue(), point->vec);
+                               verts.push_back(temp_vert);
+                               widths.push_back(point->radius);
+                       }
+               }
+               else if (nurbs->bezt) {
+                       curve_basis = Alembic::AbcGeom::kBezierBasis;
+                       curve_type = Alembic::AbcGeom::kCubic;
+
+                       const int totpoint = nurbs->pntsu;
+                       vert_counts.push_back(totpoint);
+
+                       const BezTriple *bezier = nurbs->bezt;
+
+                       /* TODO: how does Alembic store info about handles, if 
applicable? */
+                       for (int i = 0; i < totpoint; ++i, ++bezier) {
+                               copy_zup_yup(temp_vert.getValue(), 
bezier->vec[1]);
+                               verts.push_back(temp_vert);
+                       }
+               }
+       }
+
+       Alembic::Abc::P3fArraySample pos(verts);
+       m_sample = OCurvesSchema::Sample(pos, vert_counts);
+       m_sample.setBasis(curve_basis);
+       m_sample.setType(curve_type);
+       m_sample.setWrap(periodicity);
+
+       if (!widths.empty()) {
+               Alembic::AbcGeom::OFloatGeomParam::Sample width_sample;
+               width_sample.setVals(widths);
+
+               m_sample.setWidths(width_sample);
+       }
+
+       m_sample.setSelfBounds(bounds());
+       m_schema.set(m_sample);
+}
+
+/* ************************************************************************** 
*/
+
+AbcCurveReader::AbcCurveReader(const Alembic::Abc::IObject &object, 
ImportSettings &settings)
+    : AbcObjectReader(object, settings)
+{
+       ICurves abc_curves(object, kWrapExisting);
+       m_curves_schema = abc_curves.getSchema();
+
+       get_min_max_time(m_curves_schema, m_min_time, m_max_time);
+}
+
+bool AbcCurveReader::valid() const
+{
+       return m_curves_schema.valid();
+}
+
+void AbcCurveReader::readObjectData(Main *bmain, Scene *scene, float time)
+{
+       Curve *cu = BKE_curve_add(bmain, m_data_name.c_str(), OB_CURVE);
+       cu->flag |= CU_PATH | CU_3D;
+
+       const ISampleSelector sample_sel(time);
+
+       const ICurvesSchema::Sample smp = m_curves_schema.getValue(sample_sel);
+       const Int32ArraySamplePtr hvertices = smp.getCurvesNumVertices();
+       const P3fArraySamplePtr positions = smp.getPositions();
+
+       m_object = BKE_object_add(bmain, scene, OB_CURVE, 
m_object_name.c_str());
+       m_object->data = cu;
+
+       size_t idx = 0;
+       for (size_t i = 0; i < hvertices->size(); ++i) {
+               const int steps = (*hvertices)[i];
+
+               Nurb *nu = static_cast<Nurb *>(MEM_callocN(sizeof(Nurb), 
"abc_getnurb"));
+               nu->bp = static_cast<BPoint *>(MEM_callocN(sizeof(BPoint) * 
steps, "abc_getnurb"));
+               nu->type = CU_NURBS;
+               nu->resolu = cu->resolu;
+               nu->resolv = cu->resolv;
+               nu->pntsu = steps;
+               nu->pntsv = 1;
+               nu->orderu = steps;
+               nu->flagu = CU_NURB_ENDPOINT;
+               nu->flagv = CU_NURB_ENDPOINT;
+
+               BPoint *bp = nu->bp;
+
+               for (int j = 0; j < steps; ++j, ++bp) {
+                       Imath::V3f pos = (*positions)[idx++];
+
+                       copy_yup_zup(bp->vec, pos.getValue());
+                       bp->vec[3] = 1.0;
+
+                       bp->radius = bp->weight = 1.0;
+               }
+
+               nu->flag |= CU_SMOOTH;
+
+               BLI_addtail(&cu->nurb, nu);
+       }
+
+       cu->actnu = hvertices->size();
+       cu->actvert = CU_ACT_NONE;
+
+       if (m_settings->is_sequence || !m_curves_schema.isConstant()) {
+               addDefaultModifier(bmain);
+       }
+}
diff --git a/source/blender/alembic/intern/abc_hair.h 
b/source/blender/alembic/intern/abc_curves.h
similarity index 52%
copy from source/blender/alembic/intern/abc_hair.h
copy to source/blender/alembic/intern/abc_curves.h
index 5b160d9..8c754db 100644
--- a/source/blender/alembic/intern/abc_hair.h
+++ b/source/blender/alembic/intern/abc_curves.h
@@ -12,56 +12,20 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
+ * along with this program; if not, write to the Free Software  Foundation,
  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  *
- * Contributor(s): Esteban Tovagliari, Cedric Paille, Kevin Dietrich
+ * The Original Code is Copyright (C) 2016 Kévin Dietrich.
+ * All rights reserved.
  *
  * ***** END GPL LICENSE BLOCK *****
+ *
  */
 
 #pragma once
 
 #include "abc_object.h"
 
-struct DerivedMesh;
-struct ParticleSettings;
-struct ParticleSystem;
-
-/* ************************************************************************** 
*/
-
-class AbcHairWriter : public AbcObjectWriter {
-       ParticleSystem *m_psys;
-
-       Alembic::AbcGeom::OCurvesSchema m_schema;
-       Alembic::AbcGeom::OCurvesSchema::Sample m_sample;
-
-public:
-       AbcHairWriter(Scene *scene,
-                     Object *ob,
-                     AbcTransformWriter *parent,
-                     uint32_t time_sampling,
-                     ExportSettings &settings,
-                     ParticleSystem *psys);
-
-private:
-       virtual void do_write();
-
-       void write_hair_sample(DerivedMesh *dm,
-                              ParticleSettings *part,
-                              std::vector<Imath::V3f> &verts,
-                              std::vector<Imath::V3f> &norm_values,
-                              std::vector<Imath::V2f> &uv_values,
-                              std::vector<int32_t> &hvertices);
-
-       void write_hair_child_sample(DerivedMesh *dm,
-                                    ParticleSettings *part,
-                                    std::vector<Imath::V3f> &verts,
-                                    std::vector<Imath::V3f> &norm_values,
-                                    std::vector<Imath::V2f> &uv_values,
-                                    std::vector<int32_t> &hvertices);
-};
-
 /* ************************************************************************** 
*/
 
 class AbcCurveWriter : public AbcObjectWriter {
diff --git a/source/blender/alembic/intern/abc_exporter.cc 
b/source/blender/alembic/intern/abc_exporter.cc
index 201cb2e..253e752 100644
--- a/source/blender/alembic/intern/abc_exporter.cc
+++ b/source/blender/alembic/intern/abc_exporter.cc
@@ -28,6 +28,7 @@
 #include <Alembic/AbcCoreOgawa/All.h>
 
 #include "abc_camera.h"
+#include "abc_curves.h"
 #include "abc_hair.h"
 #include "abc_mesh.h"
 #include "abc_nurbs.h"
diff --git a/source/blender/alembic/intern/abc_hair.cc 
b/source/blender/alembic/intern/abc_hair.cc
index f5053d6..7e2b63b 100644
--- a/source/blender/alembic/intern/abc_hair.cc
+++ b/source/blender/alembic/intern/abc_hair.cc
@@ -30,29 +30,18 @@
 extern "C" {
 #include "MEM_guardedalloc.h"
 
-#include "DNA_curve_types.h"
 #include "DNA_modifier_types.h"
 
 #include "BLI_listbase.h"
 #include "BLI_math_geom.h"
 
-#include "BKE_curve.h"
 #include "BKE_DerivedMesh.h"
 #incl

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to