int CPMFKaisakiEditMain::CalAllKirinukiGroup(
std::vector<CURVE> AllKirinukiCrv, // [I/ ]
std::vector<struEname> AllKirinukiAds, // [I/ ]
std::vector< std::vector<CURVE> > &GropuKirinukiCrv, // [ /O]
std::vector< std::vector<struEname> > &GroupKirinukiAds // [ /O]
)
/**/
{
std::vector<CURVE> tem; //save one closed graph
std::vector<struEname> temEname;
VECTOR BeginVector; //beginpoint of one closed graph
VECTOR TemVector; //next point of the closed graph
int i = 0;
vector<CURVE>::iterator itDel;
vector<struEname>::iterator itDel2;
int crvtype;
//case of circle
for(i=0; i<AllKirinukiCrv.size(); i++)
{
geo_SengataGet(&AllKirinukiCrv[i], &crvtype);
if(GEO_EN == crvtype)
{
tem.push_back(AllKirinukiCrv[i]);
temEname.push_back(AllKirinukiAds[i]);
GropuKirinukiCrv.push_back(tem);
GroupKirinukiAds.push_back(temEname);
itDel = AllKirinukiCrv.begin()+i;
AllKirinukiCrv.erase(itDel);
itDel2 = AllKirinukiAds.begin()+i;
AllKirinukiAds.erase(itDel2);
}
}
while(!AllKirinukiCrv.empty())
{
tem.push_back(AllKirinukiCrv[0]);
temEname.push_back(AllKirinukiAds[0]);
///
geo_SengataGet(&AllKirinukiCrv[0], &crvtype);
if(GEO_SENBUN == crvtype)
{
GEO_VEC_COPY(&AllKirinukiCrv[0].line.pnt1,&BeginVector);
GEO_VEC_COPY(&AllKirinukiCrv[0].line.pnt2,&TemVector);
}
else if(GEO_ENKO == crvtype)
{
GEO_VEC_COPY(&AllKirinukiCrv[0].circle.pnt1,&BeginVector);
GEO_VEC_COPY(&AllKirinukiCrv[0].circle.pnt2,&TemVector);
}
else
{
return 0;
}
itDel = AllKirinukiCrv.begin();
AllKirinukiCrv.erase(itDel);
itDel2 = AllKirinukiAds.begin();
AllKirinukiAds.erase(itDel2);
while(geo_TenTenIcchi(&TemVector,&BeginVector,1e-6,1e-6) == GEO_FALSE)
{
for(i=0; i<AllKirinukiCrv.size(); i++)
{
geo_SengataGet(&AllKirinukiCrv[i], &crvtype);
if(GEO_SENBUN == crvtype)
{
if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].line.pnt1,1e-6,1e-6) == GEO_TRUE)
{
GEO_VEC_COPY(&AllKirinukiCrv[i].line.pnt2, &TemVector);
tem.push_back(AllKirinukiCrv[i]);
temEname.push_back(AllKirinukiAds[i]);
itDel = AllKirinukiCrv.begin()+i;
AllKirinukiCrv.erase(itDel);
itDel2 = AllKirinukiAds.begin()+i;
AllKirinukiAds.erase(itDel2);
break;
}
else if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].line.pnt2,1e-6,1e-6) == GEO_TRUE)
{
GEO_VEC_COPY(&AllKirinukiCrv[i].line.pnt1, &TemVector);
tem.push_back(AllKirinukiCrv[i]);
temEname.push_back(AllKirinukiAds[i]);
itDel = AllKirinukiCrv.begin()+i;
AllKirinukiCrv.erase(itDel);
itDel2 = AllKirinukiAds.begin()+i;
AllKirinukiAds.erase(itDel2);
break;
}
else
{
continue;
}
}
else if(GEO_ENKO == crvtype)
{
if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].circle.pnt1,1e-6,1e-6) == GEO_TRUE)
{
GEO_VEC_COPY(&AllKirinukiCrv[i].circle.pnt2, &TemVector);
tem.push_back(AllKirinukiCrv[i]);
temEname.push_back(AllKirinukiAds[i]);
itDel = AllKirinukiCrv.begin()+i;
AllKirinukiCrv.erase(itDel);
itDel2 = AllKirinukiAds.begin()+i;
AllKirinukiAds.erase(itDel2);
break;
}
else if(geo_TenTenIcchi(&TemVector, &AllKirinukiCrv[i].circle.pnt2,1e-6,1e-6) == GEO_TRUE)
{
GEO_VEC_COPY(&AllKirinukiCrv[i].circle.pnt1, &TemVector);
tem.push_back(AllKirinukiCrv[i]);
temEname.push_back(AllKirinukiAds[i]);
itDel = AllKirinukiCrv.begin()+i;
AllKirinukiCrv.erase(itDel);
itDel2 = AllKirinukiAds.begin()+i;
AllKirinukiAds.erase(itDel2);
break;
}
else
{
continue;
}
}
else
{
return 0;
}
}
if(i == AllKirinukiCrv.size())
{
break;
}
}
GropuKirinukiCrv.push_back(tem);
GroupKirinukiAds.push_back(temEname);
tem.clear();
temEname.clear();
}
return 0;
}