master
lanxingxing 2024-08-28 18:34:49 +08:00
parent 69314f8639
commit 0d72b07729
6 changed files with 757 additions and 31 deletions

View File

@ -135,7 +135,7 @@ void PropPickerInteractionStyle::setPointColor(QSet<int>point,double color[3])
void PropPickerInteractionStyle::setFaceColor(QSet<int>face,double color[3])
{
vtkDataArray *faceColor = m_boundarySetting->getCellStructure()->GetCellData()->GetScalars();
for (const int &pt : face) {
for (const int &pt : face) {
faceColor->SetComponent(pt, 0, color[0]);
faceColor->SetComponent(pt, 1, color[1]);
faceColor->SetComponent(pt, 2, color[2]);
@ -299,7 +299,7 @@ void PropPickerInteractionStyle::selectGridFace(vtkObject *caller, unsigned long
// ??? cell ??? ID ???
vtkIdList* pointIds = cell->GetPointIds();
std::cout << "Cell ID: " << cellId+1 << std::endl;
std::cout << "Grid ID:" << m_boundarySetting->getFaceIdToGridId(cellId) <<std::endl;
//std::cout << "Grid ID:" << m_boundarySetting->getFaceIdToGridId(cellId) <<std::endl;
// ?????????
vtkPoints* points = polyData->GetPoints();

View File

@ -20,6 +20,9 @@
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "processor/readNas.h"
#include "processor/gen3DGrid.h"
#include "processor/gen2DGrid.h"
#include<vtkPoints.h>
#include<vtkPolyData.h>
#include<vtkCellData.h>
@ -917,6 +920,232 @@ void PreProcessing::generateCubiod(float x,float y, float z, float ox,float oy,f
void PreProcessing::generateGrid(float maxgrid)
{
if(m_modelType == -1)
{
return;
}
if(!m_modelType)
{
gen3DGrid *read = new gen3DGrid;
float length = m_x;
float width = m_y;
float height = m_z;
length = 10;
width = 10;
height = 10;
read->setLength(length);
read->setWidth(width);
read->setHeight(height);
read->setMaxInterval(maxgrid);
int faceNum = 0;
read->genProcess();
m_gridStructure = read->getStructure();
m_pointStructure = vtkSmartPointer<vtkUnstructuredGrid>::New();
m_pointStructure->DeepCopy(m_gridStructure);
m_faceToPoint = read->getFaceToPoint();
m_faceToCell = read->getFaceToCell();
m_cellIdToGridCellId = read->getCellIdToGridIdMap();
//------------------------------------整体
vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New();
mapper->SetInputData(m_gridStructure);
//设置颜色
vtkDataArray *cellcolor = vtkUnsignedCharArray::New();
cellcolor->SetNumberOfComponents(3);
m_gridStructure->GetCellData()->SetScalars(cellcolor);
cellcolor->SetNumberOfTuples(m_gridStructure->GetNumberOfCells());
cellcolor->FillComponent(0, 255);
cellcolor->FillComponent(1, 255);
cellcolor->FillComponent(2, 255);
m_cellActor = vtkSmartPointer<vtkActor>::New();
m_cellActor->SetMapper(mapper);
m_cellActor->GetProperty()->EdgeVisibilityOn();
m_visualWidgetService->removeAllActor();
m_visualWidgetService->addActor(m_cellActor);
m_visualWidgetService->getRender()->ResetCamera();
m_visualWidgetService->getrenderWindow()->Render();
//---------------------------------------------线条
// vtkSmartPointer<vtkDataSetMapper> mapper2 = vtkSmartPointer<vtkDataSetMapper>::New();
// vtkSmartPointer<vtkUnstructuredGrid> test = read->getTest();
// mapper2->SetInputData(test);
// //设置颜色
// vtkDataArray *cellcolor2 = vtkUnsignedCharArray::New();
// cellcolor2->SetNumberOfComponents(3);
// test->GetCellData()->SetScalars(cellcolor2);
// cellcolor2->SetNumberOfTuples(test->GetNumberOfCells());
// cellcolor2->FillComponent(0, 255);
// cellcolor2->FillComponent(1, 0);
// cellcolor2->FillComponent(2, 0);
// vtkSmartPointer<vtkActor> tt = vtkSmartPointer<vtkActor>::New();
// tt->SetMapper(mapper2);
// m_visualWidgetService->addActor(tt);
// m_visualWidgetService->getRender()->ResetCamera();
// m_visualWidgetService->getrenderWindow()->Render();
//---------------------------------------------线条
//点
m_sphereSource = vtkSmartPointer<vtkSphereSource>::New();
m_sphereSource->SetRadius(0.00007); // Adjust the radius to change the size of the points
vtkSmartPointer<vtkGlyph3D> glyphFilter = vtkSmartPointer<vtkGlyph3D>::New();
glyphFilter->SetInputData(m_pointStructure);
glyphFilter->SetSourceConnection(m_sphereSource->GetOutputPort());
glyphFilter->SetColorModeToColorByScalar(); // Use scalar data for colors
glyphFilter->Update();
vtkSmartPointer<vtkPolyDataMapper> glyphMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
glyphMapper->SetInputConnection(glyphFilter->GetOutputPort());
glyphMapper->ScalarVisibilityOn(); // Ensure colors are visible
glyphMapper->SetScalarModeToUsePointData();
m_pointActor = vtkSmartPointer<vtkActor>::New();
m_pointActor->SetMapper(glyphMapper);
m_pointActor->SetPickable(false);
//设置点颜色
vtkSmartPointer<vtkUnsignedCharArray> pointColor = vtkSmartPointer<vtkUnsignedCharArray>::New();
pointColor->SetNumberOfComponents(3);
pointColor->SetName("Colors");
pointColor->SetNumberOfTuples(m_pointStructure->GetNumberOfPoints());
pointColor->FillComponent(0, 255);
pointColor->FillComponent(1, 255);
pointColor->FillComponent(2, 255);
m_pointStructure->GetPointData()->SetScalars(pointColor);
{
vtkSmartPointer<vtkRenderWindow> renderWindow = m_visualWidgetService->getrenderWindow();
vtkSmartPointer<vtkRenderer> renderer = m_visualWidgetService->getRender();
double distance = renderer->GetActiveCamera()->GetDistance();
qDebug()<<"distance "<<distance;
m_sphereSource->SetRadius(0.00007*distance/10);
}
m_status = 1;
}
else
{
gen2DGrid *read = new gen2DGrid;
float length = m_x;
float width = m_y;
float height = m_z;
length = 10;
width = 10;
height = 10;
read->setLength(length);
read->setWidth(width);
//read->setHeight(height);
read->setMaxInterval(maxgrid);
int faceNum = 0;
read->genProcess();
m_gridStructure = read->getStructure();
m_pointStructure = vtkSmartPointer<vtkUnstructuredGrid>::New();
m_pointStructure->DeepCopy(m_gridStructure);
m_faceToPoint = read->getFaceToPoint();
m_faceToCell = read->getFaceToCell();
m_cellIdToGridCellId = read->getCellIdToGridIdMap();
//------------------------------------整体
vtkSmartPointer<vtkDataSetMapper> mapper = vtkSmartPointer<vtkDataSetMapper>::New();
mapper->SetInputData(m_gridStructure);
//设置颜色
vtkDataArray *cellcolor = vtkUnsignedCharArray::New();
cellcolor->SetNumberOfComponents(3);
m_gridStructure->GetCellData()->SetScalars(cellcolor);
cellcolor->SetNumberOfTuples(m_gridStructure->GetNumberOfCells());
cellcolor->FillComponent(0, 255);
cellcolor->FillComponent(1, 0);
cellcolor->FillComponent(2, 0);
m_cellActor = vtkSmartPointer<vtkActor>::New();
m_cellActor->SetMapper(mapper);
m_cellActor->GetProperty()->EdgeVisibilityOn();
m_visualWidgetService->removeAllActor();
m_visualWidgetService->addActor(m_cellActor);
m_visualWidgetService->getRender()->ResetCamera();
m_visualWidgetService->getrenderWindow()->Render();
//点
m_sphereSource = vtkSmartPointer<vtkSphereSource>::New();
m_sphereSource->SetRadius(0.00007); // Adjust the radius to change the size of the points
vtkSmartPointer<vtkGlyph3D> glyphFilter = vtkSmartPointer<vtkGlyph3D>::New();
glyphFilter->SetInputData(m_pointStructure);
glyphFilter->SetSourceConnection(m_sphereSource->GetOutputPort());
glyphFilter->SetColorModeToColorByScalar(); // Use scalar data for colors
glyphFilter->Update();
vtkSmartPointer<vtkPolyDataMapper> glyphMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
glyphMapper->SetInputConnection(glyphFilter->GetOutputPort());
glyphMapper->ScalarVisibilityOn(); // Ensure colors are visible
glyphMapper->SetScalarModeToUsePointData();
m_pointActor = vtkSmartPointer<vtkActor>::New();
m_pointActor->SetMapper(glyphMapper);
m_pointActor->SetPickable(false);
//设置点颜色
vtkSmartPointer<vtkUnsignedCharArray> pointColor = vtkSmartPointer<vtkUnsignedCharArray>::New();
pointColor->SetNumberOfComponents(3);
pointColor->SetName("Colors");
pointColor->SetNumberOfTuples(m_pointStructure->GetNumberOfPoints());
pointColor->FillComponent(0, 255);
pointColor->FillComponent(1, 255);
pointColor->FillComponent(2, 255);
m_pointStructure->GetPointData()->SetScalars(pointColor);
{
vtkSmartPointer<vtkRenderWindow> renderWindow = m_visualWidgetService->getrenderWindow();
vtkSmartPointer<vtkRenderer> renderer = m_visualWidgetService->getRender();
double distance = renderer->GetActiveCamera()->GetDistance();
qDebug()<<"distance "<<distance;
m_sphereSource->SetRadius(0.00007*distance/10);
}
m_status = 1;
}
}
/*
void PreProcessing::generateGrid(float maxgrid)
{
std::cout<<"666666666666666666666666666"<<std::endl;
if(m_modelType == -1)
{
return;
@ -1268,23 +1497,6 @@ void PreProcessing::generateGrid(float maxgrid)
}
}
/*for (int i=0;i<vec_points.size();i++)
{
std::cout<<vec_points[i];
std::cout<<" ";
if(i%3==2)
std::cout<<endl;
}
for (int i=0;i<vec_elements.size();i++)
{
std::cout<<vec_elements[i];
std::cout<<" ";
if(i%8==7)
std::cout<<endl;
}*/
//char hexIDstr_cor[100];
ostringstream ostr2;
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
@ -1377,4 +1589,4 @@ void PreProcessing::generateGrid(float maxgrid)
actor->GetProperty()->SetColor(0.85,0.85,0.85);
m_visualWidgetService->addActor(actor);
}
}
}*/

View File

@ -12,6 +12,7 @@
#include<vtkCellData.h>
#include<vtkCellArray.h>
#include<vtkQuad.h>
#include<vtkLine.h>
#include<vtkHexahedron.h>
#include<vtkUnstructuredGrid.h>
#include<vtkUnstructuredGridWriter.h>
@ -25,6 +26,7 @@ gen2DGrid::gen2DGrid()
{
m_vtk_actor = vtkSmartPointer<vtkActor>::New();
m_grid = vtkSmartPointer<vtkUnstructuredGrid>::New();
m_grid_surface = vtkSmartPointer<vtkUnstructuredGrid>::New();
//1 center 0 leftBottom
m_offset_type = 0;
@ -119,20 +121,31 @@ void gen2DGrid::genProcess()
point_max_z = origin_z + height/2.0;
}
float temp_x = 0.0;
float temp_y = 0.0;
//float temp_z = 0.0;
vec_set_point.clear();
std::set<int> set_point0;
std::set<int> set_point1;
std::set<int> set_point2;
std::set<int> set_point3;
m_faceToPoint.resize(4+1);
m_faceToCell.resize(4+1);
for (int j=0;j<use_number_y;j++)
{
temp_y = point_min_y + use_interval_y*j;
if (j==use_number_y-1)
{
temp_y = point_max_y;
temp_y = point_max_y;
}
for (int i=0;i<use_number_x;i++)
{
temp_x = point_min_x + use_interval_x*i;
temp_x = point_min_x + use_interval_x*i;
if (i==use_number_x-1)
{
temp_x = point_max_x;
@ -140,9 +153,46 @@ void gen2DGrid::genProcess()
vec_points.push_back(temp_x);
vec_points.push_back(temp_y);
vec_points.push_back(0);
if(j==0)
{
set_point0.insert(j*use_number_x+i);
m_faceToPoint[0+1].insert(j*use_number_x+i+1);
}
if(j==use_number_y-1)
{
set_point1.insert(j*use_number_x+i);
m_faceToPoint[1+1].insert(j*use_number_x+i+1);
}
if(i==0)
{
set_point2.insert(j*use_number_x+i);
m_faceToPoint[2+1].insert(j*use_number_x+i+1);
}
if(i==use_number_x-1)
{
// std::cout<<j*use_number_x+i<<std::endl;
set_point3.insert(j*use_number_x+i);
m_faceToPoint[3+1].insert(j*use_number_x+i+1);
}
}
}
vec_set_point.push_back(set_point0);
vec_set_point.push_back(set_point1);
vec_set_point.push_back(set_point2);
vec_set_point.push_back(set_point3);
vec_set_cell.clear();
std::set<int> set_cell0;
std::set<int> set_cell1;
std::set<int> set_cell2;
std::set<int> set_cell3;
for (int j=0;j<use_number_y-1;j++)
{
for (int i=0;i<use_number_x-1;i++)
@ -151,8 +201,37 @@ void gen2DGrid::genProcess()
vec_elements.push_back((i+1)+j*use_number_x);
vec_elements.push_back((i+1)+(j+1)*use_number_x);
vec_elements.push_back(i+(j+1)*use_number_x);
if(j==0)
{
//std::cout<<j*(use_number_x-1)+i<<std::endl;
set_cell0.insert(j*(use_number_x-1)+i);
}
if(j==use_number_y-2)
{
set_cell1.insert(j*(use_number_x-1)+i);
}
if(i==0)
{
//std::cout<<j*(use_number_x-1)+i<<std::endl;
set_cell2.insert(j*(use_number_x-1)+i);
}
if(i==use_number_y-2)
{
//std::cout<<j*(use_number_x-1)+i<<std::endl;
set_cell3.insert(j*(use_number_x-1)+i);
}
}
}
}
vec_set_cell.push_back(set_cell0);
vec_set_cell.push_back(set_cell1);
vec_set_cell.push_back(set_cell2);
vec_set_cell.push_back(set_cell3);
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New();
@ -184,16 +263,97 @@ void gen2DGrid::genProcess()
quadpoly->GetPointIds()->SetId(3, quad[3]);
m_grid->InsertNextCell(quadpoly->GetCellType(), quadpoly->GetPointIds());
}
genSurfaceGrid();
//vtkSmartPointer<vtkDataSetMapper>mapper = vtkSmartPointer<vtkDataSetMapper>::New();
//mapper->SetInputData(m_grid);
//m_vtk_actor->SetMapper(mapper);
//m_vtk_actor->GetProperty()->SetColor(m_color_x, m_color_y, m_color_z);
//m_vtk_actor->GetProperty()->SetOpacity(m_opacity);
//m_vtk_actor->GetProperty()->SetRepresentationToWireframe();
}
void gen2DGrid::genSurfaceGrid()
{
vtkSmartPointer<vtkCellArray> cells_temp;
vtkSmartPointer<vtkPoints> points_temp = vtkSmartPointer<vtkPoints>::New();
//vtkSmartPointer<vtkUnstructuredGrid> poly_temp = vtkSmartPointer<vtkUnstructuredGrid>::New();
//m_grid_surface
m_grid_surface->SetPoints(m_grid->GetPoints());
vtkSmartPointer<vtkLine> quadpoly = vtkSmartPointer<vtkLine>::New();
int quad[2];
int count_temp = 0;
for (int i_surface_id=0;i_surface_id<4;i_surface_id++)
{
std::cout<<vec_set_cell[i_surface_id].size()<<std::endl;
if(i_surface_id==0)
{
quad[0]=0;
quad[1]=1;
}
else if(i_surface_id==1)
{
quad[0]=2;
quad[1]=3;
}
else if(i_surface_id==2)
{
quad[0]=3;
quad[1]=0;
}
else if(i_surface_id==3)
{
quad[0]=1;
quad[1]=2;
}
for (std::set<int>::iterator it = vec_set_cell[i_surface_id].begin(); it != vec_set_cell[i_surface_id].end(); ++it)
{
m_faceToCell[i_surface_id+1].push_back(count_temp+1);
m_cellIdToGridCellId[count_temp] = *it;
count_temp++;
vtkIdList* pointIds2 = vtkIdList::New();
m_grid->GetCellPoints(*it, pointIds2);
quadpoly->GetPointIds()->SetId(0, pointIds2->GetId(quad[0]));
quadpoly->GetPointIds()->SetId(1, pointIds2->GetId(quad[1]));
m_grid_surface->InsertNextCell(quadpoly-> GetCellType(), quadpoly ->GetPointIds());
}
}
//vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
//writer->SetFileName("ceshi0826.vtu");
//writer->SetDataType(m_write_data_type);
//writer->SetDataModeToAscii(); //0
//writer->SetDataModeToBinary(); //1
//std::cout<<writer->GetDataMode()<<std::endl;
//writer->SetInputData(m_grid_surface);
//writer->Write();
vtkSmartPointer<vtkDataSetMapper>mapper = vtkSmartPointer<vtkDataSetMapper>::New();
mapper->SetInputData(m_grid);
mapper->SetInputData(m_grid_surface);
mapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(5.0,5.0);
m_vtk_actor->SetMapper(mapper);
m_vtk_actor->GetProperty()->SetColor(m_color_x, m_color_y, m_color_z);
m_vtk_actor->GetProperty()->SetOpacity(m_opacity);
m_vtk_actor->GetProperty()->SetRepresentationToWireframe();
//m_vtk_actor->GetProperty()->SetRepresentationToWireframe();
m_vtk_actor->GetProperty()->SetRepresentationToSurface();
//m_vtk_actor->GetProperty()->SetEdgeVisibility(true);
//m_vtk_actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
//m_vtk_actor->PickableOff();
//m_vtk_actor->DragableOff();
}
void gen2DGrid::readGridJsonFile(string json_name)
{
CasRockGrid* struct_grid = new CasRockGrid;
@ -539,6 +699,35 @@ void gen2DGrid::updateLineWidth(float line_width)
m_vtk_actor->GetProperty()->SetLineWidth(line_width);
}
vector<set<int>>& gen2DGrid::getPointSetWithSurface()
{
return vec_set_point;
}
vector<set<int>>& gen2DGrid::getCellSetWithSurface()
{
return vec_set_cell;
}
vtkSmartPointer<vtkUnstructuredGrid> gen2DGrid::getStructure()
{
return m_grid_surface;
}
QVector<QSet<int>> gen2DGrid::getFaceToPoint()
{
return m_faceToPoint;
}
QVector<QVector<int>> gen2DGrid::getFaceToCell()
{
return m_faceToCell;
}
QMap<int,int> gen2DGrid::getCellIdToGridIdMap()
{
return m_cellIdToGridCellId;
}

