|
|
@@ -1,2612 +0,0 @@
|
|
|
-#include "vtkvisunslice.h"
|
|
|
-#include <vtkSortDataArray.h>
|
|
|
-#include <algorithm>
|
|
|
-#include <vtkCellArray.h>
|
|
|
-
|
|
|
-#include <vtkActor.h>
|
|
|
-#include <vtkRenderer.h>
|
|
|
-#include <vtkUnstructuredGrid.h>
|
|
|
-#include <vtkDoubleArray.h>
|
|
|
-#include <vtkPointData.h>
|
|
|
-#include <vtkCellData.h>
|
|
|
-#include <vtkRenderWindow.h>
|
|
|
-#include "vtkvisunstructuredgridsource.h"
|
|
|
-#include <vtkRenderWindowInteractor.h>
|
|
|
-#include <vtkProperty.h>
|
|
|
-#include <vtkObject.h>
|
|
|
-#include <vtkObjectFactory.h>
|
|
|
-vtkStandardNewMacro(vtkVISUnSlice)
|
|
|
-
|
|
|
-vtkVISUnSlice::vtkVISUnSlice()
|
|
|
-{
|
|
|
- sliceActors_ = new vtkActor*[6];
|
|
|
- sliceTable_ = new vtkLookupTable*[6];
|
|
|
-
|
|
|
- for (int i = 0; i<6;i++)
|
|
|
- {
|
|
|
- sliceActors_[i] = vtkActor::New();
|
|
|
- sliceActors_[i] = NULL;
|
|
|
-
|
|
|
- sliceTable_[i] = vtkLookupTable::New();
|
|
|
- sliceTable_[i] = NULL;
|
|
|
- }
|
|
|
-
|
|
|
- //sliceMapper_ = new vtkDataSetMapper*[6];
|
|
|
- sliceMapper_ = vtkCollection::New();
|
|
|
- sliceMapper_ = NULL;
|
|
|
-
|
|
|
- contourLinesFilter_ = vtkContourFilter::New ();
|
|
|
- contourLinesFilter_ = NULL;
|
|
|
-
|
|
|
- contourLabelFilter_ = vtkContourFilter::New ();
|
|
|
- contourLabelFilter_ = NULL;
|
|
|
-
|
|
|
- sliceGlyph2D_ = vtkGlyphSource2D::New ();
|
|
|
- sliceGlyph2D_ = NULL;
|
|
|
-
|
|
|
- sliceGlyph3D_ = vtkGlyph3D::New();
|
|
|
- sliceGlyph3D_ = NULL;
|
|
|
-
|
|
|
- shadeColor_[0] = 1.0;
|
|
|
- shadeColor_[1] = 0.0;
|
|
|
- shadeColor_[2] = 0.0;
|
|
|
-
|
|
|
- meshColor_[0] = 0.0;
|
|
|
- meshColor_[1] = 1.0;
|
|
|
- meshColor_[2] = 0.0;
|
|
|
-
|
|
|
-
|
|
|
- planeNormal_[0] = 1.0;
|
|
|
- planeNormal_[1] = 0.0;
|
|
|
- planeNormal_[2] = 0.0;
|
|
|
-
|
|
|
- conLevel_ = 5;
|
|
|
- usedScalarIndex_ = -1;
|
|
|
- usedVectorIndex_ = -1;
|
|
|
-
|
|
|
- for (int i=0; i<3; i++)
|
|
|
- {
|
|
|
- planeOrigin_[i] = 0;
|
|
|
- }
|
|
|
-
|
|
|
- cutSource_ = NULL;
|
|
|
- cutActor_ = NULL;
|
|
|
- gridSource_ = NULL;
|
|
|
-
|
|
|
- //cutMapper_ = NULL;
|
|
|
-
|
|
|
- slicePlane_ = NULL;
|
|
|
- planeWidget_ = NULL;
|
|
|
-
|
|
|
- scalarRange_[0] = 0;
|
|
|
- scalarRange_[1] = 0;
|
|
|
-
|
|
|
- bandedContourFilter_ = 0;
|
|
|
- contourLinesFilter_ = 0;
|
|
|
- contourLabelFilter_ = 0;
|
|
|
- scalarSource_ = 0;
|
|
|
-}
|
|
|
-
|
|
|
-vtkVISUnSlice::~vtkVISUnSlice()
|
|
|
-{
|
|
|
- ErrorInfo(0, "destructure func 0");
|
|
|
- if (cutActor_ != NULL)
|
|
|
- {
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->RemoveActor(cutActor_);
|
|
|
- }
|
|
|
- cutActor_->Delete();
|
|
|
- cutActor_ = NULL;
|
|
|
- }
|
|
|
- ErrorInfo(0, "destructure func 1");
|
|
|
-
|
|
|
- if(planeWidget_ != NULL)
|
|
|
- {
|
|
|
- //if(_renWin != NULL)
|
|
|
- //{
|
|
|
- // planeWidget->SetInteractor(_renWin->GetInteractor());
|
|
|
- //}
|
|
|
- // planeWidget_->EnabledOff();
|
|
|
- planeWidget_->Delete();
|
|
|
- planeWidget_ = NULL;
|
|
|
- }
|
|
|
- ErrorInfo(0, "destructure func 2");
|
|
|
-
|
|
|
- if (cutSource_ != NULL)
|
|
|
- {
|
|
|
- cutSource_->Delete();
|
|
|
- cutSource_ = NULL;
|
|
|
- }
|
|
|
- ErrorInfo(0, "destructure func 3");
|
|
|
- if (gridSource_ != NULL)
|
|
|
- {
|
|
|
- gridSource_->Delete();
|
|
|
- gridSource_ = NULL;
|
|
|
- }
|
|
|
- ErrorInfo(0, "destructure func 4");
|
|
|
-
|
|
|
- if(slicePlane_ != NULL)
|
|
|
- {
|
|
|
- slicePlane_->Delete();
|
|
|
- slicePlane_ = NULL;
|
|
|
- }
|
|
|
- ErrorInfo(0, "destructure func 5");
|
|
|
-
|
|
|
- /*if(cutMapper_ != NULL)
|
|
|
- {
|
|
|
- cutMapper_->Delete();
|
|
|
- cutMapper_ = NULL;
|
|
|
- }*/
|
|
|
- for (int i=0;i<6;i++)
|
|
|
- {
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- if (sliceActors_[i] != NULL)
|
|
|
- {
|
|
|
- _renderer->RemoveActor(sliceActors_[i]);
|
|
|
- sliceActors_[i]->Delete();
|
|
|
- sliceActors_[i] = NULL;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- delete [] sliceActors_;
|
|
|
-
|
|
|
- for (int i=0;i<6;i++)
|
|
|
- {
|
|
|
- if (sliceTable_[i] != NULL)
|
|
|
- {
|
|
|
- sliceTable_[i]->Delete();
|
|
|
- sliceTable_[i] = NULL;
|
|
|
- }
|
|
|
- }
|
|
|
- delete [] sliceTable_;
|
|
|
-
|
|
|
- ErrorInfo(0, "destructure func 6");
|
|
|
-
|
|
|
- if (sliceMapper_!= NULL)
|
|
|
- {
|
|
|
- sliceMapper_->Delete ();
|
|
|
- sliceMapper_ = NULL;
|
|
|
- }
|
|
|
- if (contourLinesFilter_!= NULL)
|
|
|
- {
|
|
|
- contourLinesFilter_->Delete();
|
|
|
- contourLinesFilter_ = NULL;
|
|
|
- }
|
|
|
- if (contourLabelFilter_!= NULL)
|
|
|
- {
|
|
|
- contourLabelFilter_->Delete();
|
|
|
- contourLabelFilter_ = NULL;
|
|
|
- }
|
|
|
- if (sliceGlyph2D_!= NULL)
|
|
|
- {
|
|
|
- sliceGlyph2D_->Delete();
|
|
|
- sliceGlyph2D_ = NULL;
|
|
|
- }
|
|
|
- if (sliceGlyph3D_!= NULL)
|
|
|
- {
|
|
|
- sliceGlyph3D_->Delete();
|
|
|
- sliceGlyph3D_ = NULL;
|
|
|
- }
|
|
|
- if (scalarSource_ != 0)
|
|
|
- {
|
|
|
- scalarSource_->Delete();
|
|
|
- scalarSource_ = 0;
|
|
|
- }
|
|
|
- ErrorInfo(0, "destructure func 7 end.");
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: Set the slice scalar/vector data source(设置切片标量/矢量数据源)
|
|
|
- * @param: vector data and scalar data
|
|
|
- * @ret: void
|
|
|
- * @birth: created by czm in 20230326
|
|
|
- */
|
|
|
-void vtkVISUnSlice::SetSliceSource(char* scalar, char* vector)
|
|
|
-{
|
|
|
- int index1 = -1;
|
|
|
- int index2 = -1;
|
|
|
-
|
|
|
- if(scalar != NULL)
|
|
|
- {
|
|
|
- index1 = _source->GetScalarIndex(scalar);
|
|
|
- }
|
|
|
- if(vector != NULL)
|
|
|
- {
|
|
|
- index2 = _source->GetVectorIndex(vector);
|
|
|
- }
|
|
|
-
|
|
|
- vtkUnstructuredGrid *unGrid = vtkUnstructuredGrid::New();
|
|
|
- unGrid->DeepCopy(_source->unstruGrid);
|
|
|
-
|
|
|
- cout << "point num: " <<unGrid->GetNumberOfPoints() << ", cell num: " << unGrid->GetNumberOfCells() <<endl;
|
|
|
- if (index1 != -1)
|
|
|
- {
|
|
|
- usedScalarIndex_ = index1;
|
|
|
-
|
|
|
- if(_source->scalarSource[index1]->GetDataSize() != 0)
|
|
|
- {cout << "scalar size : " <<_source->scalarSource[index1]->GetDataSize() << endl;
|
|
|
- (unGrid->GetPointData())->SetScalars(_source->scalarSource[index1]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- (unGrid->GetCellData())->SetScalars(_source->cellScalarSource_[index1]);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- if (index2 != -1)
|
|
|
- {
|
|
|
- usedVectorIndex_ = index2;
|
|
|
-
|
|
|
- if(_source->vectorSource[index2]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- (unGrid->GetPointData())->SetVectors(_source->vectorSource[index2]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- (unGrid->GetCellData())->SetVectors(_source->cellVectorSource_[index2]);
|
|
|
- }
|
|
|
- }
|
|
|
- unGrid->Modified();
|
|
|
-
|
|
|
- vtkPlane *plane = vtkPlane::New();
|
|
|
- plane->SetNormal(planeNormal_[0], planeNormal_[1], planeNormal_[2]);
|
|
|
-
|
|
|
- vtkCutter *cutter = vtkCutter::New();
|
|
|
- cutter->SetInputData(unGrid);
|
|
|
- cutter->SetCutFunction(plane);
|
|
|
- cutter->GenerateCutScalarsOff();
|
|
|
- cutter->SetSortByToSortByCell();
|
|
|
- cutter->Update();
|
|
|
-
|
|
|
- //cout<<"test here 1111"<<(cutter->GetOutput())->GetNumberOfPoints()<<endl;
|
|
|
-
|
|
|
- gridSource_ = unGrid;
|
|
|
- cutSource_ = cutter;
|
|
|
- slicePlane_ = plane;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Write point,scalar and vector data to file.(将点、标量和矢量数据写入文件)
|
|
|
-* @param: filename
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::WriteScalarVectorData(const char* FileName)
|
|
|
-{
|
|
|
- cutSource_->Update();
|
|
|
-
|
|
|
- vtkFloatArray* cutScalar = vtkFloatArray::New();
|
|
|
- cutScalar->SetNumberOfComponents(1);
|
|
|
-
|
|
|
- if(usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- if(_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- cutScalar->DeepCopy((cutSource_->GetOutput())->GetPointData()->GetScalars());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- cutScalar->DeepCopy((cutSource_->GetOutput())->GetCellData()->GetScalars());
|
|
|
- }
|
|
|
- }
|
|
|
- cutScalar->Modified();
|
|
|
-
|
|
|
- vtkFloatArray* cutVector = vtkFloatArray::New();
|
|
|
- cutVector->SetNumberOfComponents(3);
|
|
|
-
|
|
|
- if(usedVectorIndex_ != -1)
|
|
|
- {
|
|
|
- if(_source->vectorSource[usedVectorIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- cutVector->DeepCopy((cutSource_->GetOutput())->GetPointData()->GetVectors());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- cutVector->DeepCopy((cutSource_->GetOutput())->GetCellData()->GetVectors());
|
|
|
- }
|
|
|
- }
|
|
|
- cutVector->Modified();
|
|
|
-
|
|
|
- double range[2];
|
|
|
- double cutScalarRange_[2];
|
|
|
-
|
|
|
- (cutSource_->GetOutput())->GetScalarRange(range);
|
|
|
- cutScalarRange_[0] = range[0];
|
|
|
- cutScalarRange_[1] = range[1];
|
|
|
-
|
|
|
-
|
|
|
- int pointNum = 0;
|
|
|
- pointNum = (cutSource_->GetOutput())->GetNumberOfPoints();
|
|
|
-
|
|
|
- if (_source->vectorSource[usedVectorIndex_]->GetDataSize() == 0)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- double value;
|
|
|
- double* v;
|
|
|
- double p[3];
|
|
|
-
|
|
|
- ofstream f(FileName);
|
|
|
- if (!f)
|
|
|
- {
|
|
|
- return;
|
|
|
- }
|
|
|
- f<<std::setiosflags(ios::left)<<std::setw(30)<<"x"
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(30)<<"y"
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(30)<<"z"
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<"scalar"
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<"v0"
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<"v1"
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<"v2"
|
|
|
- <<endl;
|
|
|
-
|
|
|
- for(int j=0; j<pointNum; j++)
|
|
|
- {
|
|
|
- (cutSource_->GetOutput())->GetPoint(j, p);
|
|
|
-
|
|
|
- value = cutScalar->GetValue(j);
|
|
|
-
|
|
|
- v = cutVector->GetTuple3(j);
|
|
|
-
|
|
|
- f<<std::setiosflags(ios::left)<<std::setw(20)<<p[0]
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<p[1]
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<p[2]
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<value
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<v[0]
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<v[1]
|
|
|
- <<std::setiosflags(ios::left)<<std::setw(20)<<v[2]
|
|
|
- <<endl;
|
|
|
- }
|
|
|
- f.close();
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get cut scalar data.(获取切面标量数据。)
|
|
|
-* @param: void
|
|
|
-* @ret: float array
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-vtkFloatArray* vtkVISUnSlice::GetCutScalarData(void)
|
|
|
-{
|
|
|
- if(usedScalarIndex_ == -1)
|
|
|
- {
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- cutSource_->Update();
|
|
|
-
|
|
|
- vtkFloatArray* cutScalar = vtkFloatArray::New();
|
|
|
- cutScalar->SetNumberOfComponents(1);
|
|
|
-
|
|
|
- if(usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- if(_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- cutScalar->DeepCopy((cutSource_->GetOutput())->GetPointData()->GetScalars());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- cutScalar->DeepCopy((cutSource_->GetOutput())->GetCellData()->GetScalars());
|
|
|
- }
|
|
|
- }
|
|
|
- cutScalar->Modified();
|
|
|
-
|
|
|
- return cutScalar;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get cut vector data.(获取切面矢量数据。)
|
|
|
-* @param: index(index of the vector array)
|
|
|
-* @ret: float array
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-vtkFloatArray* vtkVISUnSlice::GetCutVectorData(int index)
|
|
|
-{
|
|
|
- if (index < 0 || index > 2)
|
|
|
- {
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- if(usedVectorIndex_ == -1)
|
|
|
- {
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- cutSource_->Update();
|
|
|
-
|
|
|
- vtkFloatArray* vec = vtkFloatArray::New();
|
|
|
- vec->SetNumberOfComponents(3);
|
|
|
-
|
|
|
- if(usedVectorIndex_ != -1)
|
|
|
- {
|
|
|
- if(_source->vectorSource[usedVectorIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- vec->DeepCopy((cutSource_->GetOutput())->GetPointData()->GetVectors());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- vec->DeepCopy((cutSource_->GetOutput())->GetCellData()->GetVectors());
|
|
|
- }
|
|
|
- }
|
|
|
- vec->Modified();
|
|
|
-
|
|
|
- vtkFloatArray* cutVector = vtkFloatArray::New();
|
|
|
- cutVector->SetNumberOfComponents(1);
|
|
|
- cutVector->SetNumberOfTuples(vec->GetNumberOfTuples());
|
|
|
- cutVector->CopyComponent(0, vec, index);
|
|
|
- cutVector->Modified();
|
|
|
-
|
|
|
- return cutVector;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get cut vector data.(获取切面矢量数据。)
|
|
|
-* @param: void
|
|
|
-* @ret: float array
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-vtkFloatArray* vtkVISUnSlice::GetCutVectorData(void)
|
|
|
-{
|
|
|
- if(usedVectorIndex_ == -1)
|
|
|
- {
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- cutSource_->Update();
|
|
|
-
|
|
|
- vtkFloatArray* cutVector = vtkFloatArray::New();
|
|
|
- cutVector->SetNumberOfComponents(3);
|
|
|
-
|
|
|
- if(usedVectorIndex_ != -1)
|
|
|
- {
|
|
|
- if(_source->vectorSource[usedVectorIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- cutVector->DeepCopy((cutSource_->GetOutput())->GetPointData()->GetVectors());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- cutVector->DeepCopy((cutSource_->GetOutput())->GetCellData()->GetVectors());
|
|
|
- }
|
|
|
- }
|
|
|
- cutVector->Modified();
|
|
|
-
|
|
|
- return cutVector;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get cut point data by index.(按索引获取切割点数据。)
|
|
|
-* @param: index Indicate the coordinate(0-x,1-y,2-z)
|
|
|
-* @ret: float array
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-vtkFloatArray* vtkVISUnSlice::GetCutPointData(int index)
|
|
|
-{
|
|
|
- if (index < 0 || index > 2)
|
|
|
- {
|
|
|
- return NULL;
|
|
|
- }
|
|
|
-
|
|
|
- cutSource_->Update();
|
|
|
-
|
|
|
- vtkFloatArray* cutPointData = vtkFloatArray::New();
|
|
|
- cutPointData->SetNumberOfComponents(1);
|
|
|
-
|
|
|
- int pointNum = (cutSource_->GetOutput())->GetNumberOfPoints();
|
|
|
-
|
|
|
- double point[3];
|
|
|
-
|
|
|
- for(int j=0; j<pointNum; j++)
|
|
|
- {
|
|
|
- (cutSource_->GetOutput())->GetPoint(j, point);
|
|
|
-
|
|
|
- cutPointData->InsertNextValue(point[index]);
|
|
|
- }
|
|
|
- cutPointData->Modified();
|
|
|
-
|
|
|
- return cutPointData;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Change slice scalar/vector data source(更改切片标量/矢量数据源)
|
|
|
-* @param: scalar
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifySliceSourceScalar(char* scalar)
|
|
|
-{
|
|
|
- if (gridSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Grid Source are not Setted!");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- int index = -1;
|
|
|
- if(scalar != NULL)
|
|
|
- {
|
|
|
- index = _source->GetScalarIndex(scalar);
|
|
|
- }
|
|
|
- if (index == -1)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Scalar data are not existed!");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (_source->scalarSource[index]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- (gridSource_->GetPointData())->SetScalars(_source->scalarSource[index]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- (gridSource_->GetCellData())->SetScalars(_source->cellScalarSource_[index]);
|
|
|
- }
|
|
|
- gridSource_->Modified();
|
|
|
-
|
|
|
- usedScalarIndex_ = index;
|
|
|
-
|
|
|
- //2011-05-10 zhuqin add begin.
|
|
|
- if(bandedContourFilter_ != NULL)
|
|
|
- {
|
|
|
- bandedContourFilter_->GenerateValues(conLevel_, _source->scalarRange[usedScalarIndex_][0],_source->scalarRange[usedScalarIndex_][1]);
|
|
|
- bandedContourFilter_->ClippingOn();
|
|
|
- bandedContourFilter_->Modified();
|
|
|
- }
|
|
|
- if (contourLinesFilter_ != NULL)
|
|
|
- {
|
|
|
- contourLinesFilter_->GenerateValues(conLevel_, _source->scalarRange[usedScalarIndex_][0],_source->scalarRange[usedScalarIndex_][1]);
|
|
|
- contourLinesFilter_->Modified();
|
|
|
- }
|
|
|
- if (contourLabelFilter_!= NULL)
|
|
|
- {
|
|
|
- contourLabelFilter_->GenerateValues(conLevel_, _source->scalarRange[usedScalarIndex_][0],_source->scalarRange[usedScalarIndex_][1]);
|
|
|
- contourLabelFilter_->Modified();
|
|
|
- }
|
|
|
- //2011-05-10 zhuqin add end.
|
|
|
-
|
|
|
-
|
|
|
- for (int i= 0; i<6; i++)
|
|
|
- {
|
|
|
- if (i == 0 || i== 1 || i == 3)
|
|
|
- {
|
|
|
- if(sliceActors_[i] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->SetRange(_source->scalarRange[usedScalarIndex_][0],_source->scalarRange[usedScalarIndex_][1]);
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->Modified();
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarRange(_source->scalarRange[usedScalarIndex_][0],_source->scalarRange[usedScalarIndex_][1]);
|
|
|
-
|
|
|
- if (_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarModeToUsePointData();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarModeToUseCellData();
|
|
|
- }
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->Modified();
|
|
|
- sliceActors_[i]->Modified();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Change slice scalar/vector data source(更改切片标量/矢量数据源)
|
|
|
-* @param: scalar
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifySliceSourceVector(char* vector)
|
|
|
-{
|
|
|
- if (gridSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Grid Source are not Setted!");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- int index = -1;
|
|
|
-
|
|
|
- if(vector != NULL)
|
|
|
- {
|
|
|
- index = _source->GetVectorIndex(vector);
|
|
|
- }
|
|
|
- if (index == -1)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Vector data are not existed!");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- usedVectorIndex_ = index;
|
|
|
-
|
|
|
- if(_source->vectorSource[index]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- (gridSource_->GetPointData())->SetVectors(_source->vectorSource[index]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- (gridSource_->GetCellData())->SetVectors(_source->cellVectorSource_[index]);
|
|
|
- }
|
|
|
- gridSource_->Modified();
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create slice plane widget(创建切片平面小部件)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateSliceWidget()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
- double* bounds;
|
|
|
- bounds = _source->GetSourceBounds();
|
|
|
-
|
|
|
- planeOrigin_[0] = (bounds[0]+bounds[1])/2;
|
|
|
- planeOrigin_[1] = (bounds[2]+bounds[3])/2;
|
|
|
- planeOrigin_[2] = (bounds[4]+bounds[5])/2;
|
|
|
-
|
|
|
- vtkImplicitPlaneWidget* planeWidget = vtkImplicitPlaneWidget::New();
|
|
|
- planeWidget->SetInteractor(_renWin->GetInteractor());
|
|
|
- planeWidget->SetPlaceFactor(1.0);
|
|
|
-
|
|
|
- planeWidget->SetHandleSize(0.005);
|
|
|
- planeWidget->SetDiagonalRatio(0.2);
|
|
|
-
|
|
|
- planeWidget->GetOutlineProperty()->SetOpacity(0.0);
|
|
|
- planeWidget->GetEdgesProperty()->SetOpacity(0.0);
|
|
|
-
|
|
|
- planeWidget->GetPlane(slicePlane_);
|
|
|
- planeWidget->SetInputData(cutSource_->GetOutput());
|
|
|
-
|
|
|
- planeWidget->TubingOff();
|
|
|
- //planeWidget->OutsideBoundsOff();
|
|
|
- planeWidget->SetOrigin(planeOrigin_[0], planeOrigin_[1], planeOrigin_[2]);
|
|
|
- planeWidget->PlaceWidget(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
|
|
|
- planeWidget->On();
|
|
|
-
|
|
|
- planeWidget_ = planeWidget;
|
|
|
-
|
|
|
- vtkCallbackCommand *cc = vtkCallbackCommand::New();
|
|
|
- cc->SetCallback(GenerateSliceProData);
|
|
|
- cc->SetClientData(this);
|
|
|
-
|
|
|
- planeWidget->AddObserver(vtkCommand::InteractionEvent, cc);
|
|
|
-
|
|
|
- ShowOffSlicePlane();
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Generate Slice ProData(生成切片ProData)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::GenerateSliceProData(vtkObject *caller, unsigned long, void* obj, void *)
|
|
|
-{
|
|
|
- vtkVISUnSlice* usObj = (vtkVISUnSlice*)obj;
|
|
|
-
|
|
|
- if (usObj->planeWidget_ == NULL)
|
|
|
- {
|
|
|
- usObj->ErrorInfo(1,"Plane Widget Not Created");
|
|
|
- return;
|
|
|
- }
|
|
|
- usObj->planeWidget_->GetPlane(usObj->slicePlane_);
|
|
|
-
|
|
|
- //int num;
|
|
|
- //num = cutSource_->GetOutput()->GetNumberOfPoints();
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show the slice plane(显示切片平面)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnSlicePlane()
|
|
|
-{
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- planeWidget_->DrawPlaneOn();
|
|
|
- planeWidget_->UpdatePlacement();
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: hide the slice plane(隐藏切片平面)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffSlicePlane()
|
|
|
-{
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- planeWidget_->DrawPlaneOff();
|
|
|
- planeWidget_->UpdatePlacement();
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show On Slice Plane Widget(显示切片平面小部件)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnSlicePlaneWidget()
|
|
|
-{
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- planeWidget_->On();
|
|
|
- }
|
|
|
-
|
|
|
- if (cutActor_)
|
|
|
- {
|
|
|
- cutActor_->VisibilityOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show Off Slice Plane Widget(隐藏切片平面小部件)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffSlicePlaneWidget()
|
|
|
-{
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- planeWidget_->Off();
|
|
|
- }
|
|
|
-
|
|
|
- if (cutActor_)
|
|
|
- {
|
|
|
- cutActor_->VisibilityOff();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set the normal of the slice plane(设置切片平面的法线)
|
|
|
-* @param: xyz
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetSlicePlaneNormal(double nx, double ny, double nz)
|
|
|
-{
|
|
|
- if (nx == 0 && ny == 0 && nz == 0) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- planeNormal_[0] = nx;
|
|
|
- planeNormal_[1] = ny;
|
|
|
- planeNormal_[2] = nz;
|
|
|
-
|
|
|
- slicePlane_->SetNormal(nx, ny, nz);
|
|
|
- planeWidget_->SetNormal(nx, ny, nz);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set the normal of the slice plane(设置切片平面的法线到x坐标轴)
|
|
|
-* @param: x
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetSlicePlaneNormalToX()
|
|
|
-{
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- slicePlane_->SetNormal(1, 0, 0);
|
|
|
- planeWidget_->SetNormal(1, 0, 0);
|
|
|
-
|
|
|
- planeNormal_[0] = 1.0;
|
|
|
- planeNormal_[1] = 0;
|
|
|
- planeNormal_[2] = 0;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set the normal of the slice plane(设置切片平面的法线到y坐标轴)
|
|
|
-* @param: y
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetSlicePlaneNormalToY()
|
|
|
-{
|
|
|
- if (planeWidget_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Plane Widget Not Created");
|
|
|
- return;
|
|
|
- }
|
|
|
- slicePlane_->SetNormal(0, 1, 0);
|
|
|
- planeWidget_->SetNormal(0, 1, 0);
|
|
|
-
|
|
|
- planeNormal_[0] = 0;
|
|
|
- planeNormal_[1] = 1.0;
|
|
|
- planeNormal_[2] = 0;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set the normal of the slice plane(设置切片平面的法线到z坐标轴)
|
|
|
-* @param: z
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetSlicePlaneNormalToZ()
|
|
|
-{
|
|
|
- if (planeWidget_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Plane Widget Not Created");
|
|
|
- return;
|
|
|
- }
|
|
|
- slicePlane_->SetNormal(0, 0, 1);
|
|
|
- planeWidget_->SetNormal(0, 0, 1);
|
|
|
-
|
|
|
- planeNormal_[0] = 0;
|
|
|
- planeNormal_[1] = 0;
|
|
|
- planeNormal_[2] = 1.0;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get the normal direction of the slice plane(获取切片平面的法线方向)
|
|
|
-* @param: y
|
|
|
-* @ret: double[3]contains the normal direction
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-double* vtkVISUnSlice::GetSlicePlaneNormal()
|
|
|
-{
|
|
|
- return this->planeNormal_;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set the slice plane origin(设置切片平面原点)
|
|
|
-* @param: xyz
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetSlicePlaneOrigin(double ox, double oy, double oz)
|
|
|
-{
|
|
|
- if (planeWidget_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Plane Widget Not Created");
|
|
|
- return;
|
|
|
- }
|
|
|
- slicePlane_->SetOrigin(ox, oy, oz);
|
|
|
- planeWidget_->SetOrigin(ox, oy, oz);
|
|
|
-
|
|
|
- planeOrigin_[0] = ox;
|
|
|
- planeOrigin_[0] = oy;
|
|
|
- planeOrigin_[0] = oz;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get the slice plane origin(获取切片平面原点)
|
|
|
-* @param: void
|
|
|
-* @ret: double[3] contains the origin
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-double* vtkVISUnSlice::GetSlicePlaneOrigin()
|
|
|
-{
|
|
|
- return this->planeOrigin_;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice display pipeline(创建UnSlice显示管线)
|
|
|
-* @param: void
|
|
|
-* @ret: double[3] contains the origin
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceContourDisplay()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- double range[2];
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- range[0] = _source->scalarRange[usedScalarIndex_][0];
|
|
|
- range[1] = _source->scalarRange[usedScalarIndex_][1];
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- range[0] = 0;
|
|
|
- range[1] = 0;
|
|
|
- }
|
|
|
- cutSource_->Update();
|
|
|
-
|
|
|
- //cout<<range[0]<<" "<<range[1]<<endl;
|
|
|
-
|
|
|
- //cout<<"cut num: "<<(cutSource_->GetOutput())->GetNumberOfPoints()<<endl;
|
|
|
-
|
|
|
- vtkGeometryFilter *geoFilter = vtkGeometryFilter::New();
|
|
|
- geoFilter->SetInputData(cutSource_->GetOutput());
|
|
|
- geoFilter->Update();
|
|
|
-
|
|
|
- //cout<<"geo num: "<<(geoFilter->GetOutput())->GetNumberOfPoints()<<endl;
|
|
|
-
|
|
|
- vtkBandedPolyDataContourFilter *conFilter = vtkBandedPolyDataContourFilter::New();
|
|
|
- conFilter->SetInputData(geoFilter->GetOutput());
|
|
|
- conFilter->GenerateValues(conLevel_, range[0], range[1]);
|
|
|
- conFilter->ClippingOn();
|
|
|
- conFilter->Modified();
|
|
|
- conFilter->Update();
|
|
|
-
|
|
|
- //cout<<"con num: "<<(conFilter->GetOutput())->GetNumberOfPoints()<<endl;
|
|
|
-
|
|
|
-
|
|
|
- vtkDataSetMapper *mapper = vtkDataSetMapper::New();
|
|
|
- /*mapper->InterpolateScalarsBeforeMappingOn();
|
|
|
-
|
|
|
- if(_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- //cout<<"test here 3333"<<endl;
|
|
|
- mapper->SetInputConnection(conFilter->GetOutputPort());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mapper->SetInputConnection(geoFilter->GetOutputPort());
|
|
|
- }
|
|
|
- mapper->SetScalarRange(range[0],range[1]);
|
|
|
-
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- if (_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUsePointData();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUseCellData();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- vtkLookupTable *table = (vtkLookupTable*)mapper->GetLookupTable();
|
|
|
- table->GetHueRange(range);
|
|
|
- table->SetHueRange(range[1],range[0]);
|
|
|
- table->SetNumberOfColors(conLevel_);*/
|
|
|
- mapper->SetInputData(_source->unstruGrid);
|
|
|
-
|
|
|
- vtkActor *actor = vtkActor::New();
|
|
|
- actor->SetMapper(mapper);actor->GetProperty()->SetColor(1,0,0);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor(actor);
|
|
|
- }
|
|
|
-
|
|
|
- sliceActors_[0] = actor;
|
|
|
-
|
|
|
- //sliceTable_[0] = table;
|
|
|
-
|
|
|
- bandedContourFilter_ = conFilter;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show On UnSlice Display(显示UNslice)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnUnSliceContourDisplay()
|
|
|
-{
|
|
|
- if (sliceActors_[0] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[0]->VisibilityOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show Off UnSlice Display(关闭UNslice显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffUnSliceContourDisplay()
|
|
|
-{
|
|
|
- if (sliceActors_[0] != NULL)
|
|
|
- {
|
|
|
-
|
|
|
- sliceActors_[0]->VisibilityOff();
|
|
|
-
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Delete UnSlice Display(删除UNslice显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::DeleteUnSliceContourDisplay()
|
|
|
-{
|
|
|
- if (sliceActors_[0] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[0]->VisibilityOff();
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->RemoveActor(sliceActors_[0]);
|
|
|
- }
|
|
|
-
|
|
|
- sliceActors_[0]->Delete();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Contour Lines Display(创建取消切片等高线显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceContourLinesDisplay()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- double range[2];
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- range[0] = _source->scalarRange[usedScalarIndex_][0];
|
|
|
- range[1] = _source->scalarRange[usedScalarIndex_][1];
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- range[0] = 0;
|
|
|
- range[1] = 0;
|
|
|
- }
|
|
|
-
|
|
|
- vtkContourFilter *conFilter = vtkContourFilter::New();
|
|
|
- conFilter->SetInputConnection(cutSource_->GetOutputPort());
|
|
|
- conFilter->GenerateValues(conLevel_, range[0],range[1]);
|
|
|
- conFilter->Update();
|
|
|
-
|
|
|
- vtkDataSetMapper *mapper = vtkDataSetMapper::New();
|
|
|
- mapper->InterpolateScalarsBeforeMappingOn();
|
|
|
- mapper->SetInputConnection(conFilter->GetOutputPort());
|
|
|
- mapper->SetScalarRange(range[0],range[1]);
|
|
|
-
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- if (_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUsePointData();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUseCellData();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- vtkLookupTable *table = (vtkLookupTable*)mapper->GetLookupTable();
|
|
|
- table->GetHueRange(range);
|
|
|
- table->SetHueRange(range[1],range[0]);
|
|
|
- table->SetNumberOfColors(conLevel_);
|
|
|
-
|
|
|
- vtkActor *actor = vtkActor::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor(actor);
|
|
|
- }
|
|
|
-
|
|
|
- contourLinesFilter_ = conFilter;
|
|
|
- /*if (sliceMapper_ != NULL)
|
|
|
- {
|
|
|
- sliceMapper_->AddItem (mapper);
|
|
|
- }*/
|
|
|
- sliceActors_[1] = actor;
|
|
|
- sliceTable_[1] = table;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show On UnSlice Contour Lines Display(等高线显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnUnSliceContourLinesDisplay()
|
|
|
-{
|
|
|
- if(sliceActors_[1] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[1]->VisibilityOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show On UnSlice Contour Lines Display(关闭等高线显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffUnSliceContourLinesDisplay()
|
|
|
-{
|
|
|
- if(sliceActors_[1] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[1]->VisibilityOff();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Delete UnSlice Contour Lines Display(删除等高线显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::DeleteUnSliceCOntourLinesDisplay()
|
|
|
-{
|
|
|
- if (sliceActors_[1] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[1]->VisibilityOff();
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->RemoveActor(sliceActors_[1]);
|
|
|
- }
|
|
|
-
|
|
|
- sliceActors_[1]->Delete();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Contour Lines Label Display(创建UNslice等高线标签显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceContourLinesLabelDisplay()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- double range[2];
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- range[0] = _source->scalarRange[usedScalarIndex_][0];
|
|
|
- range[1] = _source->scalarRange[usedScalarIndex_][1];
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- range[0] = 0;
|
|
|
- range[1] = 0;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- vtkContourFilter *labelFilter = vtkContourFilter::New();
|
|
|
- labelFilter->SetInputConnection(cutSource_->GetOutputPort());
|
|
|
- labelFilter->GenerateValues(conLevel_, range[0],range[1]);
|
|
|
- labelFilter->Update();
|
|
|
-
|
|
|
- int numPoints = labelFilter->GetOutput()->GetNumberOfPoints();
|
|
|
- vtkMaskPoints *mask = vtkMaskPoints::New();
|
|
|
- mask->SetInputConnection(labelFilter->GetOutputPort());
|
|
|
- mask->SetOnRatio((double)numPoints/conLevel_);
|
|
|
- mask->SetMaximumNumberOfPoints(50);
|
|
|
- mask->RandomModeOn();
|
|
|
-
|
|
|
- vtkSelectVisiblePoints *visPoints = vtkSelectVisiblePoints::New();
|
|
|
- visPoints->SetInputConnection(mask->GetOutputPort());
|
|
|
- visPoints->SetRenderer(_renderer);
|
|
|
-
|
|
|
- vtkLabeledDataMapper *mapper = vtkLabeledDataMapper::New();
|
|
|
- mapper->GlobalWarningDisplayOff();
|
|
|
- mapper->SetInputConnection(mask->GetOutputPort());
|
|
|
- mapper->SetLabelModeToLabelScalars();
|
|
|
- mapper->GetLabelTextProperty()->SetFontFamilyToArial();
|
|
|
- mapper->GetLabelTextProperty()->SetFontSize(10);
|
|
|
- mapper->GetLabelTextProperty()->SetColor(1,1,1);
|
|
|
-
|
|
|
- vtkActor2D *actor = vtkActor2D::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor2D(actor);
|
|
|
- }
|
|
|
-
|
|
|
- contourLabelFilter_ = labelFilter;
|
|
|
- sliceActors_[2] = (vtkActor*) actor;
|
|
|
- /*if (sliceMapper_ != NULL)
|
|
|
- {
|
|
|
- sliceMapper_->AddItem (mapper);
|
|
|
- }*/
|
|
|
- sliceTable_[2] = NULL;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show on UnSlice Contour Lines Label Display(打开UNslice等高线标签显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnUnSliceContourLinesLabelDisplay()
|
|
|
-{
|
|
|
- if(sliceActors_[2] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[2]->VisibilityOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Show off UnSlice Contour Lines Label Display(关闭UNslice等高线标签显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffUnSliceContourLinesLabelDisplay()
|
|
|
-{
|
|
|
- if(sliceActors_[2] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[2]->VisibilityOff();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: delete UnSlice Contour Lines Label Display(删除UNslice等高线标签显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::DeleteUnSliceContourLinesLabelDisplay()
|
|
|
-{
|
|
|
- if (sliceActors_[2] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[2]->VisibilityOff();
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->RemoveActor(sliceActors_[2]);
|
|
|
- }
|
|
|
-
|
|
|
- sliceActors_[2]->Delete();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Vector Display(创建UNslice矢量显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceVectorDisplay()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- double range[2];
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- range[0] = _source->scalarRange[usedScalarIndex_][0];
|
|
|
- range[1] = _source->scalarRange[usedScalarIndex_][1];
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- range[0] = 0;
|
|
|
- range[1] = 0;
|
|
|
- }
|
|
|
-
|
|
|
- vtkGlyphSource2D *glyph2D = vtkGlyphSource2D::New();
|
|
|
- glyph2D->SetGlyphTypeToArrow();
|
|
|
- glyph2D->SetScale(1.0);
|
|
|
- glyph2D->SetScale2(1.5);
|
|
|
- glyph2D->SetCenter(0, 0, 0);
|
|
|
- glyph2D->FilledOff();
|
|
|
-
|
|
|
- vtkGlyph3D *glyph3D = vtkGlyph3D::New();
|
|
|
- glyph3D->SetInputConnection(cutSource_->GetOutputPort());
|
|
|
- glyph3D->SetSourceData(glyph2D->GetOutput());
|
|
|
- glyph3D->ScalingOn();
|
|
|
- glyph3D->ClampingOn();
|
|
|
- glyph3D->GeneratePointIdsOff();
|
|
|
- glyph3D->SetIndexModeToOff();
|
|
|
- glyph3D->SetVectorModeToUseVector();
|
|
|
- glyph3D->SetScaleFactor(0.2);
|
|
|
-
|
|
|
- vtkDataSetMapper *mapper = vtkDataSetMapper::New();
|
|
|
- mapper->SetInputData(glyph3D->GetOutput());
|
|
|
- mapper->SetScalarRange(range[0], range[1]);
|
|
|
- mapper->InterpolateScalarsBeforeMappingOn();
|
|
|
-
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- if (_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUsePointData();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUseCellData();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- vtkLookupTable *table = (vtkLookupTable*)mapper->GetLookupTable();
|
|
|
- table->GetHueRange(range);
|
|
|
- table->SetHueRange(range[1], range[0]);
|
|
|
- table->SetNumberOfColors(conLevel_);
|
|
|
-
|
|
|
- vtkActor *actor = vtkActor::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor(actor);
|
|
|
- }
|
|
|
- /*if (sliceMapper_ != NULL)
|
|
|
- {
|
|
|
- sliceMapper_->AddItem (mapper);
|
|
|
- }*/
|
|
|
- sliceActors_[3] = actor;
|
|
|
- sliceTable_[3] = table;
|
|
|
- sliceGlyph2D_ = glyph2D;
|
|
|
- sliceGlyph3D_ = glyph3D;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: show on UnSlice Vector Display(打开UNslice矢量显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnUnSliceVectorDisplay()
|
|
|
-{
|
|
|
- if(sliceActors_[3] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[3]->VisibilityOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: show off UnSlice Vector Display(关闭UNslice矢量显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffUnSliceVectorDisplay()
|
|
|
-{
|
|
|
- if(sliceActors_[3] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[3]->VisibilityOff();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Delete UnSlice Vector Display(删除UNslice矢量显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::DeleteUnSliceVectorDisplay()
|
|
|
-{
|
|
|
- if (sliceActors_[3] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[3]->VisibilityOff();
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->RemoveActor(sliceActors_[3]);
|
|
|
- }
|
|
|
-
|
|
|
- sliceActors_[3]->Delete();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Shade Display(创建UnSlice着色显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceShadeDisplay()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- vtkGeometryFilter *geoFilter=vtkGeometryFilter::New();
|
|
|
- geoFilter->SetInputData(cutSource_->GetOutput());
|
|
|
-
|
|
|
- vtkDataSetMapper *mapper=vtkDataSetMapper::New();
|
|
|
- mapper->SetInputConnection(geoFilter->GetOutputPort());
|
|
|
- mapper->ScalarVisibilityOff();
|
|
|
-
|
|
|
- vtkActor *actor=vtkActor::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
- actor->GetProperty()->SetColor(shadeColor_[0], shadeColor_[1], shadeColor_[2]);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor(actor);
|
|
|
- }
|
|
|
-
|
|
|
- if (sliceMapper_ != NULL)
|
|
|
- {
|
|
|
- sliceMapper_->AddItem (mapper);
|
|
|
- }
|
|
|
- sliceTable_[4] = NULL;
|
|
|
- sliceActors_[4] = actor;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Shade Color(修改UnSlice着色颜色)
|
|
|
-* @param: c0-r c1-g c2-b
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceShadeColor(double c0, double c1, double c2)
|
|
|
-{
|
|
|
- if (sliceActors_[4]!=NULL)
|
|
|
- {
|
|
|
- shadeColor_[0] = c0;
|
|
|
- shadeColor_[1] = c1;
|
|
|
- shadeColor_[2] = c2;
|
|
|
-
|
|
|
- (sliceActors_[4]->GetProperty())->SetColor(c0, c1, c2);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: show on UnSlice Shade Color(打开UnSlice着色颜色)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnUnSliceShade()
|
|
|
-{
|
|
|
- if(sliceActors_[4] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[4]->VisibilityOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: show off UnSlice Shade Color(关闭UnSlice着色颜色)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffUnSliceShade()
|
|
|
-{
|
|
|
- if(sliceActors_[4] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[4]->VisibilityOff();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Mesh Display(创建unslice网格显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceMeshDisplay()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- vtkGeometryFilter *geoFilter=vtkGeometryFilter::New();
|
|
|
- geoFilter->SetInputData(cutSource_->GetOutput());
|
|
|
-
|
|
|
- vtkDataSetMapper *mapper=vtkDataSetMapper::New();
|
|
|
- mapper->SetInputConnection(geoFilter->GetOutputPort());
|
|
|
- mapper->ScalarVisibilityOff();
|
|
|
-
|
|
|
- vtkActor *actor=vtkActor::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
- actor->GetProperty()->SetColor(meshColor_[0], meshColor_[1], meshColor_[2]);
|
|
|
- (actor->GetProperty())->SetRepresentationToWireframe();
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor(actor);
|
|
|
- }
|
|
|
-
|
|
|
- if (sliceMapper_ != NULL)
|
|
|
- {
|
|
|
- sliceMapper_->AddItem (mapper);
|
|
|
- }
|
|
|
- sliceTable_[5] = NULL;
|
|
|
- sliceActors_[5] = actor;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Mesh Color(修改unslice网格显示)
|
|
|
-* @param: c0-r c1-g c2-b
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceMeshColor(double c0, double c1, double c2)
|
|
|
-{
|
|
|
- if (sliceActors_[5]!=NULL)
|
|
|
- {
|
|
|
- shadeColor_[0] = c0;
|
|
|
- shadeColor_[1] = c1;
|
|
|
- shadeColor_[2] = c2;
|
|
|
-
|
|
|
- (sliceActors_[5]->GetProperty())->SetColor(c0, c1, c2);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: show on UnSlice Mesh Color(打开unslice网格显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOnUnSliceMesh()
|
|
|
-{
|
|
|
- if(sliceActors_[5] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[5]->VisibilityOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: show off UnSlice Mesh Color(关闭unslice网格显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ShowOffUnSliceMesh()
|
|
|
-{
|
|
|
- if(sliceActors_[5] != NULL)
|
|
|
- {
|
|
|
- sliceActors_[5]->VisibilityOff();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set UnSlice Contour Opacity(设置UnSlice轮廓不透明度)
|
|
|
-* @param: value -- opacity value
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetUnSliceContourOpacity(double value)
|
|
|
-{
|
|
|
- if (sliceActors_[0] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[0]->GetProperty())->SetOpacity(value);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get UnSlice Contour Opacity(获取UnSlice轮廓不透明度)
|
|
|
-* @param: void
|
|
|
-* @ret: opacity value
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-double vtkVISUnSlice::GetUnSliceContourOpacity()
|
|
|
-{
|
|
|
- if (sliceActors_[0] != NULL)
|
|
|
- {
|
|
|
- return (sliceActors_[0]->GetProperty())->GetOpacity();
|
|
|
- }
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Vector Color Mode(修改UnSlice矢量颜色模式)
|
|
|
-* @param: ColorByScale ColorByScalar ColorByVector
|
|
|
-* @ret: opacity value
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceVectorColorMode(char* mode)
|
|
|
-{
|
|
|
-
|
|
|
- if (sliceGlyph3D_ != NULL)
|
|
|
- {
|
|
|
- if (strcmp(mode, "ColorByScale") == 0)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetColorModeToColorByScale();
|
|
|
- }
|
|
|
- else if (strcmp(mode, "ColorByScalar") == 0)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetColorModeToColorByScalar();
|
|
|
- }
|
|
|
- else if (strcmp(mode, "ColorByVector") == 0)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetColorModeToColorByVector();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetColorModeToColorByScalar();
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Vector Scale Mode(修改UnSlice矢量缩放模式)
|
|
|
-* @param: mode -- Scale mode "ScaleByScalar" "ScaleByVector" "ScaleByVectorComponents" "DataScalingOff"
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceVectorScaleMode(char* mode)
|
|
|
-{
|
|
|
-
|
|
|
- if (sliceGlyph3D_ != NULL)
|
|
|
- {
|
|
|
- if (strcmp(mode, "ScaleByScalar") == 0)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetScaleModeToScaleByScalar();
|
|
|
- }
|
|
|
- else if (strcmp(mode, "ScaleByVectorComponents") == 0)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetScaleModeToScaleByVector();
|
|
|
- }
|
|
|
- else if (strcmp(mode, "ColorByVector") == 0)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetScaleModeToScaleByVectorComponents();
|
|
|
- }
|
|
|
- else if (strcmp(mode, "DataScalingOff") == 0)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetScaleModeToDataScalingOff ();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetScaleModeToScaleByScalar();
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Vector Scale factor(修改UnSlice矢量缩放因子)
|
|
|
-* @param: scale -- Scale factor
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceVectorScaleFactor(double scaleFactor)
|
|
|
-{
|
|
|
-
|
|
|
- if (sliceGlyph3D_ != NULL)
|
|
|
- {
|
|
|
- sliceGlyph3D_->SetScaleFactor(scaleFactor);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set UnSlice Vector Filled On(将UnSlice矢量填充设置为打开)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetUnSliceVectorFilledOn()
|
|
|
-{
|
|
|
- if (sliceGlyph2D_ != NULL)
|
|
|
- {
|
|
|
- sliceGlyph2D_->FilledOn();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set UnSlice Vector Filled Off(将UnSlice矢量填充设置为关闭)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetUnSliceVectorFilledOff()
|
|
|
-{
|
|
|
- if (sliceGlyph2D_ != NULL)
|
|
|
- {
|
|
|
- sliceGlyph2D_->FilledOff();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Vector Position(修改UNslice矢量位置)
|
|
|
-* @param: p0-x p1-y p2-z
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceVectorPosition(double p0, double p1, double p2)
|
|
|
-{
|
|
|
-
|
|
|
- if (sliceGlyph2D_ != NULL)
|
|
|
- {
|
|
|
- sliceGlyph2D_->SetCenter(p0, p1, p2);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Shade(修改UNslice着色)
|
|
|
-* @param: value -- opacity value
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceShadeOpacity(double value)
|
|
|
-{
|
|
|
- if (sliceActors_[4] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[4]->GetProperty())->SetOpacity(value);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Contour Level(修改UNslice等高线水准)
|
|
|
-* @param: level
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceContourLevel(int level)
|
|
|
-{
|
|
|
- if (level < 2)
|
|
|
- {
|
|
|
- ErrorInfo(0, "Contour Level must be within range: 2 to 50!, Using the Min Level 2 insteading!");
|
|
|
-
|
|
|
- level = 2;
|
|
|
- }
|
|
|
- if(level>MAXLEVEL)
|
|
|
- {
|
|
|
- ErrorInfo(0, "Contour Level must be within range: 2 to 50!, Using the Max Level 50 insteading!");
|
|
|
-
|
|
|
- level = MAXLEVEL;
|
|
|
- }
|
|
|
-
|
|
|
- conLevel_ = level;
|
|
|
-
|
|
|
- if (sliceTable_[0] != NULL)
|
|
|
- {
|
|
|
- sliceTable_[0]->SetNumberOfColors(conLevel_);
|
|
|
- }
|
|
|
-
|
|
|
- if(bandedContourFilter_ != NULL)
|
|
|
- {
|
|
|
- bandedContourFilter_->GenerateValues(conLevel_, scalarRange_[0], scalarRange_[1]);
|
|
|
- bandedContourFilter_->ClippingOn();
|
|
|
- }
|
|
|
-
|
|
|
- if (contourLinesFilter_ != NULL)
|
|
|
- {
|
|
|
- contourLinesFilter_->GenerateValues(conLevel_, scalarRange_[0], scalarRange_[1]);
|
|
|
- }
|
|
|
-
|
|
|
- if (sliceTable_[1] != NULL)
|
|
|
- {
|
|
|
- sliceTable_[1]->SetNumberOfColors(conLevel_);
|
|
|
- }
|
|
|
-
|
|
|
- if (contourLabelFilter_!= NULL)
|
|
|
- {
|
|
|
- contourLabelFilter_->GenerateValues(conLevel_, scalarRange_[0], scalarRange_[1]);
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Vector Position(修改UNslice矢量位置)
|
|
|
-* @param: lineWidth -- line width
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceMeshLineWidth(double lineWidth)
|
|
|
-{
|
|
|
- if (sliceActors_[5]!=NULL)
|
|
|
- {
|
|
|
- (sliceActors_[5]->GetProperty())->SetLineWidth(lineWidth);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify UnSlice Lines Width(修改UNslice等高线宽度)
|
|
|
-* @param: lineWidth -- line width
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyUnSliceContourLinesWidth(double lineWidth)
|
|
|
-{
|
|
|
- if (sliceActors_[1]!=NULL)
|
|
|
- {
|
|
|
- (sliceActors_[1]->GetProperty())->SetLineWidth(lineWidth);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get slice plane widget(获取切片平面小部件)
|
|
|
-* @param: void
|
|
|
-* @ret: vtkImplicitPlaneWidget
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-vtkImplicitPlaneWidget* vtkVISUnSlice::GetSlicePlaneWidget()
|
|
|
-{
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- return this->planeWidget_;
|
|
|
- }
|
|
|
-
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get slice plane(获取切片平面)
|
|
|
-* @param: void
|
|
|
-* @ret: vtkPlane
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-vtkPlane* vtkVISUnSlice::GetSlicePlane()
|
|
|
-{
|
|
|
- if(slicePlane_ != NULL)
|
|
|
- {
|
|
|
- return this->slicePlane_;
|
|
|
- }
|
|
|
-
|
|
|
- return NULL;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set Slice PlaneWidget Handle Size(设置切片平面小部件句柄大小)
|
|
|
-* @param: size
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifySlicePlaneWidgetHandleSize(double size)
|
|
|
-{
|
|
|
- if (planeWidget_ != NULL)
|
|
|
- {
|
|
|
- planeWidget_->SetHandleSize(size);
|
|
|
- planeWidget_->UpdatePlacement();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Modify Display Scalar Range(修改显示标量范围)
|
|
|
-* @param: min Scalar max Scalar
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyDisplayScalarRange(double min,double max)
|
|
|
-{
|
|
|
- scalarRange_[0] = min;
|
|
|
- scalarRange_[1] = max;
|
|
|
- if (min == max) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if(bandedContourFilter_ != NULL)
|
|
|
- {
|
|
|
- //cout<<"test here 4444"<<endl;
|
|
|
-
|
|
|
- bandedContourFilter_->GenerateValues(conLevel_, min, max);
|
|
|
- bandedContourFilter_->Modified();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- for (int i= 0; i<6; i++)
|
|
|
- {
|
|
|
- if (i == 0 || i== 1 || i == 3)
|
|
|
- {
|
|
|
-
|
|
|
- if(sliceActors_[i] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->SetRange(min, max);
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->Modified();
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarRange(min, max);
|
|
|
- (sliceActors_[i]->GetMapper())->Modified();
|
|
|
-
|
|
|
- sliceActors_[i]->Modified();
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Clipping On Slice Contour Display(切片轮廓显示上的剪裁)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ClippingOnSliceContourDisplay()
|
|
|
-{
|
|
|
-
|
|
|
- if(bandedContourFilter_ != NULL)
|
|
|
- {
|
|
|
- bandedContourFilter_->GenerateValues(conLevel_, scalarRange_[0], scalarRange_[1] );
|
|
|
- bandedContourFilter_->ClippingOn();
|
|
|
- bandedContourFilter_->Modified();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- for (int i= 0; i<6; i++)
|
|
|
- {
|
|
|
- if (i == 0 || i== 1 || i == 3)
|
|
|
- {
|
|
|
- if(sliceActors_[i] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->SetRange(scalarRange_[0], scalarRange_[1]);
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->Modified();
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarRange(scalarRange_[0], scalarRange_[1]);
|
|
|
- (sliceActors_[i]->GetMapper())->Modified();
|
|
|
-
|
|
|
- sliceActors_[i]->Modified();
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Clipping Off Slice Contour Display(剪裁切片轮廓显示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ClippingOffSliceContourDisplay()
|
|
|
-{
|
|
|
-
|
|
|
- if(bandedContourFilter_ != NULL)
|
|
|
- {
|
|
|
- bandedContourFilter_->GenerateValues(conLevel_, scalarRange_[0], scalarRange_[1] );
|
|
|
- bandedContourFilter_->ClippingOff();
|
|
|
- bandedContourFilter_->Modified();
|
|
|
- }
|
|
|
-
|
|
|
- for (int i= 0; i<6; i++)
|
|
|
- {
|
|
|
- if (i == 0 || i== 1 || i == 3)
|
|
|
- {
|
|
|
- if(sliceActors_[i] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->SetRange(scalarRange_[0], scalarRange_[1]);
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->Modified();
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarRange(scalarRange_[0], scalarRange_[1]);
|
|
|
- (sliceActors_[i]->GetMapper())->Modified();
|
|
|
-
|
|
|
- sliceActors_[i]->Modified();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Set slice source(设置切片源)
|
|
|
-* @param: uGrid:slice source. yValue:slice value of y.
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-bool vtkVISUnSlice::SetBoundSliceSource(vtkUnstructuredGrid* uGrid , double yValue)
|
|
|
-{
|
|
|
- if (uGrid==NULL)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
- uGrid->Modified();
|
|
|
-
|
|
|
- double pBound[6];
|
|
|
- uGrid->GetBounds(pBound);
|
|
|
-
|
|
|
- if (yValue<pBound[2] || yValue>pBound[3])
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- vtkPlane *plane = vtkPlane::New();
|
|
|
- double planeNormal[3];
|
|
|
- planeNormal[0] = 0.0;
|
|
|
- planeNormal[1] = 1.0;
|
|
|
- planeNormal[2] = 0.0;
|
|
|
- plane->SetNormal(planeNormal[0], planeNormal[1], planeNormal[2]);
|
|
|
-
|
|
|
- double planeCoord[3];
|
|
|
- planeCoord[0] = 0.0;
|
|
|
- planeCoord[1] = yValue;
|
|
|
- planeCoord[2] = 0.0;
|
|
|
- plane->SetOrigin(planeCoord[0],planeCoord[1],planeCoord[2]);
|
|
|
-
|
|
|
- vtkCutter *cutter = vtkCutter::New();
|
|
|
- cutter->SetInputData(uGrid);
|
|
|
- cutter->SetCutFunction(plane);
|
|
|
- cutter->GenerateCutScalarsOff();
|
|
|
- cutter->SetSortByToSortByCell();
|
|
|
- cutter->Update();
|
|
|
-
|
|
|
- vtkIdType n = cutter->GetOutput()->GetNumberOfPoints();
|
|
|
- cutSource_ = cutter;
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Get max value of X,and Set the point data source.(获取X的最大值,然后设置点数据源。)
|
|
|
-* @param: Points:point data source. max value of X.
|
|
|
-* @ret: bool
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-bool vtkVISUnSlice::GetXMaxPointData(double* xMax,vtkPoints* Points)
|
|
|
-{
|
|
|
- cutSource_->Update();
|
|
|
- vtkFloatArray* cutPointData = vtkFloatArray::New();
|
|
|
- cutPointData->SetNumberOfComponents(1);
|
|
|
-
|
|
|
- int pointNum = (cutSource_->GetOutput())->GetNumberOfPoints();
|
|
|
- if (pointNum <= 0)
|
|
|
- {
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- vtkDoubleArray* xVector = vtkDoubleArray::New();
|
|
|
- double point[3];
|
|
|
-
|
|
|
- for (int j=0; j<pointNum; j++)
|
|
|
- {
|
|
|
- (cutSource_->GetOutput())->GetPoint(j, point);
|
|
|
- xVector->InsertNextValue(point[0]);
|
|
|
- Points->InsertNextPoint(point[0],point[1],point[2]);
|
|
|
- }
|
|
|
- vtkSortDataArray::Sort(xVector);
|
|
|
- //cout<<"x max ="<<xVector[xVector.size()-1]<<endl;
|
|
|
- cutPointData->Modified();
|
|
|
- (*xMax) = xVector->GetValue(xVector->GetMaxId());
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: SetSliceSource_FD(设置切片源。)
|
|
|
-* @param: scalar vector
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::SetSliceSource_FD(char* scalar, char* vector)
|
|
|
-{
|
|
|
- int index1 = -1;
|
|
|
- int index2 = -1;
|
|
|
-
|
|
|
- if(scalar != NULL)
|
|
|
- {
|
|
|
- index1 = _source->GetScalarIndex(scalar);
|
|
|
- }
|
|
|
- if(vector != NULL)
|
|
|
- {
|
|
|
- index2 = _source->GetVectorIndex(vector);
|
|
|
- }
|
|
|
-
|
|
|
- vtkUnstructuredGrid *unGrid = vtkUnstructuredGrid::New();
|
|
|
- unGrid->DeepCopy(_source->unstruGrid);
|
|
|
-
|
|
|
- if (index1 != -1)
|
|
|
- {
|
|
|
- usedScalarIndex_ = index1;
|
|
|
-
|
|
|
- scalarSource_ = vtkDoubleArray::New();
|
|
|
- if(_source->scalarSource[index1]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- scalarSource_->DeepCopy(_source->scalarSource[index1]);
|
|
|
- (unGrid->GetPointData())->SetScalars(scalarSource_);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- scalarSource_->DeepCopy(_source->cellScalarSource_[index1]);
|
|
|
- (unGrid->GetCellData())->SetScalars(scalarSource_);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- if (index2 != -1)
|
|
|
- {
|
|
|
- usedVectorIndex_ = index2;
|
|
|
-
|
|
|
- if(_source->vectorSource[index2]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- (unGrid->GetPointData())->SetVectors(_source->vectorSource[index2]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- (unGrid->GetCellData())->SetVectors(_source->cellVectorSource_[index2]);
|
|
|
- }
|
|
|
- }
|
|
|
- unGrid->Modified();
|
|
|
-
|
|
|
- vtkPlane *plane = vtkPlane::New();
|
|
|
- plane->SetNormal(planeNormal_[0], planeNormal_[1], planeNormal_[2]);
|
|
|
-
|
|
|
- vtkCutter *cutter = vtkCutter::New();
|
|
|
- cutter->SetInputData(unGrid);
|
|
|
- cutter->SetCutFunction(plane);
|
|
|
- cutter->GenerateCutScalarsOff();
|
|
|
- cutter->SetSortByToSortByCell();
|
|
|
- cutter->Update();
|
|
|
-
|
|
|
- //cout<<"test here 1111"<<(cutter->GetOutput())->GetNumberOfPoints()<<endl;
|
|
|
-
|
|
|
- gridSource_ = unGrid;
|
|
|
- cutSource_ = cutter;
|
|
|
- slicePlane_ = plane;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief:Create Slice Widget_FD(创造切片窗口)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateSliceWidget_FD()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
- double* bounds;
|
|
|
- bounds = _source->GetSourceBounds();
|
|
|
-
|
|
|
- planeOrigin_[0] = (bounds[0]+bounds[1])/2;
|
|
|
- planeOrigin_[1] = (bounds[2]+bounds[3])/2;
|
|
|
- planeOrigin_[2] = (bounds[4]+bounds[5])/2;
|
|
|
-
|
|
|
- vtkImplicitPlaneWidget* planeWidget = vtkImplicitPlaneWidget::New();
|
|
|
- planeWidget->SetInteractor(_renWin->GetInteractor());
|
|
|
- planeWidget->SetPlaceFactor(1.0);
|
|
|
-
|
|
|
- planeWidget->SetHandleSize(0.005);
|
|
|
- planeWidget->SetDiagonalRatio(0.2);
|
|
|
-
|
|
|
- planeWidget->GetPlane(slicePlane_);
|
|
|
- planeWidget->SetInputData(cutSource_->GetOutput());
|
|
|
-
|
|
|
- planeWidget->TubingOff();
|
|
|
- //add begin
|
|
|
- planeWidget->GetEdgesProperty()->SetLineWidth(2.0);
|
|
|
- planeWidget->GetPlaneProperty()->SetColor(0.5, 0.5, 0.5);
|
|
|
- planeWidget->GetPlaneProperty()->SetOpacity(0.5);
|
|
|
- planeWidget->GetSelectedPlaneProperty()->SetOpacity(0.5);
|
|
|
- planeWidget->OutlineTranslationOff();
|
|
|
-
|
|
|
- planeWidget->PlaceWidget(bounds[0], bounds[1], bounds[2], bounds[3], bounds[4], bounds[5]);
|
|
|
- planeWidget->SetOrigin(planeOrigin_[0], planeOrigin_[1], planeOrigin_[2]);
|
|
|
- slicePlane_->SetOrigin(planeOrigin_[0], planeOrigin_[1], planeOrigin_[2]);
|
|
|
- vtkFloatArray *arry = GetCutScalarData();
|
|
|
- if (arry) arry->GetRange(scalarRange_);
|
|
|
- //add end
|
|
|
- planeWidget->On();
|
|
|
-
|
|
|
- planeWidget_ = planeWidget;
|
|
|
-
|
|
|
- vtkCallbackCommand *cc = vtkCallbackCommand::New();
|
|
|
- cc->SetCallback(GenerateSliceProData_FD);
|
|
|
- cc->SetClientData(this);
|
|
|
-
|
|
|
- planeWidget->AddObserver(vtkCommand::InteractionEvent, cc);
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: GenerateSliceProData_FD(生成切片数据)
|
|
|
-* @param: vtkObject
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::GenerateSliceProData_FD(vtkObject *caller, unsigned long, void* obj, void *)
|
|
|
-{
|
|
|
- vtkVISUnSlice* usObj = (vtkVISUnSlice*)obj;
|
|
|
-
|
|
|
- if (usObj->planeWidget_ == NULL)
|
|
|
- {
|
|
|
- usObj->ErrorInfo(1,"Plane Widget Not Created");
|
|
|
- return;
|
|
|
- }
|
|
|
- usObj->planeWidget_->GetPlane(usObj->slicePlane_);
|
|
|
- //add begin. when cut plane moving, update the cut plane's scalar range
|
|
|
- double r[2];
|
|
|
- vtkFloatArray *arry = usObj->GetCutScalarData();
|
|
|
- if (arry) arry->GetRange(r);
|
|
|
- usObj->ModifyDisplayScalarRange_FD(r[0], r[1]);
|
|
|
- //add end
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Contour Display_FD(创造切片等高线展示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceContourDisplay_FD()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- double range[2];
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- //range[0] = _source->scalarRange[usedScalarIndex_][0];
|
|
|
- //range[1] = _source->scalarRange[usedScalarIndex_][1];
|
|
|
- range[0] = scalarRange_[0]; //use current cut plane's scalar range,
|
|
|
- range[1] = scalarRange_[1]; //instead of the whole input's scalar range.
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- range[0] = 0;
|
|
|
- range[1] = 0;
|
|
|
- }
|
|
|
- cutSource_->Update();
|
|
|
-
|
|
|
- vtkGeometryFilter *geoFilter = vtkGeometryFilter::New();
|
|
|
- geoFilter->SetInputData(cutSource_->GetOutput());
|
|
|
- geoFilter->Update();
|
|
|
-
|
|
|
- vtkBandedPolyDataContourFilter *conFilter = vtkBandedPolyDataContourFilter::New();
|
|
|
- conFilter->GlobalWarningDisplayOff();
|
|
|
- conFilter->SetInputData(geoFilter->GetOutput());
|
|
|
- conFilter->GenerateValues(conLevel_, range[0], range[1]);
|
|
|
- conFilter->ClippingOn();
|
|
|
- conFilter->Modified();
|
|
|
- conFilter->Update();
|
|
|
-
|
|
|
- vtkDataSetMapper *mapper = vtkDataSetMapper::New();
|
|
|
- mapper->InterpolateScalarsBeforeMappingOn();
|
|
|
-
|
|
|
- if(_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- mapper->SetInputConnection(conFilter->GetOutputPort());
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mapper->SetInputConnection(geoFilter->GetOutputPort());
|
|
|
- }
|
|
|
- mapper->SetScalarRange(range[0],range[1]);
|
|
|
-
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- if (_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUsePointData();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUseCellData();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- vtkLookupTable *table = (vtkLookupTable*)mapper->GetLookupTable();
|
|
|
- table->GetHueRange(range);
|
|
|
- table->SetHueRange(range[1],range[0]);
|
|
|
- table->SetNumberOfColors(conLevel_);
|
|
|
-
|
|
|
- vtkActor *actor = vtkActor::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor(actor);
|
|
|
- }
|
|
|
-
|
|
|
- sliceActors_[0] = actor;
|
|
|
-
|
|
|
- sliceTable_[0] = table;
|
|
|
-
|
|
|
- bandedContourFilter_ = conFilter;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Contour Lines Display_FD(创造切片等高线轮廓展示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceContourLinesDisplay_FD()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- double range[2];
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- //range[0] = _source->scalarRange[usedScalarIndex_][0];
|
|
|
- //range[1] = _source->scalarRange[usedScalarIndex_][1];
|
|
|
- range[0] = scalarRange_[0]; //use current cut plane's scalar range,
|
|
|
- range[1] = scalarRange_[1]; //instead of the whole input's scalar range.
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- range[0] = 0;
|
|
|
- range[1] = 0;
|
|
|
- }
|
|
|
-
|
|
|
- vtkContourFilter *conFilter = vtkContourFilter::New();
|
|
|
- conFilter->GlobalWarningDisplayOff();
|
|
|
- conFilter->SetInputConnection(cutSource_->GetOutputPort());
|
|
|
- conFilter->GenerateValues(conLevel_, range[0],range[1]);
|
|
|
- conFilter->Update();
|
|
|
-
|
|
|
- vtkDataSetMapper *mapper = vtkDataSetMapper::New();
|
|
|
- mapper->InterpolateScalarsBeforeMappingOn();
|
|
|
- mapper->SetInputConnection(conFilter->GetOutputPort());
|
|
|
- mapper->SetScalarRange(range[0],range[1]);
|
|
|
-
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- if (_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUsePointData();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- mapper->SetScalarModeToUseCellData();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- vtkLookupTable *table = (vtkLookupTable*)mapper->GetLookupTable();
|
|
|
- table->GetHueRange(range);
|
|
|
- table->SetHueRange(range[1],range[0]);
|
|
|
- table->SetNumberOfColors(conLevel_);
|
|
|
-
|
|
|
- vtkActor *actor = vtkActor::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor(actor);
|
|
|
- }
|
|
|
-
|
|
|
- contourLinesFilter_ = conFilter;
|
|
|
- sliceActors_[1] = actor;
|
|
|
- sliceTable_[1] = table;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief: Create UnSlice Contour Lines Lable Display_FD(创造切片等高线轮廓标签展示)
|
|
|
-* @param: void
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::CreateUnSliceContourLinesLabelDisplay_FD()
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- double range[2];
|
|
|
- if (usedScalarIndex_ != -1)
|
|
|
- {
|
|
|
- //range[0] = _source->scalarRange[usedScalarIndex_][0];
|
|
|
- //range[1] = _source->scalarRange[usedScalarIndex_][1];
|
|
|
- range[0] = scalarRange_[0]; //use current cut plane's scalar range,
|
|
|
- range[1] = scalarRange_[1]; //instead of the whole input's scalar range.
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- range[0] = 0;
|
|
|
- range[1] = 0;
|
|
|
- }
|
|
|
-
|
|
|
- vtkContourFilter *labelFilter = vtkContourFilter::New();
|
|
|
- labelFilter->GlobalWarningDisplayOff();
|
|
|
- labelFilter->SetInputConnection(cutSource_->GetOutputPort());
|
|
|
- labelFilter->GenerateValues(conLevel_, range[0],range[1]);
|
|
|
- labelFilter->Update();
|
|
|
-
|
|
|
- int numPoints = labelFilter->GetOutput()->GetNumberOfPoints();
|
|
|
- vtkMaskPoints *mask = vtkMaskPoints::New();
|
|
|
- mask->SetInputConnection(labelFilter->GetOutputPort());
|
|
|
- mask->SetOnRatio((double)numPoints/conLevel_);
|
|
|
- mask->SetMaximumNumberOfPoints(50);
|
|
|
- mask->RandomModeOn();
|
|
|
-
|
|
|
- vtkSelectVisiblePoints *visPoints = vtkSelectVisiblePoints::New();
|
|
|
- visPoints->SetInputConnection(mask->GetOutputPort());
|
|
|
- visPoints->SetRenderer(_renderer);
|
|
|
-
|
|
|
- vtkLabeledDataMapper *mapper = vtkLabeledDataMapper::New();
|
|
|
- mapper->GlobalWarningDisplayOff();
|
|
|
- mapper->SetInputConnection(mask->GetOutputPort());
|
|
|
- mapper->SetLabelModeToLabelScalars();
|
|
|
- mapper->GetLabelTextProperty()->SetFontFamilyToArial();
|
|
|
- mapper->GetLabelTextProperty()->SetFontSize(10);
|
|
|
- mapper->GetLabelTextProperty()->SetColor(1,1,1);
|
|
|
-
|
|
|
- vtkActor2D *actor = vtkActor2D::New();
|
|
|
- actor->SetMapper(mapper);
|
|
|
-
|
|
|
- if (_renderer != NULL)
|
|
|
- {
|
|
|
- _renderer->AddActor2D(actor);
|
|
|
- }
|
|
|
-
|
|
|
- contourLabelFilter_ = labelFilter;
|
|
|
- sliceActors_[2] = (vtkActor*) actor;
|
|
|
- sliceTable_[2] = NULL;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief:Modify Display Scalar Range_FD(修改展示标量范围)
|
|
|
-* @param: min and max scalar
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifyDisplayScalarRange_FD(double min,double max)
|
|
|
-{
|
|
|
- scalarRange_[0] = min;
|
|
|
- scalarRange_[1] = max;
|
|
|
- if (min == max) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if(bandedContourFilter_ != NULL)
|
|
|
- {
|
|
|
- bandedContourFilter_->GenerateValues(conLevel_, min, max);
|
|
|
- bandedContourFilter_->Modified();
|
|
|
- }
|
|
|
- //add begin. update contour lines/labels values
|
|
|
- if (contourLinesFilter_ != NULL)
|
|
|
- {
|
|
|
- contourLinesFilter_->GenerateValues(conLevel_, min, max);
|
|
|
- contourLinesFilter_->Modified();
|
|
|
- }
|
|
|
- if (contourLabelFilter_!= NULL)
|
|
|
- {
|
|
|
- contourLabelFilter_->GenerateValues(conLevel_, min, max);
|
|
|
- contourLabelFilter_->Modified();
|
|
|
- }
|
|
|
- //add end
|
|
|
-
|
|
|
- for (int i= 0; i<6; i++)
|
|
|
- {
|
|
|
- if (i == 0 || i== 1 || i == 3)
|
|
|
- {
|
|
|
-
|
|
|
- if(sliceActors_[i] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->SetRange(min, max);
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->Modified();
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarRange(min, max);
|
|
|
- (sliceActors_[i]->GetMapper())->Modified();
|
|
|
-
|
|
|
- sliceActors_[i]->Modified();
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief:Modify slice scalar source_FD(修改切片标量源)
|
|
|
-* @param: scalar
|
|
|
-* @ret: void
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-void vtkVISUnSlice::ModifySliceSourceScalar_FD(char* scalar)
|
|
|
-{
|
|
|
- if (gridSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Grid Source are not Setted!");
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- int index = -1;
|
|
|
- if(scalar != NULL)
|
|
|
- {
|
|
|
- index = _source->GetScalarIndex(scalar);
|
|
|
- }
|
|
|
- if (index == -1)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Scalar data are not existed!");
|
|
|
- return;
|
|
|
- }
|
|
|
- if (scalarSource_ != 0)
|
|
|
- {
|
|
|
- scalarSource_->Delete();
|
|
|
- scalarSource_ = 0;
|
|
|
- }
|
|
|
- scalarSource_ = vtkDoubleArray::New();
|
|
|
- if (_source->scalarSource[index]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- scalarSource_->DeepCopy(_source->scalarSource[index]);
|
|
|
- (gridSource_->GetPointData())->SetScalars(scalarSource_);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- scalarSource_->DeepCopy(_source->cellScalarSource_[index]);
|
|
|
- (gridSource_->GetCellData())->SetScalars(scalarSource_);
|
|
|
- }
|
|
|
- gridSource_->Modified();
|
|
|
-
|
|
|
- usedScalarIndex_ = index;
|
|
|
-
|
|
|
- vtkFloatArray *arry = GetCutScalarData();
|
|
|
- if (arry) arry->GetRange(scalarRange_);
|
|
|
- //2011-05-10 zhuqin add begin.
|
|
|
- if(bandedContourFilter_ != NULL)
|
|
|
- {
|
|
|
- bandedContourFilter_->GenerateValues(conLevel_, scalarRange_[0],scalarRange_[1]);
|
|
|
- bandedContourFilter_->ClippingOn();
|
|
|
- bandedContourFilter_->Modified();
|
|
|
- }
|
|
|
- if (contourLinesFilter_ != NULL)
|
|
|
- {
|
|
|
- contourLinesFilter_->GenerateValues(conLevel_, scalarRange_[0],scalarRange_[1]);
|
|
|
- contourLinesFilter_->Modified();
|
|
|
- }
|
|
|
- if (contourLabelFilter_!= NULL)
|
|
|
- {
|
|
|
- contourLabelFilter_->GenerateValues(conLevel_, scalarRange_[0],scalarRange_[1]);
|
|
|
- contourLabelFilter_->Modified();
|
|
|
- }
|
|
|
- //2011-05-10 zhuqin add end.
|
|
|
-
|
|
|
-
|
|
|
- for (int i= 0; i<6; i++)
|
|
|
- {
|
|
|
- if (i == 0 || i== 1 || i == 3)
|
|
|
- {
|
|
|
- if(sliceActors_[i] != NULL)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->SetRange(scalarRange_[0],scalarRange_[1]);
|
|
|
- (sliceActors_[i]->GetMapper())->GetLookupTable()->Modified();
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarRange(scalarRange_[0],scalarRange_[1]);
|
|
|
-
|
|
|
- if (_source->scalarSource[usedScalarIndex_]->GetDataSize() != 0)
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarModeToUsePointData();
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- (sliceActors_[i]->GetMapper())->SetScalarModeToUseCellData();
|
|
|
- }
|
|
|
-
|
|
|
- (sliceActors_[i]->GetMapper())->Modified();
|
|
|
- sliceActors_[i]->Modified();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-* @brief:Get Source Bounds_FD(获取源边界)
|
|
|
-* @param: bounds
|
|
|
-* @ret: bool
|
|
|
-* @birth: created by czm in 20230326
|
|
|
-*/
|
|
|
-bool vtkVISUnSlice::GetSourceBounds_FD(double *bounds)
|
|
|
-{
|
|
|
- if (cutSource_ == NULL)
|
|
|
- {
|
|
|
- ErrorInfo(1,"Slice Source Not Set");
|
|
|
- return false;
|
|
|
- }
|
|
|
- double *range = _source->GetSourceBounds();
|
|
|
- for (int i = 0; i < 6; ++i)
|
|
|
- {
|
|
|
- bounds[i] = range[i];
|
|
|
- }
|
|
|
- return true;
|
|
|
-}
|