[vtkusers] [Fwd: Re: Using OpenGl with VTK]

Amy Squillacote ahs at cfdrc.com
Tue Aug 19 09:33:05 EDT 2008


Hi Amine,

You cannot use VTK_RENDERING_EXPORT since you are not adding your class 
to the vtkRendering library. You'll need to create your own export 
macro. There is an example of setting up your own additional library for 
VTK in the VTK/Examples/Build/vtkLocal directory of the VTK source tree.

- Amy

Mohammed Amine SAHTARI wrote:
>
> I use vtkStandardNewMacro to add New macro. The problem is that I got 
> 5 link errors even if I include the librairies of VTK (In VS 8).
>
> Hereby, you find my derived class (.h & .cxx).
>
> ---------------- vtkMyDerivedProp.h -------------------------
>
> #ifndef __vtkMyDerivedProp_h
> #define __vtkMyDerivedProp_h
> #include "vtkProp.h"
>
> class VTK_RENDERING_EXPORT vtkMyDerivedProp : public vtkProp
> {
> public:
>
>   vtkTypeRevisionMacro(vtkMyDerivedProp,vtkProp);
>   void PrintSelf(ostream& os, vtkIndent indent);
>   static vtkMyDerivedProp* New();
>
> protected:
>
>   vtkMyDerivedProp();
>   ~vtkMyDerivedProp();
>
> private:
>
>   vtkMyDerivedProp(const vtkMyDerivedProp&);  // Not implemented.  
>   void operator=(const vtkMyDerivedProp&);  // Not implemented.
>
> };
>
> #endif
>
> ---------------- vtkMyDerivedProp.cxx -------------------------
>
> #include "vtkMyDerivedProp.h"
>
> #include "vtkObjectFactory.h"
>
> vtkCxxRevisionMacro(vtkMyDerivedProp, "$Revision: 1.36 $");
>
> vtkStandardNewMacro(vtkMyDerivedProp);
>
> vtkMyDerivedProp::vtkMyDerivedProp(){}
>
> vtkMyDerivedProp::~vtkMyDerivedProp(){}
>
> void vtkMyDerivedProp::PrintSelf(ostream& os, vtkIndent indent)
> {
>  this->Superclass::PrintSelf(os,indent);
> }
>
> -------------------------------------- Errors 
> ------------------------------------------
>
> *I got 5 errors *
>
> 1>vtkMyDerivedProp.obj : error LNK2001: unresolved external symbol 
> "private: virtual char const * __thiscall 
> vtkMyDerivedProp::GetClassNameInternal(void)const " 
> (?GetClassNameInternal at vtkMyDerivedProp@@EBEPBDXZ)
>
> 1>vtkMyDerivedProp.obj : error LNK2001: unresolved external symbol 
> "public: virtual int __thiscall vtkMyDerivedProp::IsA(char const *)" 
> (?IsA at vtkMyDerivedProp@@UAEHPBD at Z)
>
> 1>vtkMyDerivedProp.obj : error LNK2001: unresolved external symbol 
> "protected: virtual class vtkObjectBase * __thiscall 
> vtkMyDerivedProp::NewInstanceInternal(void)const " 
> (?NewInstanceInternal at vtkMyDerivedProp@@MBEPAVvtkObjectBase@@XZ)
>
> 1>vtkMyDerivedProp.obj : error LNK2019: unresolved external symbol 
> "__declspec(dllimport) const vtkMyDerivedProp::`vftable'" 
> (__imp_??_7vtkMyDerivedProp@@6B@) referenced in function "protected: 
> __thiscall vtkMyDerivedProp::vtkMyDerivedProp(void)" 
> (??0vtkMyDerivedProp@@IAE at XZ)
>
> 1>C:\Documents and Settings\asahtari\Mes 
> documents\Projet\Bibillothéques\VTK\MyTest\MyLib.dll : fatal error 
> LNK1120: 4 unresolved externals
>
> When I put vtkMyDerivedProp instead of vtkProp3D, it compiles without 
> any error.
> I don't understand .Is it a matter of VTK librairies ? Please Help!
>
> Amine
>
> 2008/8/14 Utkarsh Ayachit <utkarsh.ayachit at kitware.com 
> <mailto:utkarsh.ayachit at kitware.com>>
>
>     Please keep the questions to the mailing list, so that others can
>     benefit/contribute as well.
>
>     To add New():
>     * take a look at any concrete class in VTK eg. vtkCollection (the
>     New is
>      declared in the header and defined using
>     vtkStandardNewMacro(vtkCollection); in the cxx.
>
>     * not using the viewport in the RenderOpaqueGeometry should not be a
>     problem. It's only provided if needed.
>
>     Utkarsh
>
>
>
>
>     Mohammed Amine SAHTARI wrote:
>
>         Thank you very much Utkarsh.
>
>         I am tring to implement your solution but I have some problems.
>
>         1) I create vtkMyDerivedProp.h and vtkMyDerivedProp.cxx
>
>          I subclass vtkProp :
>               - I copy the class code of vtkProp3D (.h and .c files)
>               - I replace all the words :
>                       vtkProp3D /by/ /vtkMyDerivedProp /and Prop3D by
>         /MyDerivedProp/
>               - I include /"vtkGl.h"/ in vtkMyDerivedProp.h
>               - I add RenderOpaqueGeometry() in vtkMyDerivedProp.h
>         like this :
>                       /virtual int RenderOpaqueGeometry(vtkViewPort* )
>                       {/
>
>         /             glBegin (GL_LINES);
>
>                     glVertex2f (-2.5, 2.5);
>
>                     glVertex2f (2.5, -2.5);
>
>
>                     glEnd ();/
>
>         /               }/
>
>         2) In my program :  
>          - I include and instantiate vtkMyDerivedProp :
>
>            /  //# include "vtkMyDerivedProp.h"
>              vtkMyDerivedProp *MyDerivedProp;/
>
>         -         I use  vtkMyDerivedProp :
>
>         /     vtkRenderer  *renderer = vtkRenderer  ::New();/
>
>         /      vtkMyDerivedProp-> RenderOpaqueGeometry(renderer);/
>
>         /      renderer->AddProp(vtkMyDerivedProp);/
>
>
>         *Problem *: vtkMyDerivedProp is used without been defined!
>
>         *Question 1 :* How can I define it ?  
>         (vtkMyDerivedProp::New()  doesn't work)
>
>         *Question 2 :*  RenderOpaqueGeometry has vtkViewPort* in input
>         but doesn't use it. Is it a problem ?
>
>         How can I fix this?
>
>         Looking forward to hear from you soon,
>
>         Amine**
>
>
>
>
>          
>
>         2008/8/14 Utkarsh Ayachit <utkarsh.ayachit at kitware.com
>         <mailto:utkarsh.ayachit at kitware.com>
>         <mailto:utkarsh.ayachit at kitware.com
>         <mailto:utkarsh.ayachit at kitware.com>>>
>
>            iren->Start() results in repeated calls to renWin->Render() on
>            interaction. This will clear whatever you had drawn. A better
>            approach is to subclass vtkProp(or one of it's subclasses)
>         and put
>            your rendering code in RenderOpaqueGeometry() /
>            RenderTranslucentPolygonalGeometry()/ RenderOverlay() etc.
>         depending
>            upon what pass you want it to be rendered and then add the
>         prop to
>            the renderer. That way every time the renderer re-renders,
>         your code
>            will be executed.
>
>
>            Utkarsh
>
>            Mohammed Amine SAHTARI wrote:
>
>
>                I want to add an OpenGl code in an application of VTK.
>
>                For this purpose, I try to draw lines using commands
>         OpenGL.:
>
>                *1) I add this on the top of the program :*
>
>                #include <GL/gl.h>
>                *2) I place my OpenGL commands after renWin->Render()
>         but before
>                iren->Start()** :  *
>
>
>                renWin->Render();
>
>                   glBegin (GL_LINES);
>                      glVertex2f (-2.5, 2.5);
>                      glVertex2f (2.5, -2.5);
>                    glEnd ();
>
>                iren->Start();
>
>
>                *But it doesn't appears.*
>
>                did I miss something ? How can I do this work ?
>                Looking forward to hear from you soon,
>
>                Amine
>
>
>
>              
>          ------------------------------------------------------------------------
>
>                _______________________________________________
>                This is the private VTK discussion list.
>                Please keep messages on-topic. Check the FAQ at:
>                http://www.vtk.org/Wiki/VTK_FAQ
>                Follow this link to subscribe/unsubscribe:
>                http://www.vtk.org/mailman/listinfo/vtkusers
>
>
>
>     _______________________________________________
>     This is the private VTK discussion list.
>     Please keep messages on-topic. Check the FAQ at:
>     http://www.vtk.org/Wiki/VTK_FAQ
>     Follow this link to subscribe/unsubscribe:
>     http://www.vtk.org/mailman/listinfo/vtkusers
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> This is the private VTK discussion list.
> Please keep messages on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
>   

-- 
Amy Squillacote                    Phone: (256) 726-4839
Computer Scientist                 Fax: (256) 726-4806
CFD Research Corporation           Web: http://www.cfdrc.com
215 Wynn Drive, Suite 501
Huntsville, AL  35805





More information about the vtkusers mailing list