View File

@ -5,6 +5,10 @@
#include <iostream>
#include "structFromJson.h"
#include <set>
#include <QMap>
#include <QSet>
#include <QVector>
using namespace std;
@ -13,11 +17,13 @@ class gen2DGrid
public:
gen2DGrid();
~gen2DGrid();
vtkSmartPointer<vtkUnstructuredGrid> m_grid_surface;
private:
vtkSmartPointer<vtkActor> m_vtk_actor;
vtkSmartPointer<vtkUnstructuredGrid> m_grid;
float m_color_x;
float m_color_y;
float m_color_z;
@ -46,8 +52,19 @@ private:
vector<float> vec_points;
vector<float> vec_elements;
vector<set<int>> vec_set_point;
vector<set<int>> vec_set_cell;
QVector<QVector<int>> m_faceToCell;
QMap<int,int>m_cellIdToGridCellId;
QVector<QSet<int>> m_faceToPoint;
void genSurfaceGrid();
public:
vector<set<int>>& getPointSetWithSurface();
vector<set<int>>& getCellSetWithSurface();
vtkSmartPointer<vtkActor> getActor();
void setColor(float color_x, float color_y, float color_z);
void setOpacity(float opacity);
@ -112,6 +129,11 @@ public:
void writeGridFile(string nodes_file_name,string elements_file_name);
void writeNodesFile(string nodes_file_name);
void writeElementsFile(string elements_file_name);
QVector<QSet<int> > getFaceToPoint();
QVector<QVector<int> > getFaceToCell();
QMap<int, int> getCellIdToGridIdMap();
vtkSmartPointer<vtkUnstructuredGrid> getStructure();
};

