查找基础/超级成员

时间:2016-11-25 23:54:29

标签: c++ inheritance vtk superclass

好的,我正在学习C ++中的基类/超类/继承/和虚函数。

以下是在头文件中设置的Get / Set函数,我正在查看mutator SetSize(int,int);

class VTKCOMMONCORE_EXPORT vtkWindow : public vtkObject
{
public:
  vtkTypeMacro(vtkWindow,vtkObject);
  void PrintSelf(ostream& os, vtkIndent indent);
.
.
.

      // Description:
      // Set/Get the size of the window in screen coordinates in pixels.
      virtual int *GetSize();
      virtual void SetSize(int,int);
      virtual void SetSize(int a[2]);

根据我对继承和虚函数的理解,这只是设置函数,并且需要在其他地方定义,无论是在此标题中还是其他内容。我正在努力的是找到定义SetSize的位置,我在main中提供它的值,但是Size在哪里设置为变量,然后该变量在哪里进入定义实际窗口大小的更大过程。显然我没有给你所有的信息来告诉我它究竟在哪里,但是我不知道如何弄清楚它是如何通过在我的main中调用它来设置渲染器中的实际窗口大小。

我希望所有这些都有道理并且我使用了正确的术语,我将不胜感激任何帮助或进一步的阅读建议,因为我不确定还有什么可以搜索找到这个答案。

以下是整个头文件供参考

    /*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkWindow.h

  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
  All rights reserved.
  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notice for more information.

=========================================================================*/
// .NAME vtkWindow - window superclass for vtkRenderWindow
// .SECTION Description
// vtkWindow is an abstract object to specify the behavior of a
// rendering window.  It contains vtkViewports.

// .SECTION see also
// vtkRenderWindow vtkViewport

#ifndef vtkWindow_h
#define vtkWindow_h

#include "vtkCommonCoreModule.h" // For export macro
#include "vtkObject.h"

class vtkUnsignedCharArray;

class VTKCOMMONCORE_EXPORT vtkWindow : public vtkObject
{
public:
  vtkTypeMacro(vtkWindow,vtkObject);
  void PrintSelf(ostream& os, vtkIndent indent);

  // Description:
  // These are window system independent methods that are used
  // to help interface vtkWindow to native windowing systems.
  virtual void SetDisplayId(void *) = 0;
  virtual void SetWindowId(void *)  = 0;
  virtual void SetParentId(void *)  = 0;
  virtual void *GetGenericDisplayId() = 0;
  virtual void *GetGenericWindowId()  = 0;
  virtual void *GetGenericParentId()  = 0;
  virtual void *GetGenericContext()   = 0;
  virtual void *GetGenericDrawable()  = 0;
  virtual void SetWindowInfo(char *) = 0;
  virtual void SetParentInfo(char *) = 0;

  // Description:
  // Set/Get the position in screen coordinates of the rendering window.
  virtual int *GetPosition();
  virtual void SetPosition(int,int);
  virtual void SetPosition(int a[2]);

  // Description:
  // Set/Get the size of the window in screen coordinates in pixels.
  virtual int *GetSize();
  virtual void SetSize(int,int);
  virtual void SetSize(int a[2]);

  // Description:
  // GetSize() returns the size * this->TileScale, whereas this method returns
  // the size without multiplying with the tile scale.
  int *GetActualSize();

  // Description:
  // Get the current size of the screen in pixels.
  virtual int     *GetScreenSize() = 0;

  // Description:
  // Keep track of whether the rendering window has been mapped to screen.
  vtkSetMacro(Mapped,int);
  vtkGetMacro(Mapped,int);
  vtkBooleanMacro(Mapped,int);

  // Description:
  // Turn on/off erasing the screen between images. This allows multiple
  // exposure sequences if turned on. You will need to turn double
  // buffering off or make use of the SwapBuffers methods to prevent
  // you from swapping buffers between exposures.
  vtkSetMacro(Erase,int);
  vtkGetMacro(Erase,int);
  vtkBooleanMacro(Erase,int);

  // Description:
  // Keep track of whether double buffering is on or off
  vtkSetMacro(DoubleBuffer,int);
  vtkGetMacro(DoubleBuffer,int);
  vtkBooleanMacro(DoubleBuffer,int);

  // Description:
  // Get name of rendering window
  vtkGetStringMacro(WindowName);
  vtkSetStringMacro(WindowName);

  // Description:
  // Ask each viewport owned by this Window to render its image and
  // synchronize this process.
  virtual void Render() = 0;

  // Description:
  // Get the pixel data of an image, transmitted as RGBRGBRGB. The
  // front argument indicates if the front buffer should be used or the back
  // buffer. It is the caller's responsibility to delete the resulting
  // array. It is very important to realize that the memory in this array
  // is organized from the bottom of the window to the top. The origin
  // of the screen is in the lower left corner. The y axis increases as
  // you go up the screen. So the storage of pixels is from left to right
  // and from bottom to top.
  // (x,y) is any corner of the rectangle. (x2,y2) is its opposite corner on
  // the diagonal.
  virtual unsigned char *GetPixelData(int x, int y, int x2, int y2,
                                      int front) = 0;
  virtual int GetPixelData(int x, int y, int x2, int y2, int front,
                           vtkUnsignedCharArray *data) = 0;

  // Description:
  // Return a best estimate to the dots per inch of the display
  // device being rendered (or printed).
  vtkGetMacro(DPI,int);
  vtkSetClampMacro(DPI,int,1,VTK_INT_MAX);

  // Description:
  // Attempt to detect and set the DPI of the display device by querying the
  // system. Note that this is not supported on all backends, and this method
  // will return false if the DPI could not be detected. Use GetDPI() to
  // inspect the detected value.
  virtual bool DetectDPI() { return false; }

  // Description:
  // Create a window in memory instead of on the screen. This may not be
  // supported for every type of window and on some windows you may need to
  // invoke this prior to the first render.
  vtkSetMacro(OffScreenRendering,int);
  vtkGetMacro(OffScreenRendering,int);
  vtkBooleanMacro(OffScreenRendering,int);

  // Description:
  // Make the window current. May be overridden in subclasses to do
  // for example a glXMakeCurrent or a wglMakeCurrent.
  virtual void MakeCurrent() {}

  // Description:
  // These methods are used by vtkWindowToImageFilter to tell a VTK window
  // to simulate a larger window by tiling. For 3D geometry these methods
  // have no impact. It is just in handling annotation that this information
  // must be available to the mappers and the coordinate calculations.
  vtkSetVector2Macro(TileScale,int);
  vtkGetVector2Macro(TileScale,int);
  void SetTileScale(int s) {this->SetTileScale(s,s);}
  vtkSetVector4Macro(TileViewport,double);
  vtkGetVector4Macro(TileViewport,double);

protected:
  int OffScreenRendering;
  vtkWindow();
  ~vtkWindow();

  char *WindowName;
  int Size[2];
  int Position[2];
  int Mapped;
  int Erase;
  int DoubleBuffer;
  int DPI;

  double TileViewport[4];
  int    TileSize[2];
  int    TileScale[2];

private:
  vtkWindow(const vtkWindow&);  // Not implemented.
  void operator=(const vtkWindow&);  // Not implemented.
};

#endif

1 个答案:

答案 0 :(得分:0)

好的,我找到了问题的答案

在VTK中,所有头文件header.h都有一个相应的文件header.cxx。函数定义发生在header.cxx文件中。