Add ReferenceLineLegendActor(not used yet)

This commit is contained in:
Krad
2022-04-19 16:09:29 +08:00
parent d3dce236eb
commit 3532095e39
2 changed files with 134 additions and 0 deletions

View 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;
}

View 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