示例#1
0
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
}
示例#2
0
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)));
}
示例#3
0
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
}
示例#4
0
文件: filter.cpp 项目: qsnake/hermes
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
}
示例#5
0
void PrecalcShapeset::pop_transform()
{
  Transformable::pop_transform();
  if(sub_tables != NULL)
    update_nodes_ptr();
}
示例#6
0
void PrecalcShapeset::push_transform(int son)
{
  Transformable::push_transform(son);
  if(sub_tables != NULL)
    update_nodes_ptr();
}
示例#7
0
 void Function<Scalar>::force_transform(uint64_t sub_idx, Trf* ctm)
 {
   this->sub_idx = sub_idx;
   this->ctm = ctm;
   update_nodes_ptr();
 }