vrml.node
index
/home/mcfletch/pylive/vrml/node.py

Base-class for scenegraph nodes
 
Requires Python 2.2.x, as it makes
extensive use of properties

 
Modules
       
vrml.copier
pydispatch.dispatcher
vrml.field
vrml.fieldtypes
vrml.olist
vrml.weakkeydictfix
vrml.weaklist
weakref

 
Classes
       
object
Node
NullNode
PrototypedNode
_MFNode
MFNode(_MFNode, Field)
MFNodeEvt(_MFNode, Event)
_SFNode
SFNode(_SFNode, Field)
SFNodeEvt(_SFNode, Event)
WeakSFNode(_SFNode, WeakField, Field)
RootScenegraphNode

 
class MFNode(_MFNode, Field)
    MFNode Field class
 
 
Method resolution order:
MFNode
_MFNode
Field
BaseField
object

Methods inherited from _MFNode:
coerce(self, value)
Coerce value to an MFNode list-of-objects
copyValue(self, value, copier=None)
Copy a value for copier
fset(self, client, value, notify=1)
Set the client's value for this property
 
notify -- if true send a notification event
 
The MFNode tries to update the value's root
attribute to point to the root of the client
*iff* the value doesn't currently point at
a valid root.  (That is, it only updates root
if there is no current root).  This is done
without sending notify events.
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors inherited from _MFNode:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)
baseSFNode
exposedField SFNode SFNode <bound method SFNode

Data and other attributes inherited from _MFNode:
baseObjectType = <class 'vrml.olist.OList'>
List sub-class which generates pydispatch events on changes
 
Generates 4 types of events:
 
    * NEW_CHILD_EVT, from self, with value=child, for each added child
    * NEW_PARENT_EVT, from child, with parent=self, for each added child 
    * DEL_CHILD_EVT, from self, with value=child, for each removed child 
    * DEL_PARENT_EVT, from child, with parent=self, for each removed child
    
Note that the OList semantics are a little loose currently, as 
it sometimes acts as though adding a new duplicate child is not 
an event and sometimes acts as though it is.  This doesn't cause 
problems for the OpenGLContext scenegraph.
 
The OList is intended for situations where slow-write-fast-read 
is the primary requirement, it allows you to hook writing events 
in order to recalculate/cache values.
defaultDefault = <class 'vrml.olist.OList'>
List sub-class which generates pydispatch events on changes
 
Generates 4 types of events:
 
    * NEW_CHILD_EVT, from self, with value=child, for each added child
    * NEW_PARENT_EVT, from child, with parent=self, for each added child 
    * DEL_CHILD_EVT, from self, with value=child, for each removed child 
    * DEL_PARENT_EVT, from child, with parent=self, for each removed child
    
Note that the OList semantics are a little loose currently, as 
it sometimes acts as though adding a new duplicate child is not 
an event and sometimes acts as though it is.  This doesn't cause 
problems for the OpenGLContext scenegraph.
 
The OList is intended for situations where slow-write-fast-read 
is the primary requirement, it allows you to hook writing events 
in order to recalculate/cache values.
nodes = 1

Methods inherited from Field:
__init__(self, name, exposure=1, default=[])
Initialise the field object
 
name -- string name
exposure -- boolean (0/1) indicating whether this is an exposed field
default -- default value for the field
__str__(self)
Get a human-friendly representation of the field
copy(self, client=None, copier=None)
Copy this property's value/definition for client node/proto
 
if client is a prototype, copy this field definition
for use in a new prototype.
 
if client is a node, and it has a set value for this
field, then returns copyValue( currentValue )
 
otherwise returns _NULL, a singleton object which
shouldn't turn up anywhere else.
fhas(self, client)
Determine whether the client currently has a non-default value
fieldVrmlstr(self, lineariser)
Write the field's definition to the lineariser
 
Basically this gives you a VRML97 fragment
which can be used for creating a PROTO which
will have the equivalent of this field available.
typeName(self)
Get the typeName of this field
watch(self, node, receiver, signal=_Any)
Make receiver receive all update events for this field+node
 
receiver( signal, sender, value=None )
 
    signal -- ('del',self), ('set',self) etc...
    sender -- node 
    value -- new value set (for set values)

Methods inherited from BaseField:
__del__(...)
Delete our value from client's dictionary (notifies)
__delete__(...)
descr.__delete__(obj)
__get__(...)
descr.__get__(obj[, type]) -> value
__set__(...)
descr.__set__(obj, value)
check(...)
Raise ValueError if isn't correct type
fdel(...)
Delete with option to notify
fget = __get__(...)
descr.__get__(obj[, type]) -> value
getDefault(...)
Get the default value of this field
 
