示例#1
0
static number FaceArea(TDomain& dom, int si)
{
	typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
	UG_ASSERT(TDomain::position_type::Size <= 3, "too many coordinates.");

	return FaceArea(*dom.subset_handler(), si, 0, aaPos);
}
//-----------------------------------------------------------------------------
void TAdministradora :: LoadDomainsNacionales(AnsiString pDomainNacional)
{
  TFile* TreeFile = new TFile(pDomainNacional);
  TreeFile->Open("rb+");
  TreeFile->SeekTo(0);

  if(TreeFile->IsOpen())
  {
    TSDomainInfo SDominio;
    TreeFile->Read(&SDominio,sizeof(TSServerInfo));

    while(!TreeFile->Eof())
    {
      TPreOrderNode* node = new  TPreOrderNode();
      TDomain* domain = new TDomain();
      node->End(SDominio.End);
      node->RightLink(SDominio.LinkedRight);
      domain->NameDomain(SDominio.Name);
      node->Info(domain);
      aDomainsPreOrderList->Insert(node);
      TreeFile->Read(&SDominio,sizeof(TSDomainInfo));
    }
  }
  TreeFile->Close();
  delete TreeFile;
}
示例#3
0
static void PrintElementEdgeRatios(TDomain& dom)
{
	int elemType = dom.domain_info().element_type();

	MultiGrid& mg = *dom.grid();

	UG_LOG("Element Edge Ratios:\n");
	for(size_t lvl = 0; lvl < mg.num_levels(); ++lvl){
		UG_LOG("  level " << lvl << ":\t");
		switch(elemType){
			case FACE:
				PrintElementEdgeRatios(mg, mg.begin<Face>(lvl),
									   mg.end<Face>(lvl), dom.position_accessor());
				break;

			case VOLUME:
				PrintElementEdgeRatios(mg, mg.begin<Volume>(lvl),
									   mg.end<Volume>(lvl), dom.position_accessor());
				break;
			default:
				UG_LOG("---\n");
				break;
		}
	}
}
示例#4
0
static void ProjectVerticesToSphere(TDomain& dom, std::vector<number> center,
                                    number radius, number eps)
{
	static const int dim = TDomain::dim;
	typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
	typename TDomain::grid_type& g = *dom.grid();

	if((int)center.size() != dim)
		UG_THROW("Expect center to be of dimension "<<dim);

	MathVector<dim> Center;
	for(int d = 0; d < dim; d++) Center[d] = center[d];

	for(VertexIterator iter = g.vertices_begin();
		iter != g.vertices_end(); ++iter)
	{
		MathVector<dim>& pos = aaPos[*iter];

		// move only vertices in eps-environment of sphere
		if(	VecDistance(pos, Center) < radius - eps ||
			VecDistance(pos, Center) > radius + eps) continue;

		// get closest point on sphere
		MathVector<dim> dir;
		VecSubtract(dir, pos, Center);
		number s, s1Out, s2Out;
		if(RaySphereIntersection(s1Out,s2Out, Center, dir, Center, radius) < 1)
			UG_THROW("No intersection found for pos "<<pos);
		if(s1Out > s2Out) s = s1Out; else s = s2Out;
		if(s <= 0) UG_THROW("Invalid scale "<<s);

		// set new pos
		VecScaleAdd(pos, 1.0, Center, s, dir);
	}
}
//-----------------------------------------------------------------------------
//::::::::::::::::::::::::::::CREADORES DE CUENTAS:::::::::::::::::::::::::::::::::::::
//-----------------------------------------------------------------------------
AnsiString TAdministradora :: CreateDirection(TBinTreeNode* pServer,AnsiString pUserNameServer)
{
  AnsiString email = pUserNameServer;
   while(pServer != aTree->Root())
   {
     TDomain* Domain = (TDomain*)pServer->Info();
     email = email + "." + Domain->NameDomain();
     pServer=aTree->GetFather(pServer);
   }
   return email= email +  "." + ( (TDomain*)aTree->Root()->Info() )->NameDomain();
}
示例#6
0
static bool SavePartitionMap(PartitionMap& pmap, TDomain& domain,
							 const char* filename)
{
	PROFILE_FUNC_GROUP("grid");
	if(domain.grid().get() != pmap.get_partition_handler()->grid())
	{
		UG_LOG("WARNING in SavePartitionMap: The given partition map was not"
				" created for the given domain. Aborting...\n");
		return false;
	}

	return SavePartitionMapToFile(pmap, filename, domain.position_attachment());
}
示例#7
0
static number FaceArea(TDomain& dom, ISelector& sel)
{
	typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
	UG_ASSERT(TDomain::position_type::Size <= 3, "too many coordinates.");

	return FaceArea(sel, aaPos);
}
示例#8
0
static number FaceArea(TDomain& dom, ISubsetHandler& sh, int si, size_t lvl)
{
	typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
	UG_ASSERT(TDomain::position_type::Size <= 3, "too many coordinates.");

	return FaceArea(sh, si, lvl, aaPos);
}
示例#9
0
static void TranslateDomain(TDomain& dom, number tx, number ty, number tz)
{
	typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
	typename TDomain::grid_type& g = *dom.grid();
	vector3 t(tx, ty, tz);

	const int numCoords = TDomain::position_type::Size;
	UG_ASSERT(numCoords <= 3, "too many coordinates.");

	for(VertexIterator iter = g.vertices_begin();
		iter != g.vertices_end(); ++iter)
	{
		for(int i = 0; i < numCoords; ++i)
			aaPos[*iter][i] += t[i];
	}
}
示例#10
0
static void RandomizeDomain(TDomain& dom, number dx, number dy, number dz)
{
	typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
	typename TDomain::grid_type& g = *dom.grid();
	vector3 d(dx, dy, dz);

	const int numCoords = TDomain::position_type::Size;
	UG_ASSERT(numCoords <= 3, "too many coordinates.");

	for(VertexIterator iter = g.vertices_begin();
		iter != g.vertices_end(); ++iter)
	{
		for(int i = 0; i < numCoords; ++i)
			aaPos[*iter][i] += urand(-d[i], d[i]);
	}
}
示例#11
0
static number GetMaxEdgeLength(TDomain& dom)
{
	typename TDomain::position_accessor_type& aaPos = dom.position_accessor();
	typename TDomain::grid_type& g = *dom.grid();

	number maxLenSq = 0;
	for(EdgeIterator eiter = g.template begin<Edge>();
		eiter != g.template end<Edge>(); ++eiter)
	{
		maxLenSq = max(maxLenSq, EdgeLengthSq(*eiter, aaPos));
	}

#ifdef UG_PARALLEL
	pcl::ProcessCommunicator com;
	number gMaxLenSq = com.allreduce(maxLenSq, PCL_RO_MAX);
	return sqrt(gMaxLenSq);
#else
	return sqrt(maxLenSq);
#endif
}
示例#12
0
static void LoadAndRefineDomain(TDomain& domain, const char* filename,
								int numRefs)
{
	PROFILE_FUNC_GROUP("grid");
	try{
		LoadDomain(domain, filename);
	}
	UG_CATCH_THROW("LoadAndRefineDomain: Could not load domain at file: "<<filename);

	GlobalMultiGridRefiner ref(*domain.grid());
	for(int i = 0; i < numRefs; ++i)
		ref.refine();
}
示例#13
0
//-----------------------------------------------------------------------------
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//::::::::::::::::::: METODOS DE GUARDAR/CARGAR EN FICHEROS:::::::::::::::::::
//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//-----------------------------------------------------------------------------
//Nacionales Domains
void TAdministradora :: SaveDominioTree(AnsiString pNameDomain)
{
  TFile* TreeFile = new TFile(pNameDomain);
  TreeFile->Open("wb");
  TreeFile->SeekTo(0);

  TSeqPreOrderTree* preorder = new TSeqPreOrderTree(aTree);

  if(TreeFile->IsOpen())
  {
    TSDomainInfo SDominio;
    for(int i = 0; i < preorder->Length(); i++)
    {
      TPreOrderNode* node = (TPreOrderNode*)preorder->ItemInfo(i);
      SDominio.End = node->End();
      SDominio.LinkedRight = node->RightLink();
      TDomain* domain = (TDomain*)node->Info();
      strcpy(SDominio.Name,domain->NameDomain().c_str());
      TreeFile->Write(&SDominio,sizeof(TSDomainInfo));
    }
  }
  TreeFile->Close();
  delete TreeFile;
}
示例#14
0
int main( int argc, char** argv )
{
  
  std::string inputFilename = examplesPath + "samples/Al.100.vol";
  
 //------------

 typedef SpaceND<3> Space4Type;
 typedef HyperRectDomain<Space4Type> TDomain;

 typedef TDomain::Point Point;

  
 QApplication application(argc,argv);
 Viewer3D viewer;
 viewer.setWindowTitle("simpleViewer");
 viewer.show();


 
 //Default image selector = STLVector
 typedef ImageSelector<TDomain, unsigned char>::Type Image;
 Image image = VolReader<Image>::importVol( inputFilename );
 TDomain domain = image.domain();


 Image imageSeeds ( domain);
 for ( Image::Iterator it = imageSeeds.begin(), itend = imageSeeds.end();it != itend; ++it)
   (*it)=1;
 Z3i::Point p0(10,10,10);
 //imageSeeds.setValue(p0, 0 );
 randomSeeds(imageSeeds, 70, 0);


 //Distance transformation computation
 typedef ImageSelector<TDomain, long int>::Type ImageLong;

 typedef SimpleThresholdForegroundPredicate<Image> Predicate;
 Predicate aPredicate(imageSeeds,0);

 typedef  DistanceTransformation<Space4Type,Predicate, 2> DTL2;
 typedef  DistanceTransformation<Space4Type,Predicate, 0> DTLInf;
 typedef  DistanceTransformation<Space4Type,Predicate, 1> DTL1;
 
 DTL2 dtL2(domain, aPredicate);
 DTLInf dtLinf(domain, aPredicate);
 DTL1 dtL1(domain, aPredicate);

 
 DTL1::OutputImage resultL1 = dtL1.compute (  );

 unsigned int min = 0;
 unsigned int max = 0;
 for(DTL1::OutputImage::ConstIterator it = resultL1.begin(), itend=resultL1.end();
     it!=itend;
     ++it)
   {
     if(  (*it) < min )   
       min=(*it);
     if( (*it) > max ) 
       max=(*it);
   }
     
     
  GradientColorMap<long> gradient( 0,30);
  gradient.addColor(Color::Red);
  gradient.addColor(Color::Yellow);
  gradient.addColor(Color::Green);
  gradient.addColor(Color::Cyan);
  gradient.addColor(Color::Blue);
  gradient.addColor(Color::Magenta);
  gradient.addColor(Color::Red);  
 

  viewer << SetMode3D( (*(domain.begin())).className(), "Paving" );
  
  for(TDomain::ConstIterator it = domain.begin(), itend=domain.end();
     it!=itend;
     ++it){
   
   unsigned int valDist= resultL1( (*it) );     
   Color c= gradient(valDist);
   
   if(resultL1(*it)<=30 ){
     viewer << CustomColors3D(Color((float)(c.red()), 
            (float)(c.green()),
            (float)(c.blue(),205)), 
            Color((float)(c.red()), 
            (float)(c.green()),
            (float)(c.blue()),205));
     viewer << *it ;
   }     
 }
 
  //viewer << ClippingPlane(1,0,0,-60);
 viewer<< Viewer3D::updateDisplay;
 
 return application.exec();
}
示例#15
0
static void MinimizeMemoryFootprint(TDomain& dom)
{
	dom.grid()->set_options(GRIDOPT_VERTEXCENTRIC_INTERCONNECTION
							 | GRIDOPT_AUTOGENERATE_SIDES);
}
bool testEmptyDomain()
{
  typedef SpaceND<3> TSpace;
  typedef TSpace::Point TPoint;
  typedef HyperRectDomain<TSpace> TDomain;

  unsigned int nb = 0;
  unsigned int nbok = 0;
  
  trace.beginBlock( "Test empty domain." );
  
  const TDomain nonempty_domain( TPoint::diagonal(0), TPoint::diagonal(0) );
  ++nb; nbok += nonempty_domain.isEmpty() ? 0 : 1;
  trace.info() << "(" << nbok << "/" << nb << ") Creating non-empty domain & checking isEmpty." << std::endl;
  
  const TDomain default_domain;
  ++nb; nbok += default_domain.isEmpty() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Creating default empty domain & checking isEmpty." << std::endl;

  const TDomain domain( TPoint::diagonal(1), TPoint::diagonal(0) );
  ++nb; nbok += domain.isEmpty() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Creating default custom domain & checking isEmpty." << std::endl;

  ++nb; nbok += domain.size() == 0 ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Empty domain has size = " << domain.size() << std::endl;

  ++nb; nbok += domain.begin() == domain.end() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end()" << std::endl;

  ++nb; nbok += domain.rbegin() == domain.rend() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend()" << std::endl;

  TDomain::ConstSubRange range = domain.subRange( 0, 1, 2, domain.lowerBound()  );
  ++nb; nbok += range.begin() == range.end() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {0,1,2}" << std::endl;

  ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {0,1,2}" << std::endl;
  
  range = domain.subRange( 2, 1, 0, domain.lowerBound()  );
  ++nb; nbok += range.begin() == range.end() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {2,1,0}" << std::endl;

  ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {2,1,0}" << std::endl;

  range = domain.subRange( 0, 2, domain.lowerBound()  );
  ++nb; nbok += range.begin() == range.end() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {0,2}" << std::endl;

  ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {0,2}" << std::endl;
  
  range = domain.subRange( 2, 0, domain.lowerBound()  );
  ++nb; nbok += range.begin() == range.end() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {2,0}" << std::endl;

  ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-range {2,0}" << std::endl;
  
  range = domain.subRange( 1, domain.lowerBound()  );
  ++nb; nbok += range.begin() == range.end() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that begin() == end() for sub-range {1}" << std::endl;

  ++nb; nbok += range.rbegin() == range.rend() ? 1 : 0;
  trace.info() << "(" << nbok << "/" << nb << ") Checking that rbegin() == rend() for sub-rang {1}" << std::endl;

  trace.endBlock();
  return nb == nbok;
  
}