How to use interrogate, pygencode etc?

Created a new library libfractalsplinepanda.dll, that links to both libfractalspline.dll (implementation) and libpanda.dll (for Panda specific bits), and basically wraps fractalspline to work in Panda.

This works great with pview.

Now, the question is how to get it running with Python.

We’re using Panda 1.0.3 throughout here.

What I’m trying is:

interrogate:


\panda3d-1.0.3\bin\interrogate -oc fractalSplineNode_pandawrap.cxx -od fractalSplineNode.in -DCPPPARSER -D__STDC__=1 -D__cplusplus -longlong __int64 -D_X86_ -DWIN32_VC -D_WIN32 -D"_declspec(param)=" -D_near -D_far -D__near -D__far -D__stdcall -DFORCE_INLINING -DCPPPARSER -D__STDC__=1 -D__cplusplus -D__i386__ -D__const=const  -module fractalsplinepanda -library libfractalsplinepanda -fnames -string -refcount -assert -python -S\panda3d-1.0.3\include\parser-inc -DBUILDING_PYTHONINTERFACES -I"f:\program files\microsoft sdk\include" -I"f:\program files\microsoft visual c++ toolkit 2003\include" -I\Panda3D-1.0.3\include -If:\dev\pandacvspymake\thirdparty\win-python\include -If:\dev\FSDev fractalSplineNode.h fractalSplineBoxNode.h fractalSplineCylinderNode.h fractalSplinePrismNode.h fractalSplineRingNode.h fractalSplineTorusNode.h fractalSplineTubeNode.h fractalSplineNode.cxx fractalSplineBoxNode.cxx fractalSplineCylinderNode.cxx fractalSplinePrismNode.cxx fractalSplineRingNode.cxx fractalSplineTorusNode.cxx fractalSplineTubeNode.cxx

Basically, this contains:

  • defines from makepanda.py
  • all the header files, for the PandaNodes that wrap FractalSpline
  • all the source files, for the PandaNodes that wrap FractalSpline
  • -oc fractalSplineNode_pandawrap.cxx
  • -od fractalSplineNode.in

So, this generates a file fractalSplineNode_pandawrap.cxx

Next, running interrogate_module:


interrogate_module -oc fractalSplineNode_pandawrap_module.cxx  -module fractalsplinepanda -library libfractalsplinepanda -python fractalSplineNode.in

This is taking the .in file generated before, and generates a file fractalSplineNode_pandawrap_module.cxx

Then, we compile the two generated .cxx files and create a new dll libfractalsplinepandawrap.dll:


link /DLL /OUT:libfractalsplinepandawrap.dll fractalSplineNode_pandawrap.$(OBJPOSTFIX) fractalSplineNode_pandawrap_module.$(OBJPOSTFIX) libfractalsplinepanda.lib

So far so good. This runs without error messages, which is a good sign.

So, the questions are:

  • is this what I should be doing? and
  • how do I run pygencode?

F:\dev\FSPandaWrappers>genpycode -r libfractalsplinepandawrap.dll
:05-17-2005 13:10:36 FFI(warning): Importing code library: libfractalsplinepanda
wrap.dll
Traceback (most recent call last):
  File "<string>", line 1, in ?
  File "f:\Panda3D-1.0.3\direct\src\ffi\jGenPyCode.py", line 87, in ?
    DoGenPyCode.run()
  File "f:\Panda3D-1.0.3\direct\src\ffi\DoGenPyCode.py", line 196, in run
    db.generateCode(outputDir, extensionsDir)
  File "f:\Panda3D-1.0.3\direct\src\ffi\FFIInterrogateDatabase.py", line 723, in
 generateCode
    self.generateCodeLib(codeDir, extensionsDir, CModuleName)
  File "f:\Panda3D-1.0.3\direct\src\ffi\FFIInterrogateDatabase.py", line 778, in
 generateCodeLib
    exec('import ' + CModuleName)
  File "<string>", line 1, in ?
ImportError: dynamic module does not define init function (initlibfractalsplinep
andawrap)

Hugh

This all looks right, except the module name you pass to interrogate_module must match the name of the dll you are generating, e.g. libfractalsplinepandawrap.

For the record, all of these commands can be generated automatically without too much trouble using ppremake, in the same way that the direct tree is generated now. But there’s no problem with building your own custom scripts to do it instead (though this may be a little less portable for the long term). For the very long term, we will need to find a way to extend the makepanda system to work with add-on projects like this.

David

Ok, that does work better: pygencode runs without errors now:


F:\dev\FSPandaWrappers>\Panda3D-1.0.3\bin\genpycode -e f:\dev\fspandawrappers -r libfractalsplinepandawrap

Soooo… the next question is: how do I access my new objects!

I scoured my hard drive for fractalspline.py, but didnt find anything; and the only thing in fractalSplineNode_pandawrap.cxx is functions like “_inPMGAo5m4D”). fractalSplineNode_pandawrap_module.cxx contains the following ominous looking declaration:


static PyMethodDef python_methods[1] = {
  { NULL, NULL }
};

Hugh

Ah, oops. I bet you will have to re-run the first interrogate command with the same -module parameter (and then re-run interrogate-module). The purpose of interrogate-module is to generate the module table, listing all of the methods that are compiled into the current module; and it determines this by matching up the module names.