if client, set client's attribute to default
without sending a notification event.

Data descriptors inherited from BaseField:
call_default
defaultobj
name

Data and other attributes inherited from BaseField:
__new__ = <built-in method __new__ of type object at 0x7f8ea99534e0>
T.__new__(S, ...) -> a new object with type S, a subtype of T
__pyx_vtable__ = <PyCObject object at 0x3084e68>

 
class MFNodeEvt(_MFNode, Event)
    MFNode Event class
 
 
Method resolution order:
MFNodeEvt
_MFNode
Event
object

Data and other attributes defined here:
fieldType = 'MFNode'

Methods inherited from _MFNode:
coerce(self, value)
Coerce value to an MFNode list-of-objects
copyValue(self, value, copier=None)
Copy a value for copier
fset(self, client, value, notify=1)
Set the client's value for this property
 
notify -- if true send a notification event
 
The MFNode tries to update the value's root
attribute to point to the root of the client
*iff* the value doesn't currently point at
a valid root.  (That is, it only updates root
if there is no current root).  This is done
without sending notify events.
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors inherited from _MFNode:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)
baseSFNode
exposedField SFNode SFNode <bound method SFNode

Data and other attributes inherited from _MFNode:
baseObjectType = <class 'vrml.olist.OList'>
List sub-class which generates pydispatch events on changes
 
Generates 4 types of events:
 
    * NEW_CHILD_EVT, from self, with value=child, for each added child
    * NEW_PARENT_EVT, from child, with parent=self, for each added child 
    * DEL_CHILD_EVT, from self, with value=child, for each removed child 
    * DEL_PARENT_EVT, from child, with parent=self, for each removed child
    
Note that the OList semantics are a little loose currently, as 
it sometimes acts as though adding a new duplicate child is not 
an event and sometimes acts as though it is.  This doesn't cause 
problems for the OpenGLContext scenegraph.
 
The OList is intended for situations where slow-write-fast-read 
is the primary requirement, it allows you to hook writing events 
in order to recalculate/cache values.
defaultDefault = <class 'vrml.olist.OList'>
List sub-class which generates pydispatch events on changes
 
Generates 4 types of events:
 
    * NEW_CHILD_EVT, from self, with value=child, for each added child
    * NEW_PARENT_EVT, from child, with parent=self, for each added child 
    * DEL_CHILD_EVT, from self, with value=child, for each removed child 
    * DEL_PARENT_EVT, from child, with parent=self, for each removed child
    
Note that the OList semantics are a little loose currently, as 
it sometimes acts as though adding a new duplicate child is not 
an event and sometimes acts as though it is.  This doesn't cause 
problems for the OpenGLContext scenegraph.
 
The OList is intended for situations where slow-write-fast-read 
is the primary requirement, it allows you to hook writing events 
in order to recalculate/cache values.
nodes = 1

Methods inherited from Event:
__get__(self, client=None, cls=None)
Get an event's last value
__init__(self, name, direction=1)
Initialise the field object
 
name -- string name
direction -- 0 == in, 1 == out
__set__(self, client, value, notify=1)
Set an event value
__str__(self)
Get a human-friendly representation of the event
clone(self, name=None, direction=None)
Clone this property
eventVrmlstr(self, lineariser)
Write the event's definition to the lineariser
 
Basically this gives you a VRML97 fragment
which can be used for creating a PROTO which
will have the equivalent of this event available.
typeName(self)
Get the typeName of this field
watch(self, node, receiver, signal=_Any)
Make receiver receive all update events for this field+node
 
receiver( signal, sender, value=None )
 
    signal -- ('del',self), ('set',self) etc...
    sender -- node 
    value -- new value set (for set values)

 
class Node(object)
    A generic scene graph node
 
Unlike earlier versions of the library,
this implementation of the Node class is
basically a regular python class.  This is
possible because it uses the python 2.2.x
property/descriptor API extensively.
 
Technically this is a multiple-hierarchy DAG
node, as there can be any number of node
children attributes, and nodes may appear
multiple times in the hierarchy.
 
