Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GSoC2023 - ACVD for Simplification & Remeshing #7837

Open
wants to merge 116 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
3230628
ACVD initial cluster expansion
hoskillua Jul 19, 2023
6625e10
energy minimzaition (not stable yet)
hoskillua Jul 20, 2023
b7512e7
temp fix
hoskillua Jul 20, 2023
c9e4db0
weight (dual area computation)
hoskillua Jul 22, 2023
809e22f
pushing same edge if no update
hoskillua Jul 22, 2023
190ac09
some fixes (now clusters look very clean)
hoskillua Aug 1, 2023
8817c27
constructing mesh
hoskillua Aug 1, 2023
4907b3b
Minor initializtions and fixes
hoskillua Aug 18, 2023
7d4d0c9
fixing random initialization and weighting
hoskillua Aug 19, 2023
e132021
boundary ring
hoskillua Aug 23, 2023
2344871
upsample subdivision
hoskillua Aug 31, 2023
d4cb18f
disconnection check + using subdivision
hoskillua Aug 31, 2023
b98477e
guarantee with subdivision steps for remeshing
hoskillua Aug 31, 2023
793959b
minor fix
hoskillua Aug 31, 2023
9838426
orient polygon soup
hoskillua Sep 1, 2023
21effb4
added upsample subdivision to demo
hoskillua Sep 7, 2023
d2e4f36
Polyhedron demo (incomplete)
hoskillua Sep 15, 2023
fa30609
use a dialog instead of the widget
sloriot Sep 15, 2023
cbd4c0c
demo plugin action
hoskillua Sep 22, 2023
dbda656
minor changes
hoskillua Sep 22, 2023
4f99fdd
Func Documentation
hoskillua Sep 22, 2023
bbc5a34
adaptive clustering first version
hoskillua Oct 5, 2023
0a4a4f4
curvature weight
hoskillua Oct 5, 2023
0868dcc
minor changes
hoskillua Oct 5, 2023
1bf9693
curvature interpolation and other fixes
hoskillua Oct 20, 2023
6f07f4b
qem init
hoskillua Oct 31, 2023
99d8741
commenting out incomplete part
hoskillua Oct 31, 2023
613ca2e
adding qem file from another gsoc proj
hoskillua Nov 7, 2023
c4d02d1
update example file
hoskillua Nov 7, 2023
54a1d2d
qem metric moved
hoskillua Nov 7, 2023
7aa5b66
fixed isolated vertices + clean up
hoskillua Nov 7, 2023
3ea551c
bibliography
hoskillua Nov 7, 2023
41b726e
function returning a triangle soup
hoskillua Nov 7, 2023
e37f568
reference documentation
hoskillua Nov 7, 2023
7cfcd59
user doc (imp history, example file ...)
hoskillua Nov 7, 2023
0ecab9b
WIP: user doc
hoskillua Nov 7, 2023
8ea673d
linux build fixes
hoskillua Nov 8, 2023
8d15e0c
wip: qem incomplete
hoskillua Nov 8, 2023
1c114c8
minor fix (std::max)
hoskillua Nov 8, 2023
603cac2
some cleanup and comments
hoskillua Nov 8, 2023
9ed6d1a
typo fix
hoskillua Nov 8, 2023
5e5b97a
user manual API doc
hoskillua Nov 8, 2023
38339b7
Merge remote-tracking branch 'cgal/master' into HEAD
sloriot Mar 25, 2024
8b64955
fix compilation issues
sloriot Mar 25, 2024
37b16ab
fix warnings
sloriot Mar 25, 2024
9c6aa8c
Optimizing Cluster Rep-Points with Qem (PostProcessing)
hoskillua Mar 27, 2024
6e145b2
double -> typename GT::FT
hoskillua Mar 27, 2024
e417a32
doc improvements
sloriot Mar 27, 2024
97102e3
add license file
sloriot Mar 27, 2024
83f06b5
remove unused file
sloriot Mar 27, 2024
ad926fe
remove tabs
sloriot Mar 27, 2024
9a292fa
Merge branch 'gsoc2023' of https://github.com/hoskillua/cgal into gso…
hoskillua Mar 27, 2024
97917c3
qt6
sloriot Mar 27, 2024
916e5f5
Making PostProcessing QEM Optional (np)
hoskillua Mar 28, 2024
4130a35
renaming a variable
hoskillua Mar 28, 2024
349c526
update plugin
sloriot Mar 28, 2024
3bd0a7c
QEM Minimization (still a bit buggy)
hoskillua Mar 28, 2024
74f6f46
Merge branch 'gsoc2023' of https://github.com/hoskillua/cgal into gso…
hoskillua Mar 28, 2024
410ecb9
update plugin with different options
sloriot Mar 28, 2024
6198753
Merge branch 'gsoc2023' into master
sloriot Oct 18, 2024
70326e3
Read file as given in argv and write output to same stem and extension
afabri Oct 18, 2024
0afe4f0
Change output file names; Fix dependency
afabri Oct 18, 2024
07963c3
fix copy/paste error: put hedges in the right container
sloriot Oct 21, 2024
89331d1
init dynamic maps using new API
sloriot Oct 21, 2024
e045c48
warnings and questions
sloriot Oct 21, 2024
b7f5159
fix qem metric
valette Feb 10, 2025
a5bd577
let algorithm converge by itself
valette Feb 10, 2025
5039ab6
use temporary clusters
valette Feb 10, 2025
c7e06de
cleanup
valette Feb 10, 2025
65755d8
topological test to avoid disconnected clusters
sloriot Feb 10, 2025
78bb2ab
optim : lazy computations
valette Feb 10, 2025
b48d66f
reset cluster stats
valette Feb 10, 2025
36b3532
rename variable
valette Feb 10, 2025
ec2a1a2
removed trailing spaces
valette Feb 10, 2025
634df03
optimization : skip testing edges when their respective clusters have…
valette Feb 10, 2025
328230c
warnings and TODOs
sloriot Feb 10, 2025
e6961ef
factorize qem metric and non qem metric impl
sloriot Feb 10, 2025
b1e3ed1
add ratio as parameter
sloriot Feb 10, 2025
dbf3e6a
make representative computation lazy
sloriot Feb 10, 2025
40749e1
more authors
sloriot Feb 10, 2025
e12c739
use dedicated energy for non qem case
sloriot Feb 10, 2025
692e0ef
fix macro usage
sloriot Feb 11, 2025
c7427fb
split long edges
sloriot Feb 11, 2025
c0f2f7f
new test seed
valette Feb 11, 2025
ed35662
lambda function to push vertex edge ring
valette Feb 11, 2025
1dcf737
3 loops: no qem, qem, qem + topo criteria
sloriot Feb 11, 2025
72f7fcc
black color for no cluster
sloriot Feb 11, 2025
01eb941
iterative edge split and do not handle twice the same edge per iteration
sloriot Feb 11, 2025
61e71d4
WIP make it manifold
sloriot Feb 11, 2025
a640b92
early stop condition : only consider vertices in non-frozen clusters …
valette Feb 12, 2025
ae9d1bc
write the result in the input mesh
sloriot Feb 12, 2025
21f615a
rename parameters
sloriot Feb 12, 2025
2d0ffba
rename parameters
sloriot Feb 12, 2025
10cf3cd
update user manual
sloriot Feb 12, 2025
37e3368
add missing refs
sloriot Feb 12, 2025
837dfc4
fix pmap for curvature based version
sloriot Feb 12, 2025
dab465d
add fig
sloriot Feb 12, 2025
e4bf1e2
Merge remote-tracking branch 'cgal/master' into gsoc2023-hoskillua
sloriot Feb 13, 2025
f9bae01
no need for a group
sloriot Feb 13, 2025
5921c2e
missing include
sloriot Feb 13, 2025
b1ade79
fix compilation issues
sloriot Feb 13, 2025
a9cd1b2
fixes thanks to review
sloriot Feb 13, 2025
171750f
rename function/file
sloriot Feb 13, 2025
a86bd7e
backticks
sloriot Feb 13, 2025
3536e71
more review changes + way to disable ICC
sloriot Feb 13, 2025
a5c5a53
more doc fixes
sloriot Feb 13, 2025
b1e992c
...buffer not reloaded...
sloriot Feb 13, 2025
ce8196f
Apply suggestions from code review
sloriot Feb 14, 2025
e3ab195
move example + accomodate reviews
sloriot Feb 14, 2025
6459cb2
cosmetic changes from the review
sloriot Feb 14, 2025
4ed445b
add macro to hide debug
sloriot Feb 14, 2025
62daaa2
remove empty line
sloriot Feb 14, 2025
7828f2a
Apply suggestions from code review
sloriot Feb 14, 2025
b16a0bd
comment on topology
sloriot Feb 14, 2025
c460951
left over after example renaming
sloriot Feb 14, 2025
05eb2f0
fix compilation error
sloriot Feb 14, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions Documentation/doc/biblio/cgal_manual.bib
Original file line number Diff line number Diff line change
Expand Up @@ -2386,6 +2386,46 @@ @article{ cgal:v-tm-95
,update = "98.01 kettner"
}

