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; }