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()); }
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; }