void FaceSpatializeIndexed<BasicTraits>::Category::addData (OpenSGFaceBase<OpenSGTraits>* arg)
{
   FaceIterator face = arg->getOriginal();
   if (
       face.getGeometry()->getMaterial()->isTransparent() // transparent face
       && m_trans.find(arg->getObjectAdapter().getNode()) != m_trans.end() // not processed
       ) { 
      // create object adapter
      OSGObjectBase convert(arg->getObjectAdapter().getNode());
      convert.setObjectAdapter(&arg->getObjectAdapter());
      NodePtr             newNode = Node::create();
      m_trans[convert.getOriginal()] = newNode;
      GeometryPtr         oldCore = GeometryPtr::dcast(convert.getOriginal()->getCore());
      GeometryPtr         newCore = oldCore->clone();
      beginEditCP(newNode);
      newNode->setCore(newCore);
      endEditCP(newNode);
      beginEditCP(newCore);
      newCore->setPositions(convert.getPositions());
      newCore->setNormals  (convert.getNormals());
      endEditCP(newCore);

      beginEditCP(m_root);
      m_root->addChild(newNode);
      endEditCP(m_root);

      return;
   }
   ++m_totalFaces;

   typename CategoryList::iterator c;
   for (c = m_all.begin();
	c != m_all.end();
	++c) {
      if ((*c)->isThisCategory(face)) {
         break;
      }
   }
   if (c == m_all.end()) { // new category
#if 0
      MaterialGroupPtr mat = MaterialGroup::create();
      beginEditCP(mat);
      mat->setMaterial(face.getGeometry()->getMaterial());
      endEditCP(mat);
      NodePtr matNode = Node::create();
      beginEditCP(matNode);
      matNode->setCore(mat);
      endEditCP(matNode);
      beginEditCP(m_root);
      m_root->addChild(matNode);
      endEditCP(m_root);
      c = m_all.insert(m_all.end(), new CategoryGeneral(matNode, arg, face));
#else
      c = m_all.insert(m_all.end(), new CategoryGeneral(m_root, arg, face));
#endif
      ++m_numGeom;
   }
   (*c)->addData(arg, face);
}
typename Spatialize<BasicTraits>::ResultT  
Spatialize<BasicTraits>::LeafEnter  (AdapterType* node)
{
   // create new node with transformed positions and normals
   NodePtr     newNode = Node::create();
   GeometryPtr oldCore = GeometryPtr::dcast(node->getOriginal()->getCore());
   GeometryPtr newCore = oldCore->clone();
   beginEditCP(newNode);
   newNode->setCore(newCore);
   endEditCP(newNode);
   beginEditCP(newCore);
   newCore->setPositions(node->getPositions());
   newCore->setNormals  (node->getNormals());
   endEditCP(newCore);

   m_rootLevel->addChild(newNode);
   return SingleTraverserBase<BasicTraits>::CONTINUE;
}