更改函数 CGAL::draw() 显示的网格颜色
Change color of mesh displayed by the function CGAL::draw()
问题描述
请问有没有办法改变CGAL::draw()函数显示的网格颜色。我有一个Surface_mesh,我想用CGAL画出来。所以我使用函数CGAL::draw(),但是网格的颜色是蓝色的,这在我看来并不漂亮。我试图更改 CGAL 的代码来更改颜色。我在一个名为 draw_face_graoh.h 的头文件中找到了一个名为 DefaultColorFunctorFaceGraph 的仿函数,在 DefaultColorFunctorFaceGraph 的定义上方有一个注释,上面写着“// Default color functor; user can change it to have its own face颜色”。我改变了仿函数,其中我把return的值改成CGAL::IO::gray(),但是完全没有用,mesh的颜色还是蓝色的。
那我可以吗通过更改 CGAL 的代码来更改网格的颜色?是否需要更改底层代码,例如一些调用 OpenGL 的代码?
代码
这是关于我使用函数 draw().
的方式的示例
#include<iostream>
#include<fstream>
#include<CGAL/Surface_mesh.h>
#include<CGAL/draw_surface_mesh.h>
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel kernel;
typedef kernel::Point_3 point;
typedef CGAL::Surface_mesh<point> Mesh;
int main() {
std::ifstream fin("test.off");
Mesh mesh;
fin >> mesh;
CGAL::draw(mesh);
}
名为test.off的文件如下。
OFF
4 4 0
0 0 1
0 0 0
1 0 0
0 1 0
3 2 0 1
3 1 0 3
3 1 3 2
3 3 0 2
这是更改后的仿函数。
namespace CGAL
{
// Default color functor; user can change it to have its own face color
struct DefaultColorFunctorFaceGraph
{
template<typename Graph>
CGAL::IO::Color operator()(const Graph&,
typename boost::graph_traits<Graph>::face_descriptor fh) const
{
if (fh == boost::graph_traits<Graph>::null_face()) // use to get the mono color
//return CGAL::IO::Color(100,125,200); // R G B between 0-255
return CGAL::IO::gray();//Here changed
return get_random_color(CGAL::get_default_random());
}
};
运行时环境
IDE:对比 2017
方案配置:Release x64
CGAL 版本:5.3
最后我在名为 Basic_viewer_qt.h
的头文件中找到了一个名为 Basic_viewer_qt
的结构。通过更改此结构中变量 m_faces_mono_color
和 m_ambient_color
的值,可以更改网格的颜色。
问题描述
请问有没有办法改变CGAL::draw()函数显示的网格颜色。我有一个Surface_mesh,我想用CGAL画出来。所以我使用函数CGAL::draw(),但是网格的颜色是蓝色的,这在我看来并不漂亮。我试图更改 CGAL 的代码来更改颜色。我在一个名为 draw_face_graoh.h 的头文件中找到了一个名为 DefaultColorFunctorFaceGraph 的仿函数,在 DefaultColorFunctorFaceGraph 的定义上方有一个注释,上面写着“// Default color functor; user can change it to have its own face颜色”。我改变了仿函数,其中我把return的值改成CGAL::IO::gray(),但是完全没有用,mesh的颜色还是蓝色的。
那我可以吗通过更改 CGAL 的代码来更改网格的颜色?是否需要更改底层代码,例如一些调用 OpenGL 的代码?
代码
这是关于我使用函数 draw().
#include<iostream>
#include<fstream>
#include<CGAL/Surface_mesh.h>
#include<CGAL/draw_surface_mesh.h>
#include<CGAL/Exact_predicates_inexact_constructions_kernel.h>
typedef CGAL::Exact_predicates_inexact_constructions_kernel kernel;
typedef kernel::Point_3 point;
typedef CGAL::Surface_mesh<point> Mesh;
int main() {
std::ifstream fin("test.off");
Mesh mesh;
fin >> mesh;
CGAL::draw(mesh);
}
名为test.off的文件如下。
OFF
4 4 0
0 0 1
0 0 0
1 0 0
0 1 0
3 2 0 1
3 1 0 3
3 1 3 2
3 3 0 2
这是更改后的仿函数。
namespace CGAL
{
// Default color functor; user can change it to have its own face color
struct DefaultColorFunctorFaceGraph
{
template<typename Graph>
CGAL::IO::Color operator()(const Graph&,
typename boost::graph_traits<Graph>::face_descriptor fh) const
{
if (fh == boost::graph_traits<Graph>::null_face()) // use to get the mono color
//return CGAL::IO::Color(100,125,200); // R G B between 0-255
return CGAL::IO::gray();//Here changed
return get_random_color(CGAL::get_default_random());
}
};
运行时环境
IDE:对比 2017
方案配置:Release x64
CGAL 版本:5.3
最后我在名为 Basic_viewer_qt.h
的头文件中找到了一个名为 Basic_viewer_qt
的结构。通过更改此结构中变量 m_faces_mono_color
和 m_ambient_color
的值,可以更改网格的颜色。