Attributes of note:
    " DEF" field
        a simple string field which stores the
        DEF name of a node instance
    " scenegraph" attribute
        pointer to the node's implementation
        scenegraph (at the moment, this is not
        actually used for anything)
    " PROTO" attribute
        stores the PROTO name of the node
    externalURL attribute
        stores the MFString url for the node's
        externproto definition if appropriate
    toString method
        convenience access to the lineariser
        to give VRML97-formatted representation of
        the node
 
  Methods defined here:
__init__(self, **namedarguments)
Initialise the node with appropriate named args
 
All properties/attributes must be specified with
named arguments, and the property/attribute must
exist within the Node's class/prototype.
 
This will raise AttributeError/ValueError/TypeError
if the values or the property names are inappropriate.
 
Note that all Node objects have the attribute/property
    exposedField SFString DEF ""
defined.  You may therefore specify a DEF name by
passing it as a named argument.
__repr__(self)
Get a code-like representation of the Node
 
Basically every attribute except for sub-nodes values
are returned as a full representation.
__str__(self)
Get a friendly representation of the Node
copy(self, copier=None)
Copy this node for copier
toString(self, **namedargs)
Generate a VRML 97-syntax string representing this Prototype
**namedargs -- key:value
    passed arguments for the linearisation object
see lineariser4.Lineariser

Data descriptors defined here:
DEF
exposedField SFString  DEF
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)
externalURL
exposedField MFString externalURL []
rootSceneGraph
exposedField RootScenegraphNode SFNode NULL

Data and other attributes defined here:
PROTO = ''

 
class NullNode(Node)
    NULL SFNode value
There should only be a single NULL instance for
any particular system.  It should, for all intents and
purposes just sit there inertly
 
 
Method resolution order:
NullNode
Node
object

Methods defined here:
__eq__(self, other)
Compare the NULL node to other objects
__nonzero__(self)
Make the NULL node evaluate to false
__repr__ = __str__(self)
__str__(self)
Get a human-friendly representation of the NULL node
clone(self)
Replicate the null object (return another pointer to it)

Data and other attributes defined here:
PROTO = 'NULL'

Methods inherited from Node:
__init__(self, **namedarguments)
Initialise the node with appropriate named args
 
All properties/attributes must be specified with
named arguments, and the property/attribute must
exist within the Node's class/prototype.
 
This will raise AttributeError/ValueError/TypeError
if the values or the property names are inappropriate.
 
Note that all Node objects have the attribute/property
    exposedField SFString DEF ""
defined.  You may therefore specify a DEF name by
passing it as a named argument.
copy(self, copier=None)
Copy this node for copier
toString(self, **namedargs)
Generate a VRML 97-syntax string representing this Prototype
**namedargs -- key:value
    passed arguments for the linearisation object
see lineariser4.Lineariser

Data descriptors inherited from Node:
DEF
exposedField SFString  DEF
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)
externalURL
exposedField MFString externalURL []
rootSceneGraph
exposedField RootScenegraphNode SFNode NULL

 
class PrototypedNode(object)
    Prototyped node mix-in
 
Note the presence of a " scenegraph" property
for the node created below (due to mutual dependencies).
This is filled by the instantiate method to provide the
actual implementation of the node.
 
  Methods defined here:
__init__(self, *arguments, **namedarguments)
Initialise the node with appropriate named args
 
Also attempts to instantiate the sub-node scenegraph
for the PrototypedNode
instantiate(self)
Make a copy of the class scenegraph-template for this node
 
Also needs to bind IS mappings/routes for the template,
and negotiate not-yet-loaded external prototypes and
the like.
renderedChildren(self, types=None)
Get the rendered children of the scenegraph

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)
scenegraph
exposedField SFNode SFNode NULL

 
class RootScenegraphNode(WeakSFNode)
    
Method resolution order:
RootScenegraphNode
WeakSFNode
_SFNode
WeakField
Field
BaseField
object

Methods defined here:
fset(self, client, value, notify=1)
Set the root scenegraph node (recursively)
 
TODO: this will blow up on cyclic graphs!

Data and other attributes defined here:
fieldType = 'RootScenegraphNode'

Methods inherited from _SFNode:
coerce(self, value)
Coerce value to an SFNode reference
defaultDefault(self)
Default SFNode value
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors inherited from _SFNode:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes inherited from _SFNode:
allowNULL = 1
name = 'SFNode'
nodes = 1
requiredTypes = ()

Methods inherited from WeakField:
fget(self, client)
Get the client's value for this property
 
if notify is true send a notification event.

Methods inherited from Field:
__init__(self, name, exposure=1, default=[])
Initialise the field object
 