@article{cgal:vc-acvdupmc-04,
author = {Valette, Sébastien and Chassery, Jean-Marc},
doi = {10.1111/j.1467-8659.2004.00769.x},
hal_id = {hal-00534535},
hal_version = {v1},
journal = {Computer Graphics Forum},
note = {Eurographics 2004 proceedings},
number = {3},
pages = {381-389},
pdf = {https://hal.archives-ouvertes.fr/hal-00534535/file/valette.pdf},
publisher = {Wiley},
title = {Approximated Centroidal Voronoi Diagrams for Uniform Polygonal Mesh Coarsening},
url = {https://hal.archives-ouvertes.fr/hal-00534535},
volume = {23},
year = {2004}
}

@inproceedings{cgal:audette2011approach,
title={Approach-guided controlled resolution brain meshing for fe-based interactive neurosurgery simulation},
author={Audette, M and Rivi{\`e}re, D and Ewend, M and Enquobahrie, A and Valette, S},
booktitle={Workshop on Mesh Processing in Medical Image Analysis, in conjunction with MICCAI 2011},
pages={176--186},
year={2011}
}

@article{cgal:vcp-grtmmdvd-08,
author = {Valette, Sébastien and Chassery, Jean-Marc and Prost, Rémy},
doi = {10.1109/TVCG.2007.70430},
hal_id = {hal-00537025},
hal_version = {v1},
journal = {IEEE Transactions on Visualization and Computer Graphics},
number = {2},
pages = {369--381},
pdf = {https://hal.archives-ouvertes.fr/hal-00537025/file/VCP08TVCG.pdf},
publisher = {Institute of Electrical and Electronics Engineers},
title = {Generic remeshing of 3D triangular meshes with metric-dependent discrete Voronoi Diagrams},
url = {https://hal.archives-ouvertes.fr/hal-00537025},
volume = {14},
year = {2008}
}

@techreport{cgal:vla-lod-15,
title={LOD Generation for Urban Scenes},
Expand Down Expand Up @@ -3111,14 +3151,12 @@ @article{ecvp-bhhhk-14
bibsource = {dblp computer science bibliography, https://dblp.org/}
}

@inproceedings {dunyach2013curvRemesh,
booktitle = {Eurographics 2013 - Short Papers},
title = {{Adaptive Remeshing for Real-Time Mesh Deformation}},
author = {Dunyach, Marion and Vanderhaeghe, David and Barthe, Loïc and Botsch, Mario},
year = {2013},
publisher = {The Eurographics Association},
ISSN = {1017-4656},
DOI = {10.2312/conf/EG2013/short/029-032}
@inproceedings{dunyach2013curvRemesh,
title={Adaptive remeshing for real-time mesh deformation},
author={Dunyach, Marion and Vanderhaeghe, David and Barthe, Loïc and Botsch, Mario},
booktitle={Eurographics 2013},
year={2013},
organization={The Eurographics Association}
}

@book{botsch2010PMP,
Expand Down
54 changes: 54 additions & 0 deletions Installation/include/CGAL/license/Polygon_mesh_processing/acvd.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Copyright (c) 2016 GeometryFactory SARL (France).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org)
//
// $URL$
// $Id$
// SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial
//
// Author(s) : Andreas Fabri
//
// Warning: this file is generated, see include/CGAL/license/README.md

#ifndef CGAL_LICENSE_POLYGON_MESH_PROCESSING_ACVD_H
#define CGAL_LICENSE_POLYGON_MESH_PROCESSING_ACVD_H

#include <CGAL/config.h>
#include <CGAL/license.h>

#ifdef CGAL_POLYGON_MESH_PROCESSING_ACVD_COMMERCIAL_LICENSE

# if CGAL_POLYGON_MESH_PROCESSING_ACVD_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE

# if defined(CGAL_LICENSE_WARNING)

CGAL_pragma_warning("Your commercial license for CGAL does not cover "
"this release of the Polygon Mesh Processing - ACVD remeshing package.")
# endif

# ifdef CGAL_LICENSE_ERROR
# error "Your commercial license for CGAL does not cover this release \
of the Polygon Mesh Processing - ACVD remeshing package. \
You get this error, as you defined CGAL_LICENSE_ERROR."
# endif // CGAL_LICENSE_ERROR

# endif // CGAL_POLYGON_MESH_PROCESSING_ACVD_COMMERCIAL_LICENSE < CGAL_RELEASE_DATE

#else // no CGAL_POLYGON_MESH_PROCESSING_ACVD_COMMERCIAL_LICENSE

# if defined(CGAL_LICENSE_WARNING)
CGAL_pragma_warning("\nThe macro CGAL_POLYGON_MESH_PROCESSING_ACVD_COMMERCIAL_LICENSE is not defined."
"\nYou use the CGAL Polygon Mesh Processing - ACVD remeshing package under "
"the terms of the GPLv3+.")
# endif // CGAL_LICENSE_WARNING

# ifdef CGAL_LICENSE_ERROR
# error "The macro CGAL_POLYGON_MESH_PROCESSING_ACVD_COMMERCIAL_LICENSE is not defined.\
You use the CGAL Polygon Mesh Processing - ACVD remeshing package under the terms of \
the GPLv3+. You get this error, as you defined CGAL_LICENSE_ERROR."
# endif // CGAL_LICENSE_ERROR

#endif // no CGAL_POLYGON_MESH_PROCESSING_ACVD_COMMERCIAL_LICENSE

#endif // CGAL_LICENSE_POLYGON_MESH_PROCESSING_ACVD_H
1 change: 1 addition & 0 deletions Installation/include/CGAL/license/gpl_package_list.txt
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ Polygon_mesh_processing/miscellaneous Polygon Mesh Processing - Miscellaneous
Polygon_mesh_processing/detect_features Polygon Mesh Processing - Feature Detection
Polygon_mesh_processing/collision_detection Polygon Mesh Processing - Collision Detection
Polygon_mesh_processing/autorefinement Polygon Mesh Processing - Autorefinement
Polygon_mesh_processing/acvd Polygon Mesh Processing - ACVD remeshing
Polyhedron 3D Polyhedral Surface
Polyline_simplification_2 2D Polyline Simplification
Polytope_distance_d Optimal Distances
Expand Down
128 changes: 128 additions & 0 deletions Lab/demo/Lab/Plugins/PMP/ACVD_remeshing_dialog.ui
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ACVDDialog</class>
<widget class="QDialog" name="ACVDDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>241</height>
</rect>
</property>
<property name="windowTitle">
<string>ACVD Remeshing</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_3">
<property name="text">
<string>Target number of Vertices (Clusters):</string>
</property>
</widget>
</item>
<item>
<widget class="DoubleEdit" name="nb_clusters_spin_box">
<property name="value" stdset="0">
<number>100</number>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Cluster Metric:</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="IsotropicClustering">
<property name="text">
<string>Isotropic Clustering</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="QEMClustering">
<property name="text">
<string>QEM Clustering</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QRadioButton" name="AnisotropicClustering">
<property name="text">
<string>Anisotropic Clustering</string>
</property>
<attribute name="buttonGroup">
<string notr="true">buttonGroup</string>
</attribute>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<customwidgets>
<customwidget>
<class>DoubleEdit</class>
<extends>QLineEdit</extends>
<header>CGAL_double_edit.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>ACVDDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>ACVDDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
<buttongroups>
<buttongroup name="buttonGroup"/>
</buttongroups>
</ui>
124 changes: 124 additions & 0 deletions Lab/demo/Lab/Plugins/PMP/ACVD_remeshing_plugin.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
#include <QtCore/qglobal.h>

#include "Messages_interface.h"
#include <CGAL/Three/CGAL_Lab_plugin_helper.h>
#include <CGAL/Three/Three.h>
#include "Scene_polyhedron_selection_item.h"
#include "ui_ACVD_remeshing_dialog.h"

#include "SMesh_type.h"
typedef Scene_surface_mesh_item Scene_facegraph_item;

#include <CGAL/iterator.h>
#include <CGAL/Polygon_mesh_processing/approximated_centroidal_Voronoi_diagram_remeshing.h>

#include <QElapsedTimer>
#include <QRadioButton>
#include <QCheckBox>
#include <QAction>
#include <QMainWindow>
#include <QApplication>
#include <QDockWidget>
#include <QEvent>
#include <QKeyEvent>
#include <QMouseEvent>
#include <QFileDialog>

#include <vector>
#include <algorithm>
#include <queue>

typedef Scene_facegraph_item::Face_graph FaceGraph;

using namespace CGAL::Three;
namespace PMP = CGAL::Polygon_mesh_processing;

class CGAL_Lab_acvd_remeshing_plugin :
public QObject,
public CGAL_Lab_plugin_helper
{
Q_OBJECT
Q_INTERFACES(CGAL::Three::CGAL_Lab_plugin_interface)
Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0" FILE "acvd_remeshing_plugin.json")
public:
bool applicable(QAction*) const {
return qobject_cast<Scene_facegraph_item*>(scene->item(scene->mainSelectionIndex()));
}
void print_message(QString message) { CGAL::Three::Three::information(message);}
QList<QAction*> actions() const { return QList<QAction*>() << actionACVD; }


void init(QMainWindow* mainWindow, CGAL::Three::Scene_interface* scene_interface, Messages_interface*) {
mw = mainWindow;
scene = scene_interface;
actionACVD = new QAction(tr(
"ACVD Remeshing"
), mw);
//actionACVD->setProperty("subMenuName", "");
if (actionACVD)
connect(actionACVD, SIGNAL(triggered()), this, SLOT(acvd_action()));
}

public Q_SLOTS:
void acvd_action() {

// Create dialog box
QDialog dialog(mw);
ui.setupUi(&dialog);

ui.nb_clusters_spin_box->setMinimum(10);
ui.nb_clusters_spin_box->setMaximum(1000000);
// get number of vertices of the mesh
Scene_facegraph_item* item = getSelectedItem<Scene_facegraph_item>();
if(!item) { return; }
// set default number of clusters to 5% of the number of vertices
ui.nb_clusters_spin_box->setValue((std::max)(item->face_graph()->number_of_faces() / 20, (unsigned int)10));

int i = dialog.exec();
if (i == QDialog::Rejected)
{
std::cout << "Remeshing aborted" << std::endl;
return;
}


Face_graph* graph = item->face_graph();
if(!graph) return;
QElapsedTimer time;
time.start();
CGAL::Three::Three::information("ACVD Remeshing...");


QApplication::setOverrideCursor(Qt::WaitCursor);
FaceGraph remeshed = *graph;

// TODO add post-processing

if (ui.IsotropicClustering->isChecked())
PMP::approximated_centroidal_Voronoi_diagram_remeshing(remeshed, ui.nb_clusters_spin_box->value());
else if (ui.QEMClustering->isChecked())
PMP::approximated_centroidal_Voronoi_diagram_remeshing(remeshed, ui.nb_clusters_spin_box->value(), CGAL::parameters::use_qem_based_energy(true));
else
PMP::approximated_centroidal_Voronoi_diagram_remeshing(remeshed, ui.nb_clusters_spin_box->value(), CGAL::parameters::gradation_factor(0.8));

// update the scene
CGAL::Three::Three::information(QString("ok (%1 ms)").arg(time.elapsed()));
QApplication::restoreOverrideCursor();
item->invalidateOpenGLBuffers();

// add the simplified mesh to the scene
Scene_facegraph_item* remeshed_item = new Scene_facegraph_item(remeshed);
remeshed_item->setName(QString(item->name() + "_simplified"));
scene->addItem(remeshed_item);
remeshed_item->invalidateOpenGLBuffers();
scene->itemChanged(remeshed_item);
item->setVisible(false);
}

private:
QAction* actionACVD;
Ui::ACVDDialog ui;
}; // end CGAL_Lab_acvd_remeshing_plugin


#include "ACVD_remeshing_plugin.moc"
5 changes: 5 additions & 0 deletions Lab/demo/Lab/Plugins/PMP/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ target_link_libraries(extrude_plugin PRIVATE scene_surface_mesh_item

if(TARGET CGAL::Eigen3_support)
if("${EIGEN3_VERSION}" VERSION_GREATER "3.1.90")

qt6_wrap_ui( acvd_remeshingUI_FILES ACVD_remeshing_dialog.ui)
cgal_lab_plugin(acvd_remeshing_plugin ACVD_remeshing_plugin ${acvd_remeshingUI_FILES} KEYWORDS PMP)
target_link_libraries(acvd_remeshing_plugin PUBLIC scene_surface_mesh_item scene_points_with_normal_item scene_polygon_soup_item CGAL::Eigen3_support)

qt6_wrap_ui( hole_fillingUI_FILES Hole_filling_widget.ui)
cgal_lab_plugin(hole_filling_plugin Hole_filling_plugin ${hole_fillingUI_FILES} KEYWORDS PMP)
target_link_libraries(hole_filling_plugin PRIVATE scene_surface_mesh_item scene_polylines_item scene_selection_item CGAL::Eigen3_support)
Expand Down
Loading
Loading