コード例 #1
0
void WritePly(const std::vector<CVector<3,double> >& result, const Field<2,float>& mask, std::string filename)
{
	// generate face indices
	Field<2,int> index(mask.size());
	for (int y=0, idx=0; y<mask.size(1); y++)
		for (int x=0; x<mask.size(0); x++)
			if (mask.cell(x,y))
				index.cell(x,y)=idx++;
			else
				index.cell(x,y)=-1;

	std::vector<CVector<3,int> > face;
	for (int y=0; y<mask.size(1)-1; y++)
	{
		for (int x=0; x<mask.size(0)-1; x++)
		{
			// sore in CCW order
			if (mask.cell(x,y) && mask.cell(x+1,y) && mask.cell(x+1,y+1) && 
				!distorted(index.cell(x,y),index.cell(x+1,y),index.cell(x+1,y+1),result))
				face.push_back(make_vector(index.cell(x,y),index.cell(x+1,y+1),index.cell(x+1,y)));
			if (mask.cell(x,y) && mask.cell(x+1,y+1) && mask.cell(x,y+1) && 
				!distorted(index.cell(x,y),index.cell(x+1,y+1),index.cell(x,y+1),result))
				face.push_back(make_vector(index.cell(x,y),index.cell(x,y+1),index.cell(x+1,y+1)));
		}
	}

	TRACE("ply => %s\n",filename.c_str());
	FILE *fw = fopen(filename.c_str(), "wb");
	fprintf(fw,
			"ply\n"
			"format binary_little_endian 1.0\n"
			"element vertex %d\n"
			"property float x\n"
			"property float y\n"
			"property float z\n"
			"element face %d\n"
			"property list uchar int vertex_indices\n"
			"end_header\n", result.size(), face.size());
	for (int i=0; i<result.size(); i++)
	{
		CVector<3,float> p = make_vector(result[i][0],result[i][1],result[i][2]);
		fwrite(&p, 12, 1, fw);
	} 
	for (int i=0; i<face.size(); i++)
	{
		fputc(3,fw);
		fwrite(&face[i], 12, 1, fw);
	}

	fclose(fw);
}
コード例 #2
0
ファイル: poor_distorted.cpp プロジェクト: mgubi/texmacs
int
poor_distorted_font_rep::index_glyph (string s, font_metric& fnm,
                                                font_glyphs& fng) {
  int c= base->index_glyph (s, fnm, fng);
  if (c < 0) return c;
  //fnm= distorted (fnm, kind);
  fng= distorted (fng, kind, wfn);
  return c;
}