name -- string name
exposure -- boolean (0/1) indicating whether this is an exposed field
default -- default value for the field
__str__(self)
Get a human-friendly representation of the field
copy(self, client=None, copier=None)
Copy this property's value/definition for client node/proto
 
if client is a prototype, copy this field definition
for use in a new prototype.
 
if client is a node, and it has a set value for this
field, then returns copyValue( currentValue )
 
otherwise returns _NULL, a singleton object which
shouldn't turn up anywhere else.
copyValue(self, value, copier=None)
Copy a value for copier
fhas(self, client)
Determine whether the client currently has a non-default value
fieldVrmlstr(self, lineariser)
Write the field's definition to the lineariser
 
Basically this gives you a VRML97 fragment
which can be used for creating a PROTO which
will have the equivalent of this field available.
typeName(self)
Get the typeName of this field
watch(self, node, receiver, signal=_Any)
Make receiver receive all update events for this field+node
 
receiver( signal, sender, value=None )
 
    signal -- ('del',self), ('set',self) etc...
    sender -- node 
    value -- new value set (for set values)

Methods inherited from BaseField:
__del__(...)
Delete our value from client's dictionary (notifies)
__delete__(...)
descr.__delete__(obj)
__get__(...)
descr.__get__(obj[, type]) -> value
__set__(...)
descr.__set__(obj, value)
check(...)
Raise ValueError if isn't correct type
fdel(...)
Delete with option to notify
getDefault(...)
Get the default value of this field
 
if client, set client's attribute to default
without sending a notification event.

Data descriptors inherited from BaseField:
call_default
defaultobj

Data and other attributes inherited from BaseField:
__new__ = <built-in method __new__ of type object at 0x7f8ea99534e0>
T.__new__(S, ...) -> a new object with type S, a subtype of T
__pyx_vtable__ = <PyCObject object at 0x3084e68>

 
class SFNode(_SFNode, Field)
    (Restricted) SFNode type
 
This is the publically available SFNode type,
a sub-class of _SFNode and field.Field
 
 
Method resolution order:
SFNode
_SFNode
Field
BaseField
object

Data and other attributes defined here:
requiredTypes = (<class 'vrml.node.Node'>,)

Methods inherited from _SFNode:
coerce(self, value)
Coerce value to an SFNode reference
defaultDefault(self)
Default SFNode value
fset(self, client, value, notify=1)
Set the client's value for this property
 
notify -- if true send a notification event
 
The SFNode tries to update the value's root
attribute to point to the root of the client
*iff* the value doesn't currently point at
a valid root.  (That is, it only updates root
if there is no current root).  This is done
without sending notify events.
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors inherited from _SFNode:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes inherited from _SFNode:
allowNULL = 1
name = 'SFNode'
nodes = 1

Methods inherited from Field:
__init__(self, name, exposure=1, default=[])
Initialise the field object
 
name -- string name
exposure -- boolean (0/1) indicating whether this is an exposed field
default -- default value for the field
__str__(self)
Get a human-friendly representation of the field
copy(self, client=None, copier=None)
Copy this property's value/definition for client node/proto
 
if client is a prototype, copy this field definition
for use in a new prototype.
 
if client is a node, and it has a set value for this
field, then returns copyValue( currentValue )
 
otherwise returns _NULL, a singleton object which
shouldn't turn up anywhere else.
copyValue(self, value, copier=None)
Copy a value for copier
fhas(self, client)
Determine whether the client currently has a non-default value
fieldVrmlstr(self, lineariser)
Write the field's definition to the lineariser
 
Basically this gives you a VRML97 fragment
which can be used for creating a PROTO which
will have the equivalent of this field available.
typeName(self)
Get the typeName of this field
watch(self, node, receiver, signal=_Any)
Make receiver receive all update events for this field+node
 
receiver( signal, sender, value=None )
 
    signal -- ('del',self), ('set',self) etc...
    sender -- node 
    value -- new value set (for set values)

Methods inherited from BaseField:
__del__(...)
Delete our value from client's dictionary (notifies)
__delete__(...)
descr.__delete__(obj)
__get__(...)
descr.__get__(obj[, type]) -> value
__set__(...)
descr.__set__(obj, value)
check(...)
Raise ValueError if isn't correct type
fdel(...)
Delete with option to notify
fget = __get__(...)
descr.__get__(obj[, type]) -> value
getDefault(...)
Get the default value of this field
 
if client, set client's attribute to default
without sending a notification event.

Data descriptors inherited from BaseField:
call_default
defaultobj

