9#include <thrust/sort.h> 
   18    template<
typename TDataType>
 
   22        this->varSpacing()->setRange(0.001, 1.0);
 
   24        auto connect = std::make_shared<FCallBackFunc>(
 
   26                auto input = this->inTriangleSet();
 
   27                Node* src = 
dynamic_cast<Node*
>(input->getSource()->parent());
 
   35        this->inTriangleSet()->attach(
connect);
 
 
   38    template<
typename TDataType>
 
   43    template<
typename TDataType>
 
   46        std::shared_ptr<TriangleSet<TDataType>> triSet = std::make_shared<TriangleSet<TDataType>>();
 
   47        triSet->loadObjFile(filename);
 
   49        triSet->scale(scale_value);
 
   51        triSet->translate(translate_value);
 
   53        Quat<Real> q(rotate_value[0], rotate_value[1], rotate_value[2], 1.0f );
 
   56        this->inTriangleSet()->setDataPtr(triSet);
 
   58        this->inTriangleSet()->getDataPtr()->update();
 
 
   62    template<
typename TDataType>
 
   65        std::shared_ptr<TriangleSet<TDataType>> triSet = std::make_shared<TriangleSet<TDataType>>();
 
   66        triSet->loadObjFile(filename);
 
   68        this->inTriangleSet()->setDataPtr(triSet);
 
 
   71    template<
typename TDataType>
 
   75        auto triSet = this->inTriangleSet()->getDataPtr();
 
   76        auto& points_pos = triSet->getPoints();
 
   79        Coord min_box = reduce.
minimum(points_pos.begin(), points_pos.size());
 
   80        Coord max_box = reduce.
maximum(points_pos.begin(), points_pos.size());
 
   82        uint padding = this->varPadding()->getData();
 
   83        Real dx = this->varSpacing()->getData();
 
   86        min_box -= padding * 
dx *unit;
 
   87        max_box += padding * 
dx *unit;
 
   89        int level = this->varLevelNumber()->getData();
 
   90        int coef = std::floor(
pow(
float(2), 
int(level - 1)) + 
float(0.1));
 
   92        int nx_offset = std::floor(min_box[0] / 
dx + 1e-5);
 
   93        int ny_offset = std::floor(min_box[1] / 
dx + 1e-5);
 
   94        int nz_offset = std::floor(min_box[2] / 
dx + 1e-5);
 
   95        if ((nx_offset % coef) < 0)
 
   96            nx_offset = nx_offset - (coef - 
abs(nx_offset % coef));
 
   98            nx_offset = nx_offset - (nx_offset % coef);
 
  100        if ((ny_offset % coef) < 0)
 
  101            ny_offset = ny_offset - (coef - 
abs(ny_offset % coef));
 
  103            ny_offset = ny_offset - (ny_offset % coef);
 
  105        if ((nz_offset % coef) < 0)
 
  106            nz_offset = nz_offset - (coef - 
abs(nz_offset % coef));
 
  108            nz_offset = nz_offset - (nz_offset % coef);
 
  109        min_box[0] = nx_offset * 
dx;
 
  110        min_box[1] = ny_offset * 
dx;
 
  111        min_box[2] = nz_offset * 
dx;
 
  113        int nx_offset1 = std::floor(max_box[0] / 
dx + 1e-5);
 
  114        int ny_offset1 = std::floor(max_box[1] / 
dx + 1e-5);
 
  115        int nz_offset1 = std::floor(max_box[2] / 
dx + 1e-5);
 
  116        if ((nx_offset1 % coef) < 0)
 
  117            nx_offset1 = nx_offset1 - (nx_offset1 % coef);
 
  119            nx_offset1 = nx_offset1 + (coef - (nx_offset1 % coef));
 
  121        if ((ny_offset1 % coef) < 0)
 
  122            ny_offset1 = ny_offset1 - (ny_offset1 % coef);
 
  124            ny_offset1 = ny_offset1 + (coef - (ny_offset1 % coef));
 
  126        if ((nz_offset1 % coef) < 0)
 
  127            nz_offset1 = nz_offset1 - (nz_offset1 % coef);
 
  129            nz_offset1 = nz_offset1 + (coef - (nz_offset1 % coef));
 
  130        max_box[0] = nx_offset1 * 
dx;
 
  131        max_box[1] = ny_offset1 * 
dx;
 
  132        max_box[2] = nz_offset1 * 
dx;
 
  134        m_nx = std::ceil((max_box[0] - min_box[0]) / 
dx - 
float(0.1));
 
  135        m_ny = std::ceil((max_box[1] - min_box[1]) / 
dx - 
float(0.1));
 
  136        m_nz = std::ceil((max_box[2] - min_box[2]) / 
dx - 
float(0.1));
 
 
  143    template<
typename TDataType>
 
  146        int level = this->varLevelNumber()->getData();
 
  148        Real dx = this->varSpacing()->getData();
 
  161            this->inTriangleSet()->getDataPtr(),
 
  166            this->varAABBPadding()->getData(),
 
  195        int grid_total_num = 0;
 
  212            grid_total_num = grid0.size() + grid1.size() + gridT.size();
 
  213            grid_total.resize(grid_total_num);
 
  214            grid_total_value.resize(grid_total_num);
 
  215            this->
m_object.resize(grid_total_num);
 
  216            this->
m_normal.resize(grid_total_num);
 
  236                (grid0.size() + grid1.size()),
 
  295            grid_total_num = grid0.size() + grid1.size() + grid2.size() + gridT.size();
 
  296            grid_total.resize(grid_total_num);
 
  297            grid_total_value.resize(grid_total_num);
 
  298            this->
m_object.resize(grid_total_num);
 
  299            this->
m_normal.resize(grid_total_num);
 
  323                (grid0.size() + grid1.size()),
 
  324                (grid0.size() + grid1.size() + grid2.size()),
 
  356            grid2_object.clear();
 
  357            grid2_normal.clear();
 
  412            grid_total_num = grid0.size() + grid1.size() + grid2.size() + grid3.size() + gridT.size();
 
  413            grid_total.resize(grid_total_num);
 
  414            grid_total_value.resize(grid_total_num);
 
  415            this->
m_object.resize(grid_total_num);
 
  416            this->
m_normal.resize(grid_total_num);
 
  444                (grid0.size() + grid1.size()),
 
  445                (grid0.size() + grid1.size() + grid2.size()),
 
  446                (grid0.size() + grid1.size() + grid2.size() + grid3.size()),
 
  482            grid2_object.clear();
 
  483            grid2_normal.clear();
 
  486            grid3_object.clear();
 
  487            grid3_normal.clear();
 
  492        auto sdf_oct = this->stateSDFTopology()->allocate();
 
  493        sdf_oct->setLevelNum(level);
 
  495        sdf_oct->setVoxelOctree(grid_total);
 
  499        sdf_oct->updateNeighbors();
 
  501        sdf_oct->setSdfValues(grid_total_value);
 
  504        grid_total_value.clear();
 
  507        grid0_object.clear();
 
  508        grid0_normal.clear();
 
  511        grid1_object.clear();
 
  512        grid1_normal.clear();
 
  515        gridT_object.clear();
 
  516        gridT_normal.clear();
 
  521        std::printf(
"Generated ASDF is: %d %d %d, %d %d %d, %f, %f %f %f \n",
 
 
  527    template<
typename TDataType>
 
  530        Coord move_vector = this->varForwardVector()->getData();
 
  534            auto triSet = this->inTriangleSet()->getDataPtr();
 
  536            triSet->translate(move_vector);
 
 
  540    template<
typename TDataType>
 
#define DEFINE_CLASS(name)
 
#define IMPLEMENT_TCLASS(name, T1)
 
virtual void setVisible(bool visible)
Set the visibility of context.
 
bool connect(NodePort *nPort)
Depth-first tree traversal.
 
T maximum(const T *val, const uint num)
 
T minimum(const T *val, const uint num)
 
static void levelBottom(DArray< VoxelOctreeNode< Coord > > &grid0, DArray< Real > &grid0_value, DArray< Coord > &grid0_object, DArray< Coord > &grid0_normal, std::shared_ptr< TriangleSet< TDataType > > triSet, Coord m_origin, int m_nx, int m_ny, int m_nz, int padding, int &m_level0, Real m_dx)
 
static void levelMiddle(DArray< VoxelOctreeNode< Coord > > &grid1, DArray< Real > &grid1_value, DArray< Coord > &grid1_object, DArray< Coord > &grid1_normal, DArray< VoxelOctreeNode< Coord > > &grid0, DArray< Coord > &grid0_object, DArray< Coord > &grid0_normal, Coord m_origin, Level multi_level, int m_nx, int m_ny, int m_nz, Real m_dx)
 
static void collectionGridsFour(DArray< VoxelOctreeNode< Coord > > &total_nodes, DArray< Real > &total_value, DArray< Coord > &total_object, DArray< Coord > &total_normal, DArray< VoxelOctreeNode< Coord > > &level0_nodes, DArray< Real > &level0_value, DArray< Coord > &level0_object, DArray< Coord > &level0_normal, DArray< VoxelOctreeNode< Coord > > &level1_nodes, DArray< Real > &level1_value, DArray< Coord > &level1_object, DArray< Coord > &level1_normal, DArray< VoxelOctreeNode< Coord > > &level2_nodes, DArray< Real > &level2_value, DArray< Coord > &level2_object, DArray< Coord > &level2_normal, DArray< VoxelOctreeNode< Coord > > &levelT_nodes, DArray< Real > &levelT_value, DArray< Coord > &levelT_object, DArray< Coord > &levelT_normal, int level0_num, int level1_num, int level2_num, int grid_total_num)
 
static void levelTop(DArray< VoxelOctreeNode< Coord > > &grid2, DArray< Real > &grid2_value, DArray< Coord > &grid2_object, DArray< Coord > &grid2_normal, DArray< VoxelOctreeNode< Coord > > &grid1, DArray< Coord > &grid1_object, DArray< Coord > &grid1_normal, Coord m_origin, Level multi_level, int m_nx, int m_ny, int m_nz, Real m_dx)
 
static void collectionGridsFive(DArray< VoxelOctreeNode< Coord > > &total_nodes, DArray< Real > &total_value, DArray< Coord > &total_object, DArray< Coord > &total_normal, DArray< VoxelOctreeNode< Coord > > &level0_nodes, DArray< Real > &level0_value, DArray< Coord > &level0_object, DArray< Coord > &level0_normal, DArray< VoxelOctreeNode< Coord > > &level1_nodes, DArray< Real > &level1_value, DArray< Coord > &level1_object, DArray< Coord > &level1_normal, DArray< VoxelOctreeNode< Coord > > &level2_nodes, DArray< Real > &level2_value, DArray< Coord > &level2_object, DArray< Coord > &level2_normal, DArray< VoxelOctreeNode< Coord > > &level3_nodes, DArray< Real > &level3_value, DArray< Coord > &level3_object, DArray< Coord > &level3_normal, DArray< VoxelOctreeNode< Coord > > &levelT_nodes, DArray< Real > &levelT_value, DArray< Coord > &levelT_object, DArray< Coord > &levelT_normal, int level0_num, int level1_num, int level2_num, int level3_num, int grid_total_num)
 
static void collectionGridsThree(DArray< VoxelOctreeNode< Coord > > &total_nodes, DArray< Real > &total_value, DArray< Coord > &total_object, DArray< Coord > &total_normal, DArray< VoxelOctreeNode< Coord > > &level0_nodes, DArray< Real > &level0_value, DArray< Coord > &level0_object, DArray< Coord > &level0_normal, DArray< VoxelOctreeNode< Coord > > &level1_nodes, DArray< Real > &level1_value, DArray< Coord > &level1_object, DArray< Coord > &level1_normal, DArray< VoxelOctreeNode< Coord > > &levelT_nodes, DArray< Real > &levelT_value, DArray< Coord > &levelT_object, DArray< Coord > &levelT_normal, int level0_num, int level1_num, int grid_total_num)
 
This is a GPU-based implementation of algebraic adaptive signed distance field (AASDF)....
 
void resetStates() override
 
void updateTopology() override
 
~VolumeOctreeGenerator() override
 
void updateStates() override
 
void load(std::string filename)
 
This is an implementation of AdditiveCCD based on peridyno.
 
Array< T, DeviceType::GPU > DArray
 
DYN_FUNC Complex< Real > pow(const Complex< Real > &, const Real &)
 
DYN_FUNC T abs(const T &v)
 
constexpr Real REAL_EPSILON