Add ReferenceLineLegendActor(not used yet)
This commit is contained in:
61
src/src/measure/ReferenceLineLegendActor.cpp
Normal file
61
src/src/measure/ReferenceLineLegendActor.cpp
Normal file
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// Created by Krad on 2022/4/11.
|
||||
//
|
||||
|
||||
#include "ReferenceLineLegendActor.h"
|
||||
#include <vtkObjectFactory.h>
|
||||
#include "vtkPolyDataMapper2D.h"
|
||||
#include "vtkRenderer.h"
|
||||
#include "vtkRenderWindow.h"
|
||||
#include "vtkCamera.h"
|
||||
#include "vtkPoints.h"
|
||||
#include "vtkProperty2D.h"
|
||||
|
||||
vtkStandardNewMacro(ReferenceLineLegendActor)
|
||||
|
||||
void ReferenceLineLegendActor::BuildShape(vtkRenderer* renderer) {
|
||||
//reference line 暂时不用考虑缩放问题
|
||||
vtkNew<vtkPoints> pts;
|
||||
vtkNew<vtkCellArray> lines;
|
||||
vtkIdType ids[2]={0,1};
|
||||
double p[3] = {.0, .0, .0};
|
||||
renderer->SetWorldPoint(linePoints->GetPoint(0));
|
||||
renderer->WorldToDisplay();
|
||||
renderer->GetDisplayPoint(p);
|
||||
ids[0] = pts->InsertNextPoint(p);
|
||||
renderer->SetWorldPoint(linePoints->GetPoint(1));
|
||||
renderer->WorldToDisplay();
|
||||
renderer->GetDisplayPoint(p);
|
||||
ids[1] = pts->InsertNextPoint(0,2.5,0.0);
|
||||
lines->InsertNextCell(2,ids);
|
||||
|
||||
renderData->SetPoints(pts);
|
||||
renderData->SetLines(lines);
|
||||
actor2D->GetMapper()->SetInputDataObject(renderData);
|
||||
}
|
||||
|
||||
void ReferenceLineLegendActor::ReleaseGraphicsResources(vtkWindow * iwin) {
|
||||
actor2D->ReleaseGraphicsResources(iwin);
|
||||
}
|
||||
|
||||
int ReferenceLineLegendActor::RenderOverlay(vtkViewport *viewport) {
|
||||
auto renderer = vtkRenderer::SafeDownCast(viewport);
|
||||
if (!renderer) return 0;
|
||||
BuildShape(renderer);
|
||||
return actor2D->RenderOverlay(viewport);
|
||||
}
|
||||
|
||||
ReferenceLineLegendActor::ReferenceLineLegendActor() {
|
||||
this->PickableOff();
|
||||
actor2D = vtkActor2D::New();
|
||||
actor2D->PickableOff();
|
||||
vtkNew<vtkPolyDataMapper2D> mapper;
|
||||
actor2D->SetMapper(mapper);
|
||||
actor2D->GetProperty()->SetLineWidth(1.0);
|
||||
actor2D->GetProperty()->SetColor(1.0,0.0,0.0);
|
||||
}
|
||||
|
||||
ReferenceLineLegendActor::~ReferenceLineLegendActor() {
|
||||
actor2D->Delete();
|
||||
actor2D = nullptr;
|
||||
}
|
||||
73
src/src/measure/ReferenceLineLegendActor.h
Normal file
73
src/src/measure/ReferenceLineLegendActor.h
Normal file
@@ -0,0 +1,73 @@
|
||||
//
|
||||
// Created by Krad on 2022/4/11.
|
||||
//
|
||||
|
||||
#ifndef OMEGAV_REFERENCELINELEGENDACTOR_H
|
||||
#define OMEGAV_REFERENCELINELEGENDACTOR_H
|
||||
|
||||
#include "vtkProp.h"
|
||||
#include "vtkActor2D.h"
|
||||
#include "vtkPolyData.h"
|
||||
#include "vtkNew.h" // for ivars
|
||||
class vtkRenderer;
|
||||
class ReferenceLineLegendActor : public vtkProp {
|
||||
public:
|
||||
//@{
|
||||
/**
|
||||
* Standard methods for instances of this class.
|
||||
*/
|
||||
static ReferenceLineLegendActor *New();
|
||||
|
||||
vtkTypeMacro(ReferenceLineLegendActor, vtkProp);
|
||||
|
||||
virtual void BuildShape(vtkRenderer* renderer);
|
||||
|
||||
//@{
|
||||
/**
|
||||
* Methods to make this class behave as a vtkProp.
|
||||
*/
|
||||
double *GetBounds() VTK_SIZEHINT(6) override { return nullptr; }
|
||||
|
||||
void GetActors(vtkPropCollection *) override {}
|
||||
|
||||
void GetVolumes(vtkPropCollection *) override {}
|
||||
|
||||
void ShallowCopy(vtkProp *prop) override {};
|
||||
|
||||
void ReleaseGraphicsResources(vtkWindow *) override;
|
||||
|
||||
/**
|
||||
* Method use to make this actor render in 2D scene;
|
||||
* @param viewport
|
||||
* @return render is success
|
||||
*/
|
||||
int RenderOverlay(vtkViewport *viewport) override;
|
||||
|
||||
int RenderOpaqueGeometry(vtkViewport *vtkNotUsed(viewport)) override { return 0; }
|
||||
|
||||
int RenderTranslucentPolygonalGeometry(vtkViewport *vtkNotUsed(viewport)) override { return 0; }
|
||||
|
||||
int RenderVolumetricGeometry(vtkViewport *vtkNotUsed(viewport)) override { return 0; }
|
||||
|
||||
vtkTypeBool HasTranslucentPolygonalGeometry() override { return 0; }
|
||||
|
||||
void SetLinePoint(double* p1, double* p2){
|
||||
linePoints->SetNumberOfPoints(2);
|
||||
linePoints->SetPoint(0, p1);
|
||||
linePoints->SetPoint(2, p2);
|
||||
}
|
||||
|
||||
protected:
|
||||
ReferenceLineLegendActor();
|
||||
~ReferenceLineLegendActor() override;
|
||||
vtkNew<vtkPoints> linePoints;
|
||||
vtkNew<vtkPolyData> renderData;
|
||||
vtkActor2D * actor2D;
|
||||
|
||||
private:
|
||||
ReferenceLineLegendActor(const ReferenceLineLegendActor &) = delete;
|
||||
void operator=(const ReferenceLineLegendActor &) = delete;
|
||||
};
|
||||
|
||||
|
||||
#endif //OMEGAV_REFERENCELINELEGENDACTOR_H
|
||||
Reference in New Issue
Block a user