David

Yes, that works better. Of course, I’m still seeing insane looking function names like “_inPqe8jC7dD”. I’m guessing these arent the ones I will need to use in the Python code?

How can I find out what my classnames and method names are from within Python?


>>> import libfractalsplinepandawrap
>>> a = libfractalsplinepandawrap.FractalSplineNode("blah")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
AttributeError: 'module' object has no attribute 'FractalSplineNode'
>>>

Hugh

Right; the hash-generated function name is not intended to be called directly; genPyCode will create a Python class that will call it for you, when you call the Python method with the same name as your C++ method.

If you run genPyCode with -s, you can examine the generated code files it puts in the pandac directory. In general, your class names and method names will be converted directly from C++, allowing for the renaming convention (an underscore is removed, and the next letter is capitalized).

Also, everything gets dumped into the pandac namespace:

>>> from pandac.PandaModules import *
>>> a = FractalSplineNode("blah")

David

Hmmm, nothing fractalspline like in pandac, even with the -s option :confused:

How can I diagnose this further?

Hugh

OK, here’s the chain:

  • interrogate generates libfractalspline.in
  • interrogate_module reads libfractalspline.in
  • genpycode also reads libfractalspline.in
  • genpycode generates libfractalspline.py or something like that.

We need to figure out where the chain got broken. See if you can find the relevant “.in” files.

  • Josh

Ok, lets see:

  • libfractalsplinepandawrap.in -> not check :astonished:

Ok, modified the interrogate command to generate libfractalsplinepandawrap.in, and rerun pygencode.

So, now we have libfractalsplinepandawrapModules.py in pandac.

On the other hand, it looks like its empty:


# This file is automatically generated. It would be unwise to edit.

# CMODULE [libfractalsplinepandawrap]
# Import the interrogate module
import libdtoolconfig

# Import the C module
import libfractalsplinepandawrap
# Import enums into the global name space

# Import downcast functions
from libfractalsplinepandawrapDowncasts import *

# Import classes

# Import the global module file into our name space
from libfractalsplinepandawrapGlobals import *

# Generate the classes

# Copy the classes into our own namespace

# Put the classes in the wrapper class map
from direct.ffi.FFIExternalObject import registerInTypeMap


>>> from pandac.PandaModules import *
>>> a = FractalSplineBoxNode("blah")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
NameError: name 'FractalSplineBoxNode' is not defined
>>>

My current interrogate commands are:
interrogate:


interrogate -oc fractalSplineNode_pandawrap.cxx -od libfractalsplinepandawrap.in -DCPPPARSER \
	   -D__STDC__=1 -D__cplusplus -longlong __int64 -D_X86_ -DWIN32_VC -D_WIN32 \
	   -D"_declspec(param)=" -D_near -D_far -D__near -D__far -D__stdcall -DFORCE_INLINING \
	   -DCPPPARSER -D__STDC__=1 -D__cplusplus -D__i386__ -D__const=const  -module libfractalsplinepandawrap \
	   -library libfractalsplinepandawrap -fnames -string -refcount -assert -python \
	   -S\panda3d-1.0.3\include\parser-inc -DBUILDING_PYTHONINTERFACES \
	   -I"f:\program files\microsoft sdk\include" \
	   -I"f:\program files\microsoft visual c++ toolkit 2003
\include" \
	   -I\Panda3D-1.0.3\include -If:\dev\pandacvspymake\thirdparty\win-python\include \
	   -If:\dev\FSDev fractalSplineNode.h fractalSplineBoxNode.h fractalSplineCylinderNode.h \
	   fractalSplinePrismNode.h fractalSplineRingNode.h fractalSplineTorusNode.h \
	   fractalSplineTubeNode.h fractalSplineNode.cxx fractalSplineBoxNode.cxx \
	   fractalSplineCylinderNode.cxx fractalSplinePrismNode.cxx fractalSplineRingNode.cxx \
	   fractalSplineTorusNode.cxx fractalSplineTubeNode.cxx

interrogate module:


interrogate_module -oc fractalSplineNode_pandawrap_module.cxx  -module libfractalsplinepandawrap -library libfractalsplinepandawrap -python libfractalsplinepandawrap.in

The genpycode command I’m using for testing is:


genpycode -s -e f:\dev\fspandawrappers -r libfractalsplinepandawrap

What should I check next? (I guess its another issue with naming probably?)

Hugh

If the “.py” file for libfractalspline is empty, I’d check the “.in” file for libfractalspline to see if that’s empty too. If so, then somehow, interrogate isn’t picking up the necessary export declarations.

I have a theory, which is totally not based in any sort of actual knowledge. Maybe the keyword “PUBLISHED” is actually a macro, and you have to #include the macro definition, or interrogate doesn’t see it. Does your libfractalspline header file include all the same things that panda header files usually #include?

  • Josh

The keyword PUBLISHED is indeed a macro, and it is defined in dtoolbase.h, which is included from pandabase.h. It is true that it is important to include one of these from your codebase. (But if you don’t, it won’t compile anyway, since PUBLISHED isn’t known to the compiler. So presumably you are including this properly.)

You might check whether the .in file defines the symbols you think it should:

test_interrogate libfractalsplinepandawrap.in

When you ran genPyCode, did it report any errors, for instance with not being able to find the .in file, or with a mismatch between the .in file and the DLL?

