mirror of
https://github.com/OpenCMT/uLib.git
synced 2025-12-06 07:21:31 +01:00
[uLib Geometry]
- Adds Type combiner. - change names to image map (WARNING some classess may not be already uploaded)
This commit is contained in:
@@ -63,6 +63,8 @@ private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
template < typename T >
|
||||
class DataVector : public AbstractArray {
|
||||
public:
|
||||
|
||||
@@ -65,6 +65,7 @@ public:
|
||||
|
||||
|
||||
class DataVectorImage : public ImageData {
|
||||
typedef float ScalarT;
|
||||
public:
|
||||
|
||||
inline void * GetDataPointer(const Id_t id) const {
|
||||
@@ -81,11 +82,13 @@ public:
|
||||
m_Data->SetSize(size.prod());
|
||||
}
|
||||
|
||||
// uLibRefMacro(Data,AbstractArray*)
|
||||
uLibRefMacro(Data,SmartPointer<AbstractArray>)
|
||||
uLibRefMacro(Scalars,ProgrammableAccessor<double>)
|
||||
uLibRefMacro(Scalars,ProgrammableAccessor<ScalarT>)
|
||||
private:
|
||||
// AbstractArray* m_Data;
|
||||
SmartPointer<AbstractArray> m_Data;
|
||||
ProgrammableAccessor<double> m_Scalars;
|
||||
ProgrammableAccessor<ScalarT> m_Scalars;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -113,14 +113,23 @@ public:
|
||||
|
||||
inline void PreRotate(const Matrix3f &m) { this->m_T.prerotate(m); }
|
||||
|
||||
inline void QuaternionRotate(const Vector4f &q)
|
||||
{ this->m_T.rotate(Eigen::Quaternion<float>(q)); }
|
||||
inline void Rotate(const float angle, Vector3f axis)
|
||||
{
|
||||
axis.normalize(); // prehaps not necessary ( see eigens )
|
||||
Eigen::AngleAxisf ax(angle,axis);
|
||||
this->m_T.rotate(Eigen::Quaternion<float>(ax));
|
||||
}
|
||||
|
||||
inline void EulerYZYRotate(const Vector3f &e) {
|
||||
inline void Rotate(const Vector3f euler_axis) {
|
||||
float angle = euler_axis.norm();
|
||||
Rotate(angle,euler_axis);
|
||||
}
|
||||
|
||||
inline void EulerYZYRotate(const Vector3f &euler_angles) {
|
||||
Matrix3f mat;
|
||||
mat = Eigen::AngleAxisf(e.x(), Vector3f::UnitY())
|
||||
* Eigen::AngleAxisf(e.y(), Vector3f::UnitZ())
|
||||
* Eigen::AngleAxisf(e.z(), Vector3f::UnitY());
|
||||
mat = Eigen::AngleAxisf(euler_angles.x(), Vector3f::UnitY())
|
||||
* Eigen::AngleAxisf(euler_angles.y(), Vector3f::UnitZ())
|
||||
* Eigen::AngleAxisf(euler_angles.z(), Vector3f::UnitY());
|
||||
m_T.rotate(mat);
|
||||
}
|
||||
|
||||
@@ -133,8 +142,12 @@ public:
|
||||
};
|
||||
|
||||
|
||||
typedef Eigen::Quaternion<float> Quaternionf;
|
||||
typedef Eigen::Quaternion<double> Quaterniond;
|
||||
|
||||
}
|
||||
|
||||
|
||||
} // uLib
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9,13 +9,13 @@
|
||||
|
||||
|
||||
|
||||
//#include "boost/geometry.hpp"
|
||||
//#include "boost/geometry/geometries/adapted/c_array.hpp"
|
||||
//#include "boost/geometry/geometries/adapted/boost_array.hpp"
|
||||
//#include "boost/geometry/geometries/adapted/std_pair_as_segment.hpp"
|
||||
#include "boost/geometry.hpp"
|
||||
#include "boost/geometry/geometries/adapted/c_array.hpp"
|
||||
#include "boost/geometry/geometries/adapted/boost_array.hpp"
|
||||
#include "boost/geometry/geometries/adapted/std_pair_as_segment.hpp"
|
||||
|
||||
//#include "boost/geometry/geometries/register/point.hpp"
|
||||
//#include "boost/geometry/geometries/register/linestring.hpp"
|
||||
#include "boost/geometry/geometries/register/point.hpp"
|
||||
#include "boost/geometry/geometries/register/linestring.hpp"
|
||||
|
||||
|
||||
namespace uLib {
|
||||
@@ -42,8 +42,8 @@ inline Vector4f HPoint3f(float x, float y, float z) { return Vector4f(x,y,z,1);
|
||||
inline Vector4f HPoint3f(const Vector4f &v) { return Vector4f(v(0),v(1),v(2),1); }
|
||||
|
||||
|
||||
// this is an example of function imported from eigen //
|
||||
//using boost::geometry::distance;
|
||||
// this is an example of function imported from boost //
|
||||
using boost::geometry::distance;
|
||||
|
||||
} // uLib
|
||||
|
||||
@@ -51,17 +51,17 @@ inline Vector4f HPoint3f(const Vector4f &v) { return Vector4f(v(0),v(1),v(2),1);
|
||||
|
||||
// BOOST GEOMETRY REGISTRATION //
|
||||
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_2D(uLib::Vector2i, int, boost::geometry::cs::cartesian, operator()(0), operator()(1))
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector3i, int, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector4i, int, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_2D(uLib::Vector2i, int, boost::geometry::cs::cartesian, operator()(0), operator()(1))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector3i, int, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector4i, int, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_2D(uLib::Vector2f, float, boost::geometry::cs::cartesian, operator()(0), operator()(1))
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector3f, float, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector4f, float, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_2D(uLib::Vector2f, float, boost::geometry::cs::cartesian, operator()(0), operator()(1))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector3f, float, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector4f, float, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_2D(uLib::Vector2d, double, boost::geometry::cs::cartesian, operator()(0), operator()(1))
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector3d, double, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
//BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector4d, double, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_2D(uLib::Vector2d, double, boost::geometry::cs::cartesian, operator()(0), operator()(1))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector3d, double, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
BOOST_GEOMETRY_REGISTER_POINT_3D(uLib::Vector4d, double, boost::geometry::cs::cartesian, operator()(0), operator()(1), operator()(2))
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ void VoxRaytracer::RayData::PrintSelf(std::ostream &o)
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
bool VoxRaytracer::GetEntryPoint(const HLine3f line, Vector4f &pt)
|
||||
bool VoxRaytracer::GetEntryPoint(const HLine3f line, Vector4f &pt) const
|
||||
{
|
||||
Vector4f s = m_Image->GetLocalPoint(line.direction());
|
||||
pt = m_Image->GetLocalPoint(line.origin());
|
||||
@@ -140,7 +140,7 @@ bool VoxRaytracer::GetEntryPoint(const HLine3f line, Vector4f &pt)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool VoxRaytracer::GetExitPoint(const HLine3f line, Vector4f &pt)
|
||||
bool VoxRaytracer::GetExitPoint(const HLine3f line, Vector4f &pt) const
|
||||
{
|
||||
HLine3f out = line;
|
||||
out.direction() *= -1;
|
||||
|
||||
@@ -67,9 +67,9 @@ public:
|
||||
public:
|
||||
VoxRaytracer(ImageData &image) : m_Image(&image) {}
|
||||
|
||||
bool GetEntryPoint(const HLine3f line, Vector4f &pt);
|
||||
bool GetEntryPoint(const HLine3f line, Vector4f &pt) const;
|
||||
|
||||
bool GetExitPoint(const HLine3f line, Vector4f &pt);
|
||||
bool GetExitPoint(const HLine3f line, Vector4f &pt) const;
|
||||
|
||||
RayData TraceBetweenPoints(const Vector4f &in, const Vector4f &out) const;
|
||||
|
||||
|
||||
@@ -23,8 +23,12 @@
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
#include "testing-prototype.h"
|
||||
#include "Math/ImageData.h"
|
||||
#include <Core/Mpl.h>
|
||||
|
||||
#include <root/TRandom.h>
|
||||
|
||||
using namespace uLib;
|
||||
|
||||
@@ -38,7 +42,7 @@ struct MyVoxel {
|
||||
|
||||
struct VoxelMean : public MyVoxel {
|
||||
VoxelMean() {}
|
||||
void SetValue(const float value) { this->value += value; ++count; }
|
||||
void SetValue(const float _value) { value += _value; ++count; }
|
||||
float GetValue() const { return value/count; }
|
||||
};
|
||||
}
|
||||
@@ -48,31 +52,42 @@ struct VoxelMean : public MyVoxel {
|
||||
|
||||
int main() {
|
||||
|
||||
DataVector<MyVoxel> v;
|
||||
// DataVector<MyVoxel> v;
|
||||
|
||||
DataVectorImage img;
|
||||
|
||||
img.Data() = v;
|
||||
img.Scalars().SetAccessFunctions(&MyVoxel::value);
|
||||
img.SetDims(Vector3i(3,3,3));
|
||||
// img.Data() = v;
|
||||
// img.Scalars().SetAccessFunctions(&MyVoxel::value);
|
||||
// img.SetDims(Vector3i(3,3,3));
|
||||
|
||||
for (int x=0; x<img.GetDims().prod(); ++x){
|
||||
img.SetValue(x,x);
|
||||
std::cout << img.UnMap(x).transpose() << " -> " << img.GetValue(x) << "\n";
|
||||
}
|
||||
// for (int x=0; x<img.GetDims().prod(); ++x){
|
||||
// img.SetValue(x,x);
|
||||
// std::cout << img.UnMap(x).transpose() << " -> " << img.GetValue(x) << "\n";
|
||||
// }
|
||||
|
||||
DataVector<VoxelMean> vm;
|
||||
|
||||
Vector<VoxelMean> vm_2;
|
||||
vm_2.resize(Vector3i(300,300,300).prod());
|
||||
|
||||
img.Data() = vm;
|
||||
img.SetDims(Vector3i(3,3,3));
|
||||
img.SetDims(Vector3i(300,300,300));
|
||||
img.Scalars().SetAccessFunctions(&VoxelMean::GetValue,&VoxelMean::SetValue);
|
||||
|
||||
// TRandom random;
|
||||
|
||||
|
||||
for(int i=0; i< 100; ++i)
|
||||
for (int x=0; x<img.GetDims().prod(); ++x){
|
||||
img.SetValue(x,x);
|
||||
img.SetValue(x,x+2);
|
||||
img.SetValue(x,x-1);
|
||||
std::cout << img.UnMap(x).transpose() << " -> " << img.GetValue(x) << "\n";
|
||||
// vm.Data()[x].value += 1; vm.Data()[x].count++;
|
||||
// vm.Data()[x].SetValue(1);
|
||||
vm_2[x].SetValue(1);
|
||||
// img.SetValue(x,1);
|
||||
// boost::bind(&VoxelMean::SetValue,&vm.Data()[x], _1)(1);
|
||||
// std::cout << img.UnMap(x).transpose() << " -> " << img.GetValue(x) << "\n";
|
||||
}
|
||||
|
||||
// img.ExportToVtk("test.vtk");
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user