DaxToolkit
DaxToolkit copied to clipboard
GenerateTopology + User CellConnections not saving properly
dax::cont::UniformGrid<> inputGrid; inputGrid.SetExtent(minE,maxE); inputGrid.SetOrigin( dax::make_Vector3(this->Origin[0], this->Origin[1], this->Origin[2])); inputGrid.SetSpacing( dax::make_Vector3(this->Spacing[0], this->Spacing[1], this->Spacing[2]));
typedef dax::cont::GenerateTopology<dax::worklet::Tetrahedralize, dax::cont::ArrayHandleConstantValuedax::Id > GenerateT; typedef GenerateT::ClassifyResultType ClassifyResultType;
dax::cont::Scheduler<> scheduler;
//for every input cell generate 5 output cells, using a constant //value array handle ClassifyResultType classification(5,inputGrid.GetNumberOfCells());
dax::worklet::Tetrahedralize tetWorklet; GenerateT generateTets(classification,tetWorklet);
//don't remove duplicate points. generateTets.SetRemoveDuplicatePoints(false);
//we want to use our Connectivity array as the dax unstructured grids //connectivity array. This way dax will directly write into our allocated //memory and we won't have to copy anything dax::cont::ArrayHandle< dax::Id > connHandle = dax::cont::make_ArrayHandle( this->Connectivity, 4 * this->NumTets );
dax::cont::UnstructuredGrid< dax::CellTagTetrahedron > outGrid; outGrid.SetCellConnections(connHandle);
scheduler.Invoke(generateTets,inputGrid,outGrid);
//this will copy the memory back to the host if we are using cuda, and //for OpenMP and TBB it is a no op connHandle.CopyInto(this->Connectivity); // if we don't do this the control side isn't valid
Looking into this, Dax is setup so that user allocated space can only be used for reading not writing.