From f75b8a04596af44ade4e3c56b7fccd7ea1175725 Mon Sep 17 00:00:00 2001
From: Alecu100 <lui_alecu@yahoo.co.uk>
Date: Thu, 12 Jan 2012 03:47:14 +0200
Subject: [PATCH] Added support for adding new control points and editing the
 offsets in the NiBSplineTransformInterpolator for the start of the control
 points. Also made niflib compile with the latest version of qhull.

---
 src/nifqhull.cpp                           |  1 +
 src/obj/NiBSplineData.cpp                  | 40 ++++++++++++++++++++++
 src/obj/NiBSplineTransformInterpolator.cpp | 23 +++++++++++++
 3 files changed, 64 insertions(+)

diff --git a/src/nifqhull.cpp b/src/nifqhull.cpp
index cfb8dbc9..f8c7c3f7 100644
--- a/src/nifqhull.cpp
+++ b/src/nifqhull.cpp
@@ -25,6 +25,7 @@ extern "C"
 #include "../qhull/src/libqhull/poly2.c"
 #include "../qhull/src/libqhull/geom2.c"
 #include "../qhull/src/libqhull/userprintf.c"
+#include "../qhull/src/libqhull/userprintf_rbox.c"
 #include "../qhull/src/libqhull/usermem.c"
 #include "../qhull/src/libqhull/random.c"
 #include "../qhull/src/libqhull/rboxlib.c"
diff --git a/src/obj/NiBSplineData.cpp b/src/obj/NiBSplineData.cpp
index 13708c6e..21aa5e55 100644
--- a/src/obj/NiBSplineData.cpp
+++ b/src/obj/NiBSplineData.cpp
@@ -147,6 +147,27 @@ vector<float> NiBSplineData::GetFloatControlPoints() const
 	return floatControlPoints;
 }
 
+void NiBSplineData::SetFloatControlPoints( vector<float> value ) 
+{
+	this->floatControlPoints.clear();
+	this->numFloatControlPoints = value.size();
+
+	for(int i = 0; i < value.size(); i++) {
+		this->floatControlPoints.push_back(value[i]);
+	}
+}
+
+
+void NiBSplineData::AppendFloatControlPoints( vector<float> value )
+{
+	this->numFloatControlPoints += value.size();
+
+	for(int i = 0; i < this->floatControlPoints.size(); i++) {
+		this->floatControlPoints.push_back(value[i]);
+	}
+}
+
+
 vector<float> NiBSplineData::GetFloatControlPointRange(int offset, int count) const
 {
 	vector<float> value;
@@ -163,6 +184,25 @@ vector<short > NiBSplineData::GetShortControlPoints() const
 	return shortControlPoints;
 }
 
+void NiBSplineData::SetShortControlPoints( vector<short> value )
+{
+	this->shortControlPoints.clear();
+	this->numShortControlPoints = value.size();
+
+	for(int i = 0; i < value.size(); i++) {
+		this->shortControlPoints.push_back(value);
+	}
+}
+
+void NiBSplineData::AppendShortControlPoints( vector<short> value )
+{
+	this->numShortControlPoints += value.size();
+
+	for(int i = 0; i < value.size(); i++) {
+		this->shortControlPoints.push_back(value[i]);
+	}
+}
+
 vector<short > NiBSplineData::GetShortControlPointRange(int offset, int count) const
 {
    vector<short> value;
diff --git a/src/obj/NiBSplineTransformInterpolator.cpp b/src/obj/NiBSplineTransformInterpolator.cpp
index dcd74704..cd81a1df 100644
--- a/src/obj/NiBSplineTransformInterpolator.cpp
+++ b/src/obj/NiBSplineTransformInterpolator.cpp
@@ -124,6 +124,14 @@ void NiBSplineTransformInterpolator::SetTranslation( Vector3 value ) {
 	translation = value;
 }
 
+int NiBSplineTransformInterpolator::GetTranslationOffset() {
+	return translationOffset;
+}
+
+void NiBSplineTransformInterpolator::SetTranslationOffset( int value ) {
+	translationOffset = value;
+}
+
 Quaternion NiBSplineTransformInterpolator::GetRotation() const {
 	return rotation;
 }
@@ -132,6 +140,14 @@ void NiBSplineTransformInterpolator::SetRotation( Quaternion value ) {
 	rotation = value;
 }
 
+int NiBSplineTransformInterpolator::GetRotationOffset() {
+	return rotationOffset;
+}
+
+void NiBSplineTransformInterpolator::SetRotationOffset( int value ) {
+	rotationOffset = value;
+}
+
 float NiBSplineTransformInterpolator::GetScale() const {
 	return scale;
 }
@@ -140,6 +156,13 @@ void NiBSplineTransformInterpolator::SetScale( float value ) {
 	scale = value;
 }
 
+int NiBSplineTransformInterpolator::GetScaleOffset() {
+	return scaleOffset;
+}
+
+void Niflib::NiBSplineTransformInterpolator::SetScaleOffset( int value ) {
+	scaleOffset = value;
+}
 
 vector< Quaternion > NiBSplineTransformInterpolator::GetQuatRotateControlData() const
 {
-- 
GitLab