// genDElement - An abstract data element library
// Copyright (C) 2013-2026 Eric Bechet, Frederic Duboeuf
//
// See the LICENSE file for license information.
// Please report all bugs and problems to <bechet@cadxfem.org> or <duboeuf@outlook.com>.
//
// Initial design: Frederic Duboeuf (rev.1501)


#include "genDataBuilder.h"

#include "GModel.h"
#include "GEntity.h"
#include "MElement.h"
#include "genDElement.h"


#include "genDataConnectivity.h"
void buildDataConnectivity(MElement* e)
{
  MElement* ep=e->getParent();
  if (ep)
    buildData<DataConnectivity<MElement> >(e,"SubConnectivity");
  else
    buildData<DataConnectivity<MElement> >(e,"Connectivity");
}

void buildDataConnectivity()
{
  std::vector<GEntity*> entities;
  GModel::current()->getEntities(entities);
  for (int i=0; i<entities.size(); ++i)
  {
    GEntity* entity = entities[i];
    for (int j=0; j<entity->getNumMeshElements(); ++j)
    {
      MElement* e;
      e = entity->getMeshElement(j);
      buildDataConnectivity(e);
    }
  }
}


#include "genDataEntity.h"
void buildDataEntity()
{
  std::vector<GEntity*> entities;
  GModel::current()->getEntities(entities);
  for (int i=0; i<entities.size(); ++i)
  {
    GEntity* entity = entities[i];
    for (int j=0; j<entity->getNumMeshElements(); ++j)
    {
      MElement* e;
      e = entity->getMeshElement(j);
      DataEntity* data = buildData<DataEntity>(e,"Entity");
      data->setEntity(entity);
    }
  }
}


#include "genDataParentSupport.h"
void buildDataParentSupport(MElement* e)
{
  MElement* ep=e->getParent();
  if (ep)
    buildData<DataParentSupport<MElement> >(e,"ParentSupport");
}

void buildDataParentSupport()
{
  std::vector<GEntity*> entities;
  GModel::current()->getEntities(entities);
  for (int i=0; i<entities.size(); ++i)
  {
    GEntity* entity = entities[i];
    for (int j=0; j<entity->getNumMeshElements(); ++j)
    {
      MElement* e;
      e = entity->getMeshElement(j);
      buildDataParentSupport(e);
    }
  }
}