View File

@ -4,6 +4,7 @@
#include<fstream>
#include<string>
#include<sstream>
#include <set>
#include<vtkProperty.h>
#include<vtkActor.h>
@ -17,14 +18,29 @@
#include<vtkUnstructuredGridWriter.h>
#include<vtkXMLUnstructuredGridWriter.h>
#include <qfile.h>
#include <QTextStream>
#include <vtkTetra.h>
#include <vtkTriangle.h>
#include <vtkTriangle.h>
#include <vtkStructuredGrid.h>
#include <vtkLine.h>
//#include <vtkUnStructuredGrid.h>
#include "qdebug.h"
#include "readNas.h"
#include "gen3DGrid.h"
#include "readJson.h"
using namespace std;
gen3DGrid::gen3DGrid()
{
m_vtk_actor = vtkSmartPointer<vtkActor>::New();
m_grid = vtkSmartPointer<vtkUnstructuredGrid>::New();
m_grid_surface = vtkSmartPointer<vtkUnstructuredGrid>::New();
//1 center 0 leftBottom
m_offset_type = 0;
@ -48,6 +64,9 @@ gen3DGrid::gen3DGrid()
vec_points.clear();
vec_elements.clear();
vec_set_point.clear();
vec_set_cell.clear();
}
gen3DGrid::~gen3DGrid()
@ -122,6 +141,18 @@ void gen3DGrid::genProcess()
float temp_x = 0.0;
float temp_y = 0.0;
float temp_z = 0.0;
vec_set_point.clear();
std::set<int> set_point0;
std::set<int> set_point1;
std::set<int> set_point2;
std::set<int> set_point3;
std::set<int> set_point4;
std::set<int> set_point5;
m_faceToPoint.resize(6+1);
m_faceToCell.resize(6+1);
for (int k=0;k<use_number_z;k++)
{
temp_z = point_min_z + use_interval_z*k;
@ -129,13 +160,27 @@ void gen3DGrid::genProcess()
{
temp_z = point_max_z;
}
//if(k==0)
{
//set_point1.insert(k*use_number_z*use_number_y+j*use_number_x+i);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*use_number_z*use_number_y+j*use_number_x+i<<std::endl;
}
if(k==use_number_z-1)
{
//set_point6.insert(k*use_number_z*use_number_y+j*use_number_x+i);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*use_number_z*use_number_y+j*use_number_x+i<<std::endl;
}
for (int j=0;j<use_number_y;j++)
{
temp_y = point_min_y + use_interval_y*j;
if (j==use_number_y-1)
{
temp_y = point_max_y;
//temp_y = point_max_y;
}
for (int i=0;i<use_number_x;i++)
{
@ -147,10 +192,60 @@ void gen3DGrid::genProcess()
vec_points.push_back(temp_x);
vec_points.push_back(temp_y);
vec_points.push_back(temp_z);
if(k==0)
{
set_point0.insert(k*use_number_y*use_number_x+j*use_number_x+i);
m_faceToPoint[0+1].insert(k*use_number_y*use_number_x+j*use_number_x+i+1);
}
if(k==use_number_z-1)
{
set_point1.insert(k*use_number_y*use_number_x+j*use_number_x+i);
m_faceToPoint[1+1].insert(k*use_number_y*use_number_x+j*use_number_x+i+1);
}
if(j==0)
{
set_point2.insert(k*use_number_y*use_number_x+j*use_number_x+i);
m_faceToPoint[2+1].insert(k*use_number_y*use_number_x+j*use_number_x+i+1);
}
if(j==use_number_y-1)
{
set_point4.insert(k*use_number_y*use_number_x+j*use_number_x+i);
m_faceToPoint[4+1].insert(k*use_number_y*use_number_x+j*use_number_x+i+1);
}
if(i==0)
{
set_point3.insert(k*use_number_y*use_number_x+j*use_number_x+i);
m_faceToPoint[3+1].insert(k*use_number_y*use_number_x+j*use_number_x+i+1);
}
if(i==use_number_x-1)
{
set_point5.insert(k*use_number_y*use_number_x+j*use_number_x+i);
m_faceToPoint[5+1].insert(k*use_number_y*use_number_x+j*use_number_x+i+1);
}
}
}
}
vec_set_point.push_back(set_point0);
vec_set_point.push_back(set_point1);
vec_set_point.push_back(set_point2);
vec_set_point.push_back(set_point3);
vec_set_point.push_back(set_point4);
vec_set_point.push_back(set_point5);
vec_set_cell.clear();
std::set<int> set_cell0;
std::set<int> set_cell1;
std::set<int> set_cell2;
std::set<int> set_cell3;
std::set<int> set_cell4;
std::set<int> set_cell5;
for (int k=0;k<use_number_z-1;k++)
{
for (int j=0;j<use_number_y-1;j++)
@ -165,9 +260,57 @@ void gen3DGrid::genProcess()
vec_elements.push_back((i+1)+j*use_number_x+(k+1)*use_number_x*use_number_y);
vec_elements.push_back((i+1)+(j+1)*use_number_x+(k+1)*use_number_x*use_number_y);
vec_elements.push_back(i+(j+1)*use_number_x+(k+1)*use_number_x*use_number_y);
if(k==0) //0
{
set_cell0.insert(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i<<std::endl;
//m_faceToCell[0+1].push_back(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i+1);
}
if(k==use_number_z-2) //1
{
set_cell1.insert(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i);
//m_faceToCell[1+1].push_back(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i+1);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i<<std::endl;
}
if(j==0) //2
{
set_cell2.insert(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i);
//m_faceToCell[2+1].push_back(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i+1);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i<<std::endl;
}
if(j==use_number_y-2) //4
{
set_cell4.insert(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i);
//m_faceToCell[4+1].push_back(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i+1);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i<<std::endl;
}
if(i==0) //3
{
set_cell3.insert(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i);
//m_faceToCell[3+1].push_back(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i+1);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i<<std::endl;
}
if(i==use_number_x-2) //5
{
set_cell5.insert(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i);
//m_faceToCell[5+1].push_back(k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i+1);
//std::cout<<k<<" "<<j<<" "<<i<<" "<<k*(use_number_y-1)*(use_number_x-1)+j*(use_number_x-1)+i<<std::endl;
}
}
}
}
vec_set_cell.push_back(set_cell0);
vec_set_cell.push_back(set_cell1);
vec_set_cell.push_back(set_cell2);
vec_set_cell.push_back(set_cell3);
vec_set_cell.push_back(set_cell4);
vec_set_cell.push_back(set_cell5);
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
vtkSmartPointer<vtkCellArray> cells = vtkSmartPointer<vtkCellArray>::New();
@ -208,13 +351,121 @@ void gen3DGrid::genProcess()
m_grid->InsertNextCell(hexpoly->GetCellType(), hexpoly->GetPointIds());
}
//vtkSmartPointer<vtkDataSetMapper>mapper = vtkSmartPointer<vtkDataSetMapper>::New();
//mapper->SetInputData(m_grid);
//mapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(5.0,5.0);
//m_vtk_actor->SetMapper(mapper);
//m_vtk_actor->GetProperty()->SetColor(m_color_x, m_color_y, m_color_z);
//m_vtk_actor->GetProperty()->SetOpacity(m_opacity);
//m_vtk_actor->GetProperty()->SetRepresentationToWireframe();
//m_vtk_actor->GetProperty()->SetRepresentationToSurface();
//m_vtk_actor->GetProperty()->SetEdgeVisibility(true);
genSurfaceGrid();
return;
}
void gen3DGrid::genSurfaceGrid()
{
std::cout<<"999999999999999999999999"<<std::endl;
vtkSmartPointer<vtkCellArray> cells_temp;
vtkSmartPointer<vtkPoints> points_temp = vtkSmartPointer<vtkPoints>::New();
//vtkSmartPointer<vtkUnstructuredGrid> poly_temp = vtkSmartPointer<vtkUnstructuredGrid>::New();
//m_grid_surface
m_grid_surface->SetPoints(m_grid->GetPoints());
vtkSmartPointer<vtkQuad> quadpoly = vtkSmartPointer<vtkQuad>::New();
int quad[4];
int count_temp = 0;
for (int i_surface_id=0;i_surface_id<6;i_surface_id++)
{
if(i_surface_id==0)
{
quad[0]=0;
quad[1]=1;
quad[2]=2;
quad[3]=3;
}
else if(i_surface_id==1)
{
quad[0]=4;
quad[1]=5;
quad[2]=6;
quad[3]=7;
}
else if(i_surface_id==2)
{
quad[0]=0;
quad[1]=1;
quad[2]=5;
quad[3]=4;
}
else if(i_surface_id==3)
{
quad[0]=0;
quad[1]=3;
quad[2]=7;
quad[3]=4;
}
else if(i_surface_id==4)
{
quad[0]=3;
quad[1]=2;
quad[2]=6;
quad[3]=7;
}
else if(i_surface_id==5)
{
quad[0]=1;
quad[1]=2;
quad[2]=6;
quad[3]=5;
}
for (std::set<int>::iterator it = vec_set_cell[i_surface_id].begin(); it != vec_set_cell[i_surface_id].end(); ++it)
{
m_faceToCell[i_surface_id+1].push_back(count_temp+1);
m_cellIdToGridCellId[count_temp] = *it;
count_temp++;
//std::cout << *it << std::endl;
vtkIdList* pointIds2 = vtkIdList::New();
m_grid->GetCellPoints(*it, pointIds2);
quadpoly->GetPointIds()->SetId(0, pointIds2->GetId(quad[0]));
quadpoly->GetPointIds()->SetId(1, pointIds2->GetId(quad[1]));
quadpoly->GetPointIds()->SetId(2, pointIds2->GetId(quad[2]));
quadpoly->GetPointIds()->SetId(3, pointIds2->GetId(quad[3]));
m_grid_surface->InsertNextCell(quadpoly-> GetCellType(), quadpoly ->GetPointIds());
}
}
vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New();
//writer->SetFileName("ceshi0826.vtu");
//writer->SetDataType(m_write_data_type);
//writer->SetDataModeToAscii(); //0
//writer->SetDataModeToBinary(); //1
//std::cout<<writer->GetDataMode()<<std::endl;
//writer->SetInputData(m_grid_surface);
//writer->Write();
vtkSmartPointer<vtkDataSetMapper>mapper = vtkSmartPointer<vtkDataSetMapper>::New();
mapper->SetInputData(m_grid);
mapper->SetInputData(m_grid_surface);
mapper->SetRelativeCoincidentTopologyPolygonOffsetParameters(5.0,5.0);
m_vtk_actor->SetMapper(mapper);
m_vtk_actor->GetProperty()->SetColor(m_color_x, m_color_y, m_color_z);
m_vtk_actor->GetProperty()->SetOpacity(m_opacity);
m_vtk_actor->GetProperty()->SetRepresentationToWireframe();
//m_vtk_actor->GetProperty()->SetRepresentationToWireframe();
m_vtk_actor->GetProperty()->SetRepresentationToSurface();
m_vtk_actor->GetProperty()->SetEdgeVisibility(true);
//m_vtk_actor->GetProperty()->SetColor(1.0, 0.0, 0.0);
//m_vtk_actor->PickableOff();
//m_vtk_actor->DragableOff();
}
void gen3DGrid::readGridJsonFile(string json_name)
@ -570,6 +821,36 @@ void gen3DGrid::updateLineWidth(float line_width)
m_vtk_actor->GetProperty()->SetLineWidth(line_width);
}
vector<set<int>>& gen3DGrid::getPointSetWithSurface()
{
return vec_set_point;
}
vector<set<int>>& gen3DGrid::getCellSetWithSurface()
{
return vec_set_cell;
}
vtkSmartPointer<vtkUnstructuredGrid> gen3DGrid::getStructure()
{
return m_grid_surface;
}
QVector<QSet<int>> gen3DGrid::getFaceToPoint()
{
return m_faceToPoint;
}
QVector<QVector<int>> gen3DGrid::getFaceToCell()
{
return m_faceToCell;
}
QMap<int,int> gen3DGrid::getCellIdToGridIdMap()
{
return m_cellIdToGridCellId;
}

