Esempio n. 1
0
void GetSection(Geometry*target,Geometry*section,Geometry*res,bool inside_section,bool back_faces,float*perimeter)
{
	Triangle cur_tr;
	Lines lines;
	std::vector<LineConf> lines_conf;


	for(int i=0;i<target->tr.size();i++){
		/*
	for(int b=0;b<target->boxes.size();b++)
		if(CrossBoxes(target->boxes[b].v[0],target->boxes[b].v[1],section->box1,section->box2))
			for(int bi=0;bi<target->boxes[b].boxes.size();bi++)
			{int i=target->boxes[b].boxes[bi];*/

		if(CrossBoxes(target->tr_bb[i].v[0],target->tr_bb[i].v[1],section->box1,section->box2))
	{
		cur_tr = target->tr[i];
		lines.clear();
		lines_conf.clear();
		GetCrTriangles(*section, cur_tr, lines,&lines_conf, target->tr_bb[i],perimeter);
		
		bool ins = section->Inside(cur_tr.v[0]);
		ins = xor(inside_section,ins);
		
		if(lines.size())
		{
			//static int cc=0;
			//cc++;

			CutTriangle(cur_tr,lines,lines_conf,ins,res,!back_faces);
			//if(cc==2)return;
		}else
		{
			if(ins)
			{
				if(back_faces){swap(cur_tr.v[0],cur_tr.v[1]);cur_tr.norm.Inv();}
				res->AddTriangle(cur_tr);
			}//else
		
		}

	}
	}
	//printf("\n\nSection's triangles:%d\n",res->tr.size());

}
Esempio n. 2
0
bool FileHelper::open(const std::string file_name, Lines& lines)
{
    std::ifstream file(file_name.c_str(), std::ios::in);
    if (!file) 
    {
        return false;
    }

    lines.clear();
    char buffer[buffer_size];

    while (file.getline(buffer, buffer_size, '\n'))
    {
        lines.push_back(buffer);
    }
    
    return true;
}