Data and other attributes inherited from BaseField:
__new__ = <built-in method __new__ of type object at 0x7f8ea99534e0>
T.__new__(S, ...) -> a new object with type S, a subtype of T
__pyx_vtable__ = <PyCObject object at 0x3084e68>

 
class SFNodeEvt(_SFNode, Event)
    
Method resolution order:
SFNodeEvt
_SFNode
Event
object

Data and other attributes defined here:
fieldType = 'SFNode'

Methods inherited from _SFNode:
coerce(self, value)
Coerce value to an SFNode reference
defaultDefault(self)
Default SFNode value
fset(self, client, value, notify=1)
Set the client's value for this property
 
notify -- if true send a notification event
 
The SFNode tries to update the value's root
attribute to point to the root of the client
*iff* the value doesn't currently point at
a valid root.  (That is, it only updates root
if there is no current root).  This is done
without sending notify events.
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors inherited from _SFNode:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes inherited from _SFNode:
allowNULL = 1
name = 'SFNode'
nodes = 1
requiredTypes = ()

Methods inherited from Event:
__get__(self, client=None, cls=None)
Get an event's last value
__init__(self, name, direction=1)
Initialise the field object
 
name -- string name
direction -- 0 == in, 1 == out
__set__(self, client, value, notify=1)
Set an event value
__str__(self)
Get a human-friendly representation of the event
clone(self, name=None, direction=None)
Clone this property
eventVrmlstr(self, lineariser)
Write the event's definition to the lineariser
 
Basically this gives you a VRML97 fragment
which can be used for creating a PROTO which
will have the equivalent of this event available.
typeName(self)
Get the typeName of this field
watch(self, node, receiver, signal=_Any)
Make receiver receive all update events for this field+node
 
receiver( signal, sender, value=None )
 
    signal -- ('del',self), ('set',self) etc...
    sender -- node 
    value -- new value set (for set values)

 
class WeakSFNode(_SFNode, WeakField, Field)
    Weak-referenced SFNode field-type
 
 
Method resolution order:
WeakSFNode
_SFNode
WeakField
Field
BaseField
object

Data and other attributes defined here:
fieldType = 'WeakSFNode'

Methods inherited from _SFNode:
coerce(self, value)
Coerce value to an SFNode reference
defaultDefault(self)
Default SFNode value
fset(self, client, value, notify=1)
Set the client's value for this property
 
notify -- if true send a notification event
 
The SFNode tries to update the value's root
attribute to point to the root of the client
*iff* the value doesn't currently point at
a valid root.  (That is, it only updates root
if there is no current root).  This is done
without sending notify events.
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors inherited from _SFNode:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes inherited from _SFNode:
allowNULL = 1
name = 'SFNode'
nodes = 1
requiredTypes = ()

Methods inherited from WeakField:
fget(self, client)
Get the client's value for this property
 
if notify is true send a notification event.

Methods inherited from Field:
__init__(self, name, exposure=1, default=[])
Initialise the field object
 
name -- string name
exposure -- boolean (0/1) indicating whether this is an exposed field
default -- default value for the field
__str__(self)
Get a human-friendly representation of the field
copy(self, client=None, copier=None)
Copy this property's value/definition for client node/proto
 
if client is a prototype, copy this field definition
for use in a new prototype.
 
if client is a node, and it has a set value for this
field, then returns copyValue( currentValue )
 
otherwise returns _NULL, a singleton object which
shouldn't turn up anywhere else.
copyValue(self, value, copier=None)
Copy a value for copier
fhas(self, client)
Determine whether the client currently has a non-default value
fieldVrmlstr(self, lineariser)
Write the field's definition to the lineariser
 
Basically this gives you a VRML97 fragment
which can be used for creating a PROTO which
will have the equivalent of this field available.
typeName(self)
Get the typeName of this field
watch(self, node, receiver, signal=_Any)
Make receiver receive all update events for this field+node
 
receiver( signal, sender, value=None )
 
    signal -- ('del',self), ('set',self) etc...
    sender -- node 
    value -- new value set (for set values)

Methods inherited from BaseField:
__del__(...)
Delete our value from client's dictionary (notifies)
__delete__(...)
descr.__delete__(obj)
__get__(...)
descr.__get__(obj[, type]) -> value
__set__(...)
descr.__set__(obj, value)
check(...)
Raise ValueError if isn't correct type
fdel(...)
Delete with option to notify
getDefault(...)
Get the default value of this field
 
