SPMeshRow* SPMeshRow::getNextMeshRow() { SPMeshRow *result = 0; for (SPObject* obj = getNext(); obj && !result; obj = obj->getNext()) { if (SP_IS_MESHROW(obj)) { result = SP_MESHROW(obj); } } return result; }
SPMeshRow* SPMeshRow::getPrevMeshRow() { SPMeshRow *result = 0; for (SPObject* obj = getPrev(); obj; obj = obj->getPrev()) { // The closest previous SPObject that is an SPMeshRow *should* be ourself. if (SP_IS_MESHROW(obj)) { SPMeshRow* meshrow = SP_MESHROW(obj); // Sanity check to ensure we have a proper sibling structure. if (meshrow->getNextMeshRow() == this) { result = meshrow; } else { g_warning("SPMeshRow previous/next relationship broken"); } break; } } return result; }
/** Creates normalized color mesh patch array */ void SPGradient::rebuildArray() { // std::cout << "SPGradient::rebuildArray()" << std::endl; if( !SP_IS_MESH(this) ) { g_warning( "SPGradient::rebuildArray() called for non-mesh gradient" ); return; } array.read( SP_MESH( this ) ); has_patches = false; for ( SPObject *ro = firstChild() ; ro ; ro = ro->getNext() ) { if (SP_IS_MESHROW(ro)) { has_patches = true; // std::cout << " Has Patches" << std::endl; break; } } // MESH_FIXME: TO PROPERLY COPY SPGradient *reffed = ref->getObject(); if ( !hasPatches() && reffed ) { std::cout << "SPGradient::rebuildArray(): reffed array NOT IMPLEMENTED!!!" << std::endl; /* Copy array from referenced gradient */ array.built = true; // Prevent infinite recursion. reffed->ensureArray(); // if (!reffed->array.nodes.empty()) { // array.built = reffed->array.built; // for( uint i = 0; i < reffed->array.nodes.size(); ++i ) { // array.nodes[i].assign(reffed->array.nodes[i].begin(), reffed->array.nodes[i].end()); // // FILL ME // } // return; // } } }