# Failed to inherit vtkRenderer

**URL:** https://discourse.vtk.org/t/failed-to-inherit-vtkrenderer/9481
**Category:** Support
**Created:** [September 28, 2022, 6:05am UTC](https://discourse.vtk.org/t/failed-to-inherit-vtkrenderer/9481 "2022-09-28T06:05:50Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![zhang-qiang-github](https://discourse.vtk.org/user_avatar/discourse.vtk.org/zhang-qiang-github/32/2519_2.png) [@zhang-qiang-github](https://discourse.vtk.org/u/zhang-qiang-github)
#### Post date: [September 28, 2022, 6:05am UTC](https://discourse.vtk.org/t/failed-to-inherit-vtkrenderer/9481/1 "2022-09-28T06:05:50Z")

</div>

I want to write a class which inherit from `vtkRenderer`.

My code is:

```auto
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkRenderingFreeType);

#include <vtkSmartPointer.h>
#include <vtkCamera.h>
#include <vtkProperty.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkCubeSource.h>
#include <vtkPolyDataMapper.h>
#include <vtkCellData.h>
#include <vtkPropAssembly.h>

class MyRenderer : public vtkRenderer
{
public:
	static MyRenderer* New();
	vtkTypeMacro(MyRenderer, vtkRenderer);

protected:

};

vtkStandardNewMacro(MyRenderer);

int main(int, char* [])
{
	vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New();
	cube->Update();
	vtkSmartPointer<vtkPolyDataMapper> cubeMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
	cubeMapper->SetInputData(cube->GetOutput());
	vtkSmartPointer<vtkActor> cubeActor = vtkSmartPointer<vtkActor>::New();
	cubeActor->SetMapper(cubeMapper);

//======================== experiment code =============================
	vtkSmartPointer<MyRenderer> render = vtkSmartPointer<MyRenderer>::New();
	//vtkSmartPointer<vtkRenderer> render = vtkSmartPointer<vtkRenderer>::New();
//======================== experiment code =============================
	render->AddActor(cubeActor);

	vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
	renWin->AddRenderer(render);
    renWin->Render();

	vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
	iren->SetRenderWindow(renWin);
	iren->Initialize();
	iren->Start();

	return EXIT_SUCCESS;
}

```

`MyRenderer` just inherit from `vtkRenderer` and do nothing.

After run the above code, the window do not display anything.

However, if I replace `MyRenderer` with `vtkRenderer`, the window would display a cube.

I am confuzed about `MyRenderer`, because it is almost equal to `vtkRenderer`.

On the other hand, I write a python code as following:

```auto
import vtkmodules.all as vtk

class MyRenderer(vtk.vtkRenderer):

    def __init__ (self):
        pass

cube = vtk.vtkCubeSource()
cube.Update()
cubeMapper = vtk.vtkPolyDataMapper()
cubeMapper.SetInputData(cube.GetOutput())
cubeActor = vtk.vtkActor()
cubeActor.SetMapper(cubeMapper)

# render = vtk.vtkRenderer()
render = MyRenderer()
render.AddActor(cubeActor)
renWin = vtk.vtkRenderWindow()
renWin.AddRenderer(render)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)
iren.Initialize()
iren.Start()

```

And `MyRenderer` works.

How can I implement a class to inherit from vtkRenderer in C++? Any suggestion is appreciated~~~

---

<div class="post-metadata">

### Author: ![dgobbi](https://discourse.vtk.org/user_avatar/discourse.vtk.org/dgobbi/32/18_2.png) [@dgobbi](https://discourse.vtk.org/u/dgobbi)
#### Post date: [September 28, 2022, 3:08pm UTC](https://discourse.vtk.org/t/failed-to-inherit-vtkrenderer/9481/2 "2022-09-28T15:08:36Z")

</div>

This is because `vtkRenderer` is a factory class, so `vtkRenderer::New()` actually creates a `vtkOpenGLRenderer` object. But when you inherit only `vtkRenderer`, your `MyRenderer` class has no OpenGL code and does not render anything.

The solution is to derive your class from `vtkOpenGLRenderer`. Then it will be able to render.

It works in Python because the constructor `MyRenderer()` performs a call to `vtkRenderer. __new__ ()`, which calls `vtkRenderer::New()`, which creates a `vtkOpenGLRenderer`.

---

<div class="post-metadata">

### Author: ![zhang-qiang-github](https://discourse.vtk.org/user_avatar/discourse.vtk.org/zhang-qiang-github/32/2519_2.png) [@zhang-qiang-github](https://discourse.vtk.org/u/zhang-qiang-github)
#### Post date: [September 29, 2022, 7:22am UTC](https://discourse.vtk.org/t/failed-to-inherit-vtkrenderer/9481/3 "2022-09-29T07:22:09Z")

</div>

Thank you for your detail reply~~~
