1+ #include " gtest/gtest.h"
2+ #include " rxmesh/util/log.h"
3+ #include " rxmesh/util/macros.h"
4+ #include " rxmesh/util/util.h"
5+
6+ #include < filesystem>
7+
8+ struct arg
9+ {
10+ std::string obj_file_name = STRINGIFY(INPUT_DIR) " dragon.obj" ;
11+ std::string output_folder = STRINGIFY(OUTPUT_DIR);
12+ float target = 0.1 ;
13+ float edgefrac = 0.1 ;
14+ uint32_t device_id = 0 ;
15+ char ** argv;
16+ int argc;
17+ } Arg;
18+
19+ #include " secp_rxmesh.cuh"
20+
21+ TEST (Apps, SECPriority)
22+ {
23+ using namespace rxmesh ;
24+
25+ // Select device
26+ cuda_query (Arg.device_id );
27+
28+ // RXMeshDynamic rx(Arg.obj_file_name);
29+
30+ const std::string p_file = STRINGIFY (OUTPUT_DIR) +
31+ extract_file_name (Arg.obj_file_name ) +
32+ " _patches" ;
33+ RXMeshDynamic rx (Arg.obj_file_name , p_file);
34+ if (!std::filesystem::exists (p_file)) {
35+ rx.save (p_file);
36+ }
37+
38+ ASSERT_TRUE (rx.is_edge_manifold ());
39+
40+ ASSERT_TRUE (rx.is_closed ());
41+
42+ uint32_t final_num_vertices = Arg.target * rx.get_num_vertices ();
43+
44+ secp_rxmesh (rx, final_num_vertices, Arg.edgefrac );
45+ }
46+
47+
48+ int main (int argc, char ** argv)
49+ {
50+ using namespace rxmesh ;
51+ Log::init ();
52+
53+ ::testing::InitGoogleTest (&argc, argv);
54+ Arg.argv = argv;
55+ Arg.argc = argc;
56+
57+
58+ if (argc > 1 ) {
59+ if (cmd_option_exists (argv, argc + argv, " -h" )) {
60+ // clang-format off
61+ RXMESH_INFO (" \n Usage: SECPriority.exe < -option X>\n "
62+ " -h: Display this massage and exit\n "
63+ " -input: Input file. Input file should be under the input/ subdirectory\n "
64+ " Default is {} \n "
65+ " Hint: Only accept OBJ files\n "
66+ " -target: The fraction of output #vertices from the input\n "
67+ " -edgefrac: The fraction of edges to collapse in a round\n "
68+ " -o: JSON file output folder. Default is {} \n "
69+ " -device_id: GPU device ID. Default is {}" ,
70+ Arg.obj_file_name , Arg.output_folder , Arg.device_id );
71+ // clang-format on
72+ exit (EXIT_SUCCESS);
73+ }
74+
75+ if (cmd_option_exists (argv, argc + argv, " -input" )) {
76+ Arg.obj_file_name =
77+ std::string (get_cmd_option (argv, argv + argc, " -input" ));
78+ }
79+ if (cmd_option_exists (argv, argc + argv, " -o" )) {
80+ Arg.output_folder =
81+ std::string (get_cmd_option (argv, argv + argc, " -o" ));
82+ }
83+ if (cmd_option_exists (argv, argc + argv, " -device_id" )) {
84+ Arg.device_id =
85+ atoi (get_cmd_option (argv, argv + argc, " -device_id" ));
86+ }
87+ if (cmd_option_exists (argv, argc + argv, " -target" )) {
88+ Arg.target = atof (get_cmd_option (argv, argv + argc, " -target" ));
89+ }
90+ if (cmd_option_exists (argv, argc + argv, " -edgefrac" )) {
91+ Arg.edgefrac = atof (get_cmd_option (argv, argv + argc, " -edgefrac" ));
92+ }
93+ }
94+
95+ RXMESH_TRACE (" input= {}" , Arg.obj_file_name );
96+ RXMESH_TRACE (" output_folder= {}" , Arg.output_folder );
97+ RXMESH_TRACE (" device_id= {}" , Arg.device_id );
98+ RXMESH_TRACE (" target= {}" , Arg.target );
99+ RXMESH_TRACE (" edgefrac= {}" , Arg.edgefrac );
100+
101+ return RUN_ALL_TESTS ();
102+ }
0 commit comments