conbinef.hxx
GonsA DivideFaces (const GonsA& ga)
{
v_Vd3A faceA ;
v_Vl3A pis ;
Vd3A pnts = gns1.Get(&pis,NULL,NULL,NULL) ;
for (size_t fIndex=0 ; fIndex<pis.size() ; fIndex++) {
Vl3A pia = pis[fIndex] ;
Vd3A p3a ;
for (size_t vIndex=0 ; vIndex<pia.size() ; vIndex++) {
// ...
Vd3 pnt = pnts[fVert] ;
p3a.push_back(pnt) ;
}
p3a = ::V3_Close(p3a) ;
{
Gons1 dg1 = ::Gons_SetFaces(faceA) ;
dg1.Material::operator = (gns1) ;
dg1.SetColor(0xffffff&((gns1.GetColor()+fIndex*100)|0x3f3f3f)) ;
dg.push_back(dg1) ;
faceA.clear() ;
}
faceA.push_back(p3a) ;
}
{
Gons1 dg1 = ::Gons_SetFaces(faceA) ;
dg.push_back(dg1) ;
}
}
}
この関数の,ループ内の最初の ::Gons_SetFaces が呼ばれた時, faceA は「空」.
この呼出しの後の faceA.push_back(p3a) で faceA に登録している.
ルーフ外の ::Gons_SetFaces で最後の面を登録しているが,色などが初期値.
元々,同一平面と見なせるものはそのままとしたコードの名残.
コードがわかり辛いのでループの後半部分を修正.
// ...
p3a = ::V3_Close(p3a) ;
faceA.push_back(p3a) ;
{
Gons1 dg1 = ::Gons_SetFaces(faceA) ;
dg1.Material::operator = (gns1) ;
dg1.SetColor(0xffffff&((gns1.GetColor()+fIndex*100)|0x3f3f3f)) ;
dg.push_back(dg1) ;
faceA.clear() ;
}