View File

@ -6,6 +6,9 @@
#include <iostream>
#include "structFromJson.h"
#include <set>
#include <QMap>
#include <QVector>
using namespace std;
@ -15,10 +18,12 @@ public:
gen3DGrid();
~gen3DGrid();
vtkSmartPointer<vtkUnstructuredGrid> m_grid;
vtkSmartPointer<vtkUnstructuredGrid> m_grid_surface;
private:
vtkSmartPointer<vtkActor> m_vtk_actor;
vtkSmartPointer<vtkUnstructuredGrid> m_grid;
float m_color_x;
float m_color_y;
float m_color_z;
@ -46,6 +51,15 @@ private:
vector<float> vec_points;
vector<float> vec_elements;
vector<set<int>> vec_set_point;
vector<set<int>> vec_set_cell;
QVector<QVector<int>> m_faceToCell;
QMap<int,int>m_cellIdToGridCellId;
QVector<QSet<int>> m_faceToPoint;
void genSurfaceGrid();
public:
vtkSmartPointer<vtkActor> getActor();
@ -55,6 +69,9 @@ public:
float getOpacity()const{return m_opacity;}
float getLineWidth()const{return m_line_width;}
vector<set<int>>& getPointSetWithSurface();
vector<set<int>>& getCellSetWithSurface();
float getOffsetType()const{return m_offset_type;}
float getOffsetX()const{return m_offset_x;}
float getOffsetY()const{return m_offset_y;}
@ -112,6 +129,11 @@ public:
void writeGridFile(string nodes_file_name,string elements_file_name);
void writeNodesFile(string nodes_file_name);
void writeElementsFile(string elements_file_name);
QVector<QSet<int> > getFaceToPoint();
QVector<QVector<int> > getFaceToCell();
QMap<int, int> getCellIdToGridIdMap();
vtkSmartPointer<vtkUnstructuredGrid> getStructure();
};