void Filter::set_active_element(Element* e) { MeshFunction::set_active_element(e); if (!unimesh) { for (int i = 0; i < num; i++) sln[i]->set_active_element(e); // nodup memset(sln_sub, 0, sizeof(sln_sub)); } else { for (int i = 0; i < num; i++) { sln[i]->set_active_element(unidata[i][e->id].e); sln[i]->set_transform(unidata[i][e->id].idx); sln_sub[i] = sln[i]->get_transform(); } } if (tables[cur_quad] != NULL) { for(std::map<uint64_t, LightArray<Node*>*>::iterator it = tables[cur_quad]->begin(); it != tables[cur_quad]->end(); it++) { for(unsigned int l = 0; l < it->second->get_size(); l++) if(it->second->present(l)) ::free(it->second->get(l)); delete it->second; } delete tables[cur_quad]; } tables[cur_quad] = new std::map<uint64_t, LightArray<Node*>*>; sub_tables = tables[cur_quad]; update_nodes_ptr(); order = 20; // fixme }
void PrecalcShapeset::set_active_shape(int index) { // Key creation. unsigned key = cur_quad | (mode << 3) | ((unsigned) (max_index[mode] - index) << 4); if(master_pss == NULL) { if(!tables.present(key)) tables.add(new std::map<uint64_t, LightArray<Node*>*>, key); sub_tables = tables.get(key); } else { if(!master_pss->tables.present(key)) master_pss->tables.add(new std::map<uint64_t, LightArray<Node*>*>, key); sub_tables = master_pss->tables.get(key); } // Update the Node table. update_nodes_ptr(); this->index = index; order = std::max(H2D_GET_H_ORDER(shapeset->get_order(index)), H2D_GET_V_ORDER(shapeset->get_order(index))); }
void Filter::set_active_element(Element* e) { MeshFunction::set_active_element(e); if (!unimesh) { for (int i = 0; i < num; i++) sln[i]->set_active_element(e); // nodup memset(sln_sub, 0, sizeof(sln_sub)); } else { for (int i = 0; i < num; i++) { sln[i]->set_active_element(unidata[i][e->id].e); sln[i]->set_transform(unidata[i][e->id].idx); sln_sub[i] = sln[i]->get_transform(); } } if (tables[cur_quad] != NULL) free_sub_tables(&(tables[cur_quad])); sub_tables = &(tables[cur_quad]); update_nodes_ptr(); order = 20; // fixme }
void Filter::set_active_element(Element* e) { MeshFunction::set_active_element(e); if (!unimesh) { for (int i = 0; i < num; i++) sln[i]->set_active_element(e); // nodup memset(sln_sub, 0, sizeof(sln_sub)); } else { for (int i = 0; i < num; i++) { sln[i]->set_active_element(unidata[i][e->id].e); sln[i]->set_transform(unidata[i][e->id].idx); sln_sub[i] = sln[i]->get_transform(); } } if (tables[cur_quad] != NULL) { for(unsigned int k = 0; k < tables[cur_quad]->get_size(); k++) if(tables[cur_quad]->present(k)) { for(unsigned int l = 0; l < tables[cur_quad]->get(k)->get_size(); l++) if(tables[cur_quad]->get(k)->present(l)) ::free(tables[cur_quad]->get(k)->get(l)); delete tables[cur_quad]->get(k); } delete tables[cur_quad]; } tables[cur_quad] = new LightArray<LightArray<Node*>*>; sub_tables = tables[cur_quad]; update_nodes_ptr(); order = 20; // fixme }
void PrecalcShapeset::pop_transform() { Transformable::pop_transform(); if(sub_tables != NULL) update_nodes_ptr(); }
void PrecalcShapeset::push_transform(int son) { Transformable::push_transform(son); if(sub_tables != NULL) update_nodes_ptr(); }
void Function<Scalar>::force_transform(uint64_t sub_idx, Trf* ctm) { this->sub_idx = sub_idx; this->ctm = ctm; update_nodes_ptr(); }