David

test_interrogate libfractalsplinepandawrap.in gives the following:


0 manifests:

0 globals:

10 global types:
  Type BitMask32 (BitMask< unsigned long int, 32 >) (166)
    fully defined
    is class type
    1 constructors:
      Function BitMask< unsigned long int, 32 >::BitMask (86)
        In C: inline ::BitMask< unsigned long int, 32 >::BitMask(void);
        Method of BitMask32 (166)
        3 Python-style wrappers:
          Wrapper (1) returns BitMask< unsigned long int, 32 > * (176), no parameters.
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jTPkW (callable)
            Unique name is pqe8jTPkW (no reverse lookup)
          Wrapper (2) returns BitMask< unsigned long int, 32 > * (176), 1 parameter:
              0: BitMask< unsigned long int, 32 > const * (177) 'copy'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jWYCg (callable)
            Unique name is pqe8jWYCg (no reverse lookup)
          Wrapper (3) returns BitMask< unsigned long int, 32 > * (176), 1 parameter:
              0: unsigned long int (179) 'init_value'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jVEq5 (callable)
            Unique name is pqe8jVEq5 (no reverse lookup)
    destructor:
      Function BitMask< unsigned long int, 32 >::~BitMask (93)
        In C: inline ::BitMask< unsigned long int, 32 >::~BitMask(void);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (4) no return value, 1 parameter:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
            Wrapper name: _inPqe8j7umd (callable)
            Unique name is pqe8j7umd (no reverse lookup)
    38 methods:
      Function BitMask< unsigned long int, 32 >::operator = (87)
        In C: inline void ::BitMask< unsigned long int, 32 >::operator =(BitMask< unsigned long int, 32 > const &copy);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (5) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'copy'
            Wrapper name: _inPqe8jGa6b (callable)
            Unique name is pqe8jGa6b (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::all_on (88)
        In C: static inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::all_on(void);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (6) returns BitMask< unsigned long int, 32 > * (176), no parameters.
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8joN5O (callable)
            Unique name is pqe8joN5O (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::all_off (89)
        In C: static inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::all_off(void);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (7) returns BitMask< unsigned long int, 32 > * (176), no parameters.
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jLnqL (callable)
            Unique name is pqe8jLnqL (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::lower_on (90)
        In C: static inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::lower_on(int on_bits);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (8) returns BitMask< unsigned long int, 32 > * (176), 1 parameter:
              0: int (181) 'on_bits'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jvC9k (callable)
            Unique name is pqe8jvC9k (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::bit (91)
        In C: static inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::bit(int index);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (9) returns BitMask< unsigned long int, 32 > * (176), 1 parameter:
              0: int (181) 'index'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jQD4A (callable)
            Unique name is pqe8jQD4A (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::range (92)
        In C: static inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::range(int low_bit, int size);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (10) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              0: int (181) 'low_bit'
              1: int (181) 'size'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jzwm_ (callable)
            Unique name is pqe8jzwm_ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::get_num_bits (94)
        In C: inline int ::BitMask< unsigned long int, 32 >::get_num_bits(void) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (11) returns int (181), 1 parameter:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
            Wrapper name: _inPqe8jC7dD (callable)
            Unique name is pqe8jC7dD (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::get_bit (95)
        In C: inline bool ::BitMask< unsigned long int, 32 >::get_bit(int index) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (12) returns bool (182), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: int (181) 'index'
            Wrapper name: _inPqe8jv5vi (callable)
            Unique name is pqe8jv5vi (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::set_bit (96)
        In C: inline void ::BitMask< unsigned long int, 32 >::set_bit(int index);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (13) no return value, 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: int (181) 'index'
            Wrapper name: _inPqe8jGDr_ (callable)
            Unique name is pqe8jGDr_ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::clear_bit (97)
        In C: inline void ::BitMask< unsigned long int, 32 >::clear_bit(int index);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (14) no return value, 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: int (181) 'index'
            Wrapper name: _inPqe8j1JjI (callable)
            Unique name is pqe8j1JjI (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::set_bit_to (98)
        In C: inline void ::BitMask< unsigned long int, 32 >::set_bit_to(int index, bool value);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (15) no return value, 3 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: int (181) 'index'
              2: bool (182) 'value'
            Wrapper name: _inPqe8jU2qQ (callable)
            Unique name is pqe8jU2qQ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::is_zero (99)
        In C: inline bool ::BitMask< unsigned long int, 32 >::is_zero(void) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (16) returns bool (182), 1 parameter:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
            Wrapper name: _inPqe8jEmKJ (callable)
            Unique name is pqe8jEmKJ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::extract (100)
        In C: inline unsigned long int ::BitMask< unsigned long int, 32 >::extract(int low_bit, int size) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (17) returns unsigned long int (179), 3 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: int (181) 'low_bit'
              2: int (181) 'size'
            Wrapper name: _inPqe8jLfUb (callable)
            Unique name is pqe8jLfUb (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::store (101)
        In C: inline void ::BitMask< unsigned long int, 32 >::store(unsigned long int value, int low_bit, int size);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (18) no return value, 4 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: unsigned long int (179) 'value'
              2: int (181) 'low_bit'
              3: int (181) 'size'
            Wrapper name: _inPqe8j_V11 (callable)
            Unique name is pqe8j_V11 (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::get_word (102)
        In C: inline unsigned long int ::BitMask< unsigned long int, 32 >::get_word(void) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (19) returns unsigned long int (179), 1 parameter:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
            Wrapper name: _inPqe8j3r65 (callable)
            Unique name is pqe8j3r65 (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::set_word (103)
        In C: inline void ::BitMask< unsigned long int, 32 >::set_word(unsigned long int value);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (20) no return value, 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: unsigned long int (179) 'value'
            Wrapper name: _inPqe8jbcJe (callable)
            Unique name is pqe8jbcJe (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::invert_in_place (104)
        In C: inline void ::BitMask< unsigned long int, 32 >::invert_in_place(void);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (21) no return value, 1 parameter:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
            Wrapper name: _inPqe8j8MCN (callable)
            Unique name is pqe8j8MCN (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::clear (105)
        In C: inline void ::BitMask< unsigned long int, 32 >::clear(void);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (22) no return value, 1 parameter:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
            Wrapper name: _inPqe8j6nVZ (callable)
            Unique name is pqe8j6nVZ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::output (106)
        In C: void ::BitMask< unsigned long int, 32 >::output(ostream &out) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (23) no return value, 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: ostream * (183) 'out'
            Wrapper name: _inPqe8jbmsC (callable)
            Unique name is pqe8jbmsC (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::output_binary (107)
        In C: void ::BitMask< unsigned long int, 32 >::output_binary(ostream &out, int spaces_every = (4)) const;
        Method of BitMask32 (166)
        2 Python-style wrappers:
          Wrapper (24) no return value, 3 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: ostream * (183) 'out'
              2: int (181) 'spaces_every'
            Wrapper name: _inPqe8jKv4A (callable)
            Unique name is pqe8jKv4A (no reverse lookup)
          Wrapper (25) no return value, 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: ostream * (183) 'out'
            Wrapper name: _inPqe8jStFS (callable)
            Unique name is pqe8jStFS (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::output_hex (108)
        In C: void ::BitMask< unsigned long int, 32 >::output_hex(ostream &out, int spaces_every = (4)) const;
        Method of BitMask32 (166)
        2 Python-style wrappers:
          Wrapper (26) no return value, 3 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: ostream * (183) 'out'
              2: int (181) 'spaces_every'
            Wrapper name: _inPqe8j6eyU (callable)
            Unique name is pqe8j6eyU (no reverse lookup)
          Wrapper (27) no return value, 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: ostream * (183) 'out'
            Wrapper name: _inPqe8jSBFt (callable)
            Unique name is pqe8jSBFt (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::write (109)
        In C: void ::BitMask< unsigned long int, 32 >::write(ostream &out, int indent_level = (0)) const;
        Method of BitMask32 (166)
        2 Python-style wrappers:
          Wrapper (28) no return value, 3 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: ostream * (183) 'out'
              2: int (181) 'indent_level'
            Wrapper name: _inPqe8j_J_l (callable)
            Unique name is pqe8j_J_l (no reverse lookup)
          Wrapper (29) no return value, 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: ostream * (183) 'out'
            Wrapper name: _inPqe8jAgGS (callable)
            Unique name is pqe8jAgGS (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator == (110)
        In C: inline bool ::BitMask< unsigned long int, 32 >::operator ==(BitMask< unsigned long int, 32 > const &other) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (30) returns bool (182), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Wrapper name: _inPqe8j8n_q (callable)
            Unique name is pqe8j8n_q (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator != (111)
        In C: inline bool ::BitMask< unsigned long int, 32 >::operator !=(BitMask< unsigned long int, 32 > const &other) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (31) returns bool (182), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Wrapper name: _inPqe8jwHmZ (callable)
            Unique name is pqe8jwHmZ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator < (112)
        In C: inline bool ::BitMask< unsigned long int, 32 >::operator <(BitMask< unsigned long int, 32 > const &other) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (32) returns bool (182), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Wrapper name: _inPqe8jGQ7z (callable)
            Unique name is pqe8jGQ7z (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::compare_to (113)
        In C: inline int ::BitMask< unsigned long int, 32 >::compare_to(BitMask< unsigned long int, 32 > const &other) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (33) returns int (181), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Wrapper name: _inPqe8jSmzz (callable)
            Unique name is pqe8jSmzz (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator & (114)
        In C: inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::operator &(BitMask< unsigned long int, 32 > const &other) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (34) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jDAId (callable)
            Unique name is pqe8jDAId (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator | (115)
        In C: inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::operator |(BitMask< unsigned long int, 32 > const &other) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (35) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jQQzk (callable)
            Unique name is pqe8jQQzk (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator ^ (116)
        In C: inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::operator ^(BitMask< unsigned long int, 32 > const &other) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (36) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jLA5_ (callable)
            Unique name is pqe8jLA5_ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator ~ (117)
        In C: inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::operator ~(void) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (37) returns BitMask< unsigned long int, 32 > * (176), 1 parameter:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jE12A (callable)
            Unique name is pqe8jE12A (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator << (118)
        In C: inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::operator <<(int shift) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (38) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: int (181) 'shift'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jUz1Y (callable)
            Unique name is pqe8jUz1Y (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator >> (119)
        In C: inline BitMask< unsigned long int, 32 > ::BitMask< unsigned long int, 32 >::operator >>(int shift) const;
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (39) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > const * (177) 'this'
              1: int (181) 'shift'
            Caller manages return value using BitMask< unsigned long int, 32 >::~BitMask (93)
            Wrapper name: _inPqe8jeDOd (callable)
            Unique name is pqe8jeDOd (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator &= (120)
        In C: inline void ::BitMask< unsigned long int, 32 >::operator &=(BitMask< unsigned long int, 32 > const &other);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (40) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Wrapper name: _inPqe8jFdwQ (callable)
            Unique name is pqe8jFdwQ (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator |= (121)
        In C: inline void ::BitMask< unsigned long int, 32 >::operator |=(BitMask< unsigned long int, 32 > const &other);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (41) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Wrapper name: _inPqe8j6sdY (callable)
            Unique name is pqe8j6sdY (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator ^= (122)
        In C: inline void ::BitMask< unsigned long int, 32 >::operator ^=(BitMask< unsigned long int, 32 > const &other);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (42) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: BitMask< unsigned long int, 32 > const * (177) 'other'
            Wrapper name: _inPqe8j9cjz (callable)
            Unique name is pqe8j9cjz (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator <<= (123)
        In C: inline void ::BitMask< unsigned long int, 32 >::operator <<=(int shift);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (43) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: int (181) 'shift'
            Wrapper name: _inPqe8jwBO2 (callable)
            Unique name is pqe8jwBO2 (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::operator >>= (124)
        In C: inline void ::BitMask< unsigned long int, 32 >::operator >>=(int shift);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (44) returns BitMask< unsigned long int, 32 > * (176), 2 parameters:
              *: BitMask< unsigned long int, 32 > * (176) 'this'
              1: int (181) 'shift'
            Wrapper name: _inPqe8j6xn6 (callable)
            Unique name is pqe8j6xn6 (no reverse lookup)
      Function BitMask< unsigned long int, 32 >::get_class_type (125)
        In C: static TypeHandle ::BitMask< unsigned long int, 32 >::get_class_type(void);
        Method of BitMask32 (166)
        1 Python-style wrapper:
          Wrapper (45) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8j_o_7 (callable)
            Unique name is pqe8j_o_7 (no reverse lookup)
  Type FractalSplineNode (167)
    fully defined
    is class type
    1 constructors:
      Function FractalSplineNode::FractalSplineNode (128)
        In C: FractalSplineNode::FractalSplineNode(basic_string< char > const &name);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (46) returns FractalSplineNode * (188), 1 parameter:
              0: atomic string (187) 'name'
            Caller manages return value using FractalSplineNode::~FractalSplineNode (153)
            Wrapper name: _inPqe8j0D9w (callable)
            Unique name is pqe8j0D9w (no reverse lookup)
    destructor:
      Function FractalSplineNode::~FractalSplineNode (153)
        In C: FractalSplineNode::~FractalSplineNode(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (47) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j5wbd (callable)
            Unique name is pqe8j5wbd (no reverse lookup)
    24 methods:
      Function FractalSplineNode::set_twist (129)
        In C: virtual void FractalSplineNode::set_twist(int newtwist);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (48) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'newtwist'
            Wrapper name: _inPqe8jPBK_ (callable)
            Unique name is pqe8jPBK_ (no reverse lookup)
      Function FractalSplineNode::set_cut_start (130)
        In C: virtual void FractalSplineNode::set_cut_start(int newcutstart);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (49) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'newcutstart'
            Wrapper name: _inPqe8jSRnx (callable)
            Unique name is pqe8jSRnx (no reverse lookup)
      Function FractalSplineNode::set_cut_end (131)
        In C: virtual void FractalSplineNode::set_cut_end(int newcutend);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (50) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'newcutend'
            Wrapper name: _inPqe8jAfKV (callable)
            Unique name is pqe8jAfKV (no reverse lookup)
      Function FractalSplineNode::set_advanced_cut_start (132)
        In C: virtual void FractalSplineNode::set_advanced_cut_start(int newcutstart);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (51) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'newcutstart'
            Wrapper name: _inPqe8jygU7 (callable)
            Unique name is pqe8jygU7 (no reverse lookup)
      Function FractalSplineNode::set_advanced_cut_end (133)
        In C: virtual void FractalSplineNode::set_advanced_cut_end(int newcutend);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (52) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'newcutend'
            Wrapper name: _inPqe8jqawf (callable)
            Unique name is pqe8jqawf (no reverse lookup)
      Function FractalSplineNode::set_hollow (134)
        In C: virtual void FractalSplineNode::set_hollow(int newhollow);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (53) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'newhollow'
            Wrapper name: _inPqe8jHzUo (callable)
            Unique name is pqe8jHzUo (no reverse lookup)
      Function FractalSplineNode::set_face_color (135)
        In C: virtual void FractalSplineNode::set_face_color(int iFaceNumber, LVecBase4f newcolor);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (54) no return value, 3 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'iFaceNumber'
              2: LVecBase4f * (189) 'newcolor'
            Wrapper name: _inPqe8j5m4D (callable)
            Unique name is pqe8j5m4D (no reverse lookup)
      Function FractalSplineNode::set_face_texture (136)
        In C: virtual void FractalSplineNode::set_face_texture(int iFaceNumber, PointerTo< Texture > texture);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (55) no return value, 3 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'iFaceNumber'
              2: Texture * (191) 'texture'
            Wrapper name: _inPqe8jtAyw (callable)
            Unique name is pqe8jtAyw (no reverse lookup)
      Function FractalSplineNode::set_texture_offset_start (137)
        In C: virtual void FractalSplineNode::set_texture_offset_start(LPoint2f const &fNewTextureOffsetStart);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (56) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: LPoint2f const * (193) 'fNewTextureOffsetStart'
            Wrapper name: _inPqe8jXGx8 (callable)
            Unique name is pqe8jXGx8 (no reverse lookup)
      Function FractalSplineNode::set_texture_offset_end (138)
        In C: virtual void FractalSplineNode::set_texture_offset_end(LPoint2f const &fNewTextureOffsetEnd);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (57) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: LPoint2f const * (193) 'fNewTextureOffsetEnd'
            Wrapper name: _inPqe8jZPPc (callable)
            Unique name is pqe8jZPPc (no reverse lookup)
      Function FractalSplineNode::set_shear (139)
        In C: virtual void FractalSplineNode::set_shear(float fNew);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (58) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: float (196) 'fNew'
            Wrapper name: _inPqe8jynxs (callable)
            Unique name is pqe8jynxs (no reverse lookup)
      Function FractalSplineNode::set_top_size_x (140)
        In C: virtual void FractalSplineNode::set_top_size_x(float fNew);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (59) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: float (196) 'fNew'
            Wrapper name: _inPqe8jbyob (callable)
            Unique name is pqe8jbyob (no reverse lookup)
      Function FractalSplineNode::set_top_size_y (141)
        In C: virtual void FractalSplineNode::set_top_size_y(float fNew);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (60) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: float (196) 'fNew'
            Wrapper name: _inPqe8jP8Z9 (callable)
            Unique name is pqe8jP8Z9 (no reverse lookup)
      Function FractalSplineNode::update_transforms (142)
        In C: virtual void FractalSplineNode::update_transforms(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (61) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j9Hzx (callable)
            Unique name is pqe8j9Hzx (no reverse lookup)
      Function FractalSplineNode::has_cull_callback (143)
        In C: virtual bool FractalSplineNode::has_cull_callback(void) const;
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (62) returns bool (182), 1 parameter:
              *: FractalSplineNode const * (197) 'this'
            Wrapper name: _inPqe8j76mV (callable)
            Unique name is pqe8j76mV (no reverse lookup)
      Function FractalSplineNode::cull_callback (144)
        In C: virtual bool FractalSplineNode::cull_callback(CullTraverser *trav, CullTraverserData &data);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (63) returns bool (182), 3 parameters:
              *: FractalSplineNode * (188) 'this'
              1: CullTraverser * (199) 'trav'
              2: CullTraverserData * (201) 'data'
            Wrapper name: _inPqe8jztx9 (callable)
            Unique name is pqe8jztx9 (no reverse lookup)
      Function FractalSplineNode::AddVertex (145)
        In C: virtual inline void FractalSplineNode::AddVertex(float x, float y, float z);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (64) no return value, 4 parameters:
              *: FractalSplineNode * (188) 'this'
              1: float (196) 'x'
              2: float (196) 'y'
              3: float (196) 'z'
            Wrapper name: _inPqe8jWhPc (callable)
            Unique name is pqe8jWhPc (no reverse lookup)
      Function FractalSplineNode::StartTriangle (146)
        In C: virtual inline void FractalSplineNode::StartTriangle(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (65) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8jDHQN (callable)
            Unique name is pqe8jDHQN (no reverse lookup)
      Function FractalSplineNode::EndTriangle (147)
        In C: virtual inline void FractalSplineNode::EndTriangle(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (66) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8jda67 (callable)
            Unique name is pqe8jda67 (no reverse lookup)
      Function FractalSplineNode::SetTextureCoord (148)
        In C: virtual inline void FractalSplineNode::SetTextureCoord(float u, float v);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (67) no return value, 3 parameters:
              *: FractalSplineNode * (188) 'this'
              1: float (196) 'u'
              2: float (196) 'v'
            Wrapper name: _inPqe8jKks5 (callable)
            Unique name is pqe8jKks5 (no reverse lookup)
      Function FractalSplineNode::SetNormal (149)
        In C: virtual inline void FractalSplineNode::SetNormal(float x, float y, float z);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (68) no return value, 4 parameters:
              *: FractalSplineNode * (188) 'this'
              1: float (196) 'x'
              2: float (196) 'y'
              3: float (196) 'z'
            Wrapper name: _inPqe8jdgik (callable)
            Unique name is pqe8jdgik (no reverse lookup)
      Function FractalSplineNode::SetTextureID (150)
        In C: virtual inline void FractalSplineNode::SetTextureID(int iTexture);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (69) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: int (181) 'iTexture'
            Wrapper name: _inPqe8j3EtY (callable)
            Unique name is pqe8j3EtY (no reverse lookup)
      Function FractalSplineNode::reset_bound (151)
        In C: void FractalSplineNode::reset_bound(NodePath const &rel_to);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (70) no return value, 2 parameters:
              *: FractalSplineNode * (188) 'this'
              1: NodePath const * (203) 'rel_to'
            Wrapper name: _inPqe8jcQgn (callable)
            Unique name is pqe8jcQgn (no reverse lookup)
      Function FractalSplineNode::get_class_type (152)
        In C: static TypeHandle FractalSplineNode::get_class_type(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (71) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8jx4_8 (callable)
            Unique name is pqe8jx4_8 (no reverse lookup)
    2 derivations:
      PandaNode (168)
      RendererCallbacksClass (169) (has upcast) (has downcast)
  Type PandaNode (168)
    is class type
  Type RendererCallbacksClass (FractalSpline::RendererCallbacksClass) (169)
    is class type
  Type FractalSplineBoxNode (170)
    fully defined
    is class type
    1 constructors:
      Function FractalSplineBoxNode::FractalSplineBoxNode (154)
        In C: FractalSplineBoxNode::FractalSplineBoxNode(basic_string< char > const &name);
        Method of FractalSplineBoxNode (170)
        1 Python-style wrapper:
          Wrapper (74) returns FractalSplineBoxNode * (207), 1 parameter:
              0: atomic string (187) 'name'
            Caller manages return value using FractalSplineNode::~FractalSplineNode (153)
            Wrapper name: _inPqe8j_YY5 (callable)
            Unique name is pqe8j_YY5 (no reverse lookup)
    destructor:
      Function FractalSplineNode::~FractalSplineNode (153)
        In C: FractalSplineNode::~FractalSplineNode(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (47) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j5wbd (callable)
            Unique name is pqe8j5wbd (no reverse lookup)
    1 methods:
      Function FractalSplineBoxNode::get_class_type (155)
        In C: static TypeHandle FractalSplineBoxNode::get_class_type(void);
        Method of FractalSplineBoxNode (170)
        1 Python-style wrapper:
          Wrapper (75) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8jxgz6 (callable)
            Unique name is pqe8jxgz6 (no reverse lookup)
    1 derivations:
      FractalSplineNode (167)
  Type FractalSplineCylinderNode (171)
    fully defined
    is class type
    1 constructors:
      Function FractalSplineCylinderNode::FractalSplineCylinderNode (156)
        In C: FractalSplineCylinderNode::FractalSplineCylinderNode(basic_string< char > const &name);
        Method of FractalSplineCylinderNode (171)
        1 Python-style wrapper:
          Wrapper (76) returns FractalSplineCylinderNode * (208), 1 parameter:
              0: atomic string (187) 'name'
            Caller manages return value using FractalSplineNode::~FractalSplineNode (153)
            Wrapper name: _inPqe8jKOHR (callable)
            Unique name is pqe8jKOHR (no reverse lookup)
    destructor:
      Function FractalSplineNode::~FractalSplineNode (153)
        In C: FractalSplineNode::~FractalSplineNode(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (47) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j5wbd (callable)
            Unique name is pqe8j5wbd (no reverse lookup)
    1 methods:
      Function FractalSplineCylinderNode::get_class_type (157)
        In C: static TypeHandle FractalSplineCylinderNode::get_class_type(void);
        Method of FractalSplineCylinderNode (171)
        1 Python-style wrapper:
          Wrapper (77) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8jjJTv (callable)
            Unique name is pqe8jjJTv (no reverse lookup)
    1 derivations:
      FractalSplineNode (167)
  Type FractalSplinePrismNode (172)
    fully defined
    is class type
    1 constructors:
      Function FractalSplinePrismNode::FractalSplinePrismNode (158)
        In C: FractalSplinePrismNode::FractalSplinePrismNode(basic_string< char > const &name);
        Method of FractalSplinePrismNode (172)
        1 Python-style wrapper:
          Wrapper (78) returns FractalSplinePrismNode * (209), 1 parameter:
              0: atomic string (187) 'name'
            Caller manages return value using FractalSplineNode::~FractalSplineNode (153)
            Wrapper name: _inPqe8jaKJU (callable)
            Unique name is pqe8jaKJU (no reverse lookup)
    destructor:
      Function FractalSplineNode::~FractalSplineNode (153)
        In C: FractalSplineNode::~FractalSplineNode(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (47) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j5wbd (callable)
            Unique name is pqe8j5wbd (no reverse lookup)
    1 methods:
      Function FractalSplinePrismNode::get_class_type (159)
        In C: static TypeHandle FractalSplinePrismNode::get_class_type(void);
        Method of FractalSplinePrismNode (172)
        1 Python-style wrapper:
          Wrapper (79) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8jKAO5 (callable)
            Unique name is pqe8jKAO5 (no reverse lookup)
    1 derivations:
      FractalSplineNode (167)
  Type FractalSplineRingNode (173)
    fully defined
    is class type
    1 constructors:
      Function FractalSplineRingNode::FractalSplineRingNode (160)
        In C: FractalSplineRingNode::FractalSplineRingNode(basic_string< char > const &name);
        Method of FractalSplineRingNode (173)
        1 Python-style wrapper:
          Wrapper (80) returns FractalSplineRingNode * (210), 1 parameter:
              0: atomic string (187) 'name'
            Caller manages return value using FractalSplineNode::~FractalSplineNode (153)
            Wrapper name: _inPqe8jvesa (callable)
            Unique name is pqe8jvesa (no reverse lookup)
    destructor:
      Function FractalSplineNode::~FractalSplineNode (153)
        In C: FractalSplineNode::~FractalSplineNode(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (47) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j5wbd (callable)
            Unique name is pqe8j5wbd (no reverse lookup)
    1 methods:
      Function FractalSplineRingNode::get_class_type (161)
        In C: static TypeHandle FractalSplineRingNode::get_class_type(void);
        Method of FractalSplineRingNode (173)
        1 Python-style wrapper:
          Wrapper (81) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8jsOmh (callable)
            Unique name is pqe8jsOmh (no reverse lookup)
    1 derivations:
      FractalSplineNode (167)
  Type FractalSplineTorusNode (174)
    fully defined
    is class type
    1 constructors:
      Function FractalSplineTorusNode::FractalSplineTorusNode (162)
        In C: FractalSplineTorusNode::FractalSplineTorusNode(basic_string< char > const &name);
        Method of FractalSplineTorusNode (174)
        1 Python-style wrapper:
          Wrapper (82) returns FractalSplineTorusNode * (211), 1 parameter:
              0: atomic string (187) 'name'
            Caller manages return value using FractalSplineNode::~FractalSplineNode (153)
            Wrapper name: _inPqe8jX1A5 (callable)
            Unique name is pqe8jX1A5 (no reverse lookup)
    destructor:
      Function FractalSplineNode::~FractalSplineNode (153)
        In C: FractalSplineNode::~FractalSplineNode(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (47) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j5wbd (callable)
            Unique name is pqe8j5wbd (no reverse lookup)
    1 methods:
      Function FractalSplineTorusNode::get_class_type (163)
        In C: static TypeHandle FractalSplineTorusNode::get_class_type(void);
        Method of FractalSplineTorusNode (174)
        1 Python-style wrapper:
          Wrapper (83) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8jzbqr (callable)
            Unique name is pqe8jzbqr (no reverse lookup)
    1 derivations:
      FractalSplineNode (167)
  Type FractalSplineTubeNode (175)
    fully defined
    is class type
    1 constructors:
      Function FractalSplineTubeNode::FractalSplineTubeNode (164)
        In C: FractalSplineTubeNode::FractalSplineTubeNode(basic_string< char > const &name);
        Method of FractalSplineTubeNode (175)
        1 Python-style wrapper:
          Wrapper (84) returns FractalSplineTubeNode * (212), 1 parameter:
              0: atomic string (187) 'name'
            Caller manages return value using FractalSplineNode::~FractalSplineNode (153)
            Wrapper name: _inPqe8jUyAc (callable)
            Unique name is pqe8jUyAc (no reverse lookup)
    destructor:
      Function FractalSplineNode::~FractalSplineNode (153)
        In C: FractalSplineNode::~FractalSplineNode(void);
        Method of FractalSplineNode (167)
        1 Python-style wrapper:
          Wrapper (47) no return value, 1 parameter:
              *: FractalSplineNode * (188) 'this'
            Wrapper name: _inPqe8j5wbd (callable)
            Unique name is pqe8j5wbd (no reverse lookup)
    1 methods:
      Function FractalSplineTubeNode::get_class_type (165)
        In C: static TypeHandle FractalSplineTubeNode::get_class_type(void);
        Method of FractalSplineTubeNode (175)
        1 Python-style wrapper:
          Wrapper (85) returns TypeHandle * (186), no parameters.
            Caller manages return value using  (0)
            Wrapper name: _inPqe8j1lEd (callable)
            Unique name is pqe8j1lEd (no reverse lookup)
    1 derivations:
      FractalSplineNode (167)

0 global functions:

Hmmm, wierd, I did a clean, but now it wont link because of the BitMask issues :confused:

Hugh

Ok, got it linking again.

So, did a complete clean, and then a rebuild, redirecting to out.txt.

Here is the terminal output:


F:\dev\FSPandaWrappers>dir >out.txt

F:\dev\FSPandaWrappers>dir f:\panda3d-1.0.3\pandac >>out.txt

F:\dev\FSPandaWrappers>gnumake >>out.txt
gnumake: *** [fractalSplineBoxNode.obj] Error 2

F:\dev\FSPandaWrappers>dir >out.txt

F:\dev\FSPandaWrappers>dir f:\panda3d-1.0.3\pandac >>out.txt

F:\dev\FSPandaWrappers>gnumake >>out.txt
85 python function wrappers exported.

F:\dev\FSPandaWrappers>genpycode -s -e f:\dev\fspandawrappers -r libfractalsplin
epandawrap >>out.txt

F:\dev\FSPandaWrappers>dir f:\panda3d-1.0.3\pandac >>out.txt

Here is the output from the redirection (out.txt):

[code]

驱动器 F 中的å

Hmm, well, with the -r parameter to genPyCode, you are removing the standard libpanda, libpandaexpress, etc. libraries. Unless you explicitly put them back, it will have trouble generating your libfractal libraries. (The current design of genPyCode requires it to instrument all C++ modules at the same time, including the built-in Panda modules as well as your extension modules. We will be reworking this design eventually.)

So you might have better luck without the -r. I’m not sure if that’s all of the answers, though–I’m still puzzled by that BitMask32 issue. Do you get that problem when linking libdirect.dll? After all, that is a DLL that links with Panda and also uses BitMask32.

David