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