if client, set client's attribute to default
without sending a notification event.

Data descriptors inherited from BaseField:
call_default
defaultobj

Data and other attributes inherited from BaseField:
__new__ = <built-in method __new__ of type object at 0x7f8ea99534e0>
T.__new__(S, ...) -> a new object with type S, a subtype of T
__pyx_vtable__ = <PyCObject object at 0x3084e68>

 
class _MFNode(object)
    (Restricted) MFNode field-type-definition
 
  Methods defined here:
coerce(self, value)
Coerce value to an MFNode list-of-objects
copyValue(self, value, copier=None)
Copy a value for copier
fset(self, client, value, notify=1)
Set the client's value for this property
 
notify -- if true send a notification event
 
The MFNode tries to update the value's root
attribute to point to the root of the client
*iff* the value doesn't currently point at
a valid root.  (That is, it only updates root
if there is no current root).  This is done
without sending notify events.
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)
baseSFNode
exposedField SFNode SFNode <bound method SFNode

Data and other attributes defined here:
baseObjectType = <class 'vrml.olist.OList'>
List sub-class which generates pydispatch events on changes
 
Generates 4 types of events:
 
    * NEW_CHILD_EVT, from self, with value=child, for each added child
    * NEW_PARENT_EVT, from child, with parent=self, for each added child 
    * DEL_CHILD_EVT, from self, with value=child, for each removed child 
    * DEL_PARENT_EVT, from child, with parent=self, for each removed child
    
Note that the OList semantics are a little loose currently, as 
it sometimes acts as though adding a new duplicate child is not 
an event and sometimes acts as though it is.  This doesn't cause 
problems for the OpenGLContext scenegraph.
 
The OList is intended for situations where slow-write-fast-read 
is the primary requirement, it allows you to hook writing events 
in order to recalculate/cache values.
defaultDefault = <class 'vrml.olist.OList'>
List sub-class which generates pydispatch events on changes
 
Generates 4 types of events:
 
    * NEW_CHILD_EVT, from self, with value=child, for each added child
    * NEW_PARENT_EVT, from child, with parent=self, for each added child 
    * DEL_CHILD_EVT, from self, with value=child, for each removed child 
    * DEL_PARENT_EVT, from child, with parent=self, for each removed child
    
Note that the OList semantics are a little loose currently, as 
it sometimes acts as though adding a new duplicate child is not 
an event and sometimes acts as though it is.  This doesn't cause 
problems for the OpenGLContext scenegraph.
 
The OList is intended for situations where slow-write-fast-read 
is the primary requirement, it allows you to hook writing events 
in order to recalculate/cache values.
nodes = 1

 
class _SFNode(object)
    Base-class for SFNode-type fields
 
The optionally restricted SFNode field type
allows a node to hold a reference to another node
within the directed acyclic graph.
 
There are two primary attributes:
 
    requiredTypes -- a type or tuple of types that
        are acceptable as values for the field
    allowNULL -- whether to allow the NULL node as
        a value for the field
 
  Methods defined here:
coerce(self, value)
Coerce value to an SFNode reference
defaultDefault(self)
Default SFNode value
fset(self, client, value, notify=1)
Set the client's value for this property
 
notify -- if true send a notification event
 
The SFNode tries to update the value's root
attribute to point to the root of the client
*iff* the value doesn't currently point at
a valid root.  (That is, it only updates root
if there is no current root).  This is done
without sending notify events.
vrmlstr(self, value, lineariser)
Convert the given value to a VRML97 representation

Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes defined here:
allowNULL = 1
name = 'SFNode'
nodes = 1
requiredTypes = ()

 
Functions
       
_changeSender(nodeRef, field)
Utility function to send node-change messages on olist updates
ismaps(node)
Get the isMaps for the given node
 
Returns a field-name:(sub-node,field) mapping
Not currently functional
prototype(name, fields=(), sceneGraph=None, externalURL=None, baseClasses=(<class 'vrml.node.PrototypedNode'>, <class 'vrml.node.Node'>))
Build a new prototype class
 
name -- string name
fields -- sequence of vrml.field objects
sceneGraph -- the source scenegraph for prototyped nodes
externalURL -- MFString URL or None
baseClasses -- base classes for the new class

 
Data
        ISMAPS = <WeakKeyDictionary at 57855800>
NULL = NULL
__file__ = '/home/mcfletch/pylive/vrml/node.pyc'
__name__ = 'vrml.node'
__package__ = 'vrml'