2#include "FrameToPointSet.h"
3#include "Topology/Frame.h"
4#include "Topology/PointSet.h"
8 template<typename TDataType>
9 FrameToPointSet<TDataType>::FrameToPointSet()
15 template<typename TDataType>
16 FrameToPointSet<TDataType>::FrameToPointSet(std::shared_ptr<Frame<TDataType>> from, std::shared_ptr<PointSet<TDataType>> to)
24 template<typename TDataType>
25 FrameToPointSet<TDataType>::~FrameToPointSet()
27 if (m_refPoints.begin() != NULL)
34 template<typename TDataType>
35 void FrameToPointSet<TDataType>::initialize(const Rigid& rigid, DArray<Coord>& points)
38 m_refPoints.resize(points.size());
39 m_refPoints.assign(points);
43 template<typename TDataType>
44 void FrameToPointSet<TDataType>::match(std::shared_ptr<Frame<TDataType>> from, std::shared_ptr<PointSet<TDataType>> to)
46 m_initFrom = std::make_shared<Frame<TDataType>>();
47 m_initTo = std::make_shared<PointSet<TDataType>>();
49 m_initFrom->copyFrom(*from);
50 m_initTo->copyFrom(*to);
54 template <typename Coord, typename Rigid, typename Matrix>
55 __global__ void ApplyRigidTranform(
59 DArray<Coord> refPoints,
63 int pId = threadIdx.x + (blockIdx.x * blockDim.x);
64 if (pId >= points.size()) return;
66 points[pId] = curCenter + curMat*refMat.transpose()*(refPoints[pId] - refCenter);
69 template<typename TDataType>
70 void FrameToPointSet<TDataType>::applyTransform(const Rigid& rigid, DArray<Coord>& points)
72 if (points.size() != m_refPoints.size())
74 std::cout << "The array sizes does not match for RigidToPoints" << std::endl;
77 uint pDims = cudaGridSize(points.size(), BLOCK_SIZE);
79 ApplyRigidTranform<Coord, Rigid, Matrix><< <pDims, BLOCK_SIZE >> >(points, rigid.getCenter(), rigid.getRotationMatrix(), m_refPoints, m_refRigid.getCenter(), m_refRigid.getRotationMatrix());
82 template<typename TDataType>
83 bool FrameToPointSet<TDataType>::apply()
85 DArray<Coord>& m_coords = m_initTo->getPoints();
87 uint pDims = cudaGridSize(m_coords.size(), BLOCK_SIZE);
89 ApplyRigidTranform<Coord, Rigid, Matrix> << <pDims, BLOCK_SIZE >> >(
92 m_from->getOrientation(),
94 m_initFrom->getCenter(),
95 m_initFrom->getOrientation());
101 template<typename TDataType>
102 bool FrameToPointSet<TDataType>::initializeImpl()
108 DEFINE_CLASS(FrameToPointSet);