From b352f28627c43eb33b7ae14eb4c85102252f70fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Mon, 3 Jun 2024 18:06:21 +0200 Subject: [PATCH 1/9] deprecate Surface_mesher package --- Installation/CHANGES.md | 5 +++++ .../doc/Surface_mesher/PackageDescription.txt | 3 +++ .../doc/Surface_mesher/Surface_mesher.txt | 2 ++ .../doc/Surface_mesher/dependencies | 1 + .../fig/segmented_head-small.png | Bin 25795 -> 20619 bytes .../include/CGAL/AABB_polyhedral_oracle.h | 4 ++++ .../CGAL/Complex_2_in_triangulation_3.h | 5 +++++ .../Complex_2_in_triangulation_cell_base_3.h | 5 +++++ ...Complex_2_in_triangulation_vertex_base_3.h | 5 ++++- .../include/CGAL/Gray_level_image_3.h | 4 ++++ ...Complex_2_in_triangulation_3_file_writer.h | 5 +++++ ..._2_in_triangulation_3_polyhedron_builder.h | 5 +++++ .../Complex_2_in_triangulation_3_to_medit.h | 5 +++++ .../IO/Complex_2_in_triangulation_3_to_vtk.h | 5 +++++ .../IO/facets_in_complex_2_to_triangle_mesh.h | 5 +++++ .../IO/output_surface_facets_to_polyhedron.h | 5 +++++ .../include/CGAL/Implicit_surface_3.h | 5 +++++ Surface_mesher/include/CGAL/Multi_surface_3.h | 5 +++++ Surface_mesher/include/CGAL/Point_traits.h | 4 ++++ .../CGAL/Point_with_psc_localisation.h | 4 ++++ .../include/CGAL/Point_with_surface_index.h | 4 ++++ .../Point_with_surface_index_geom_traits.h | 4 ++++ .../CGAL/Robust_circumcenter_traits_3.h | 4 ++++ .../include/CGAL/Surface_mesh_cell_base_3.h | 5 +++++ ...urface_mesh_complex_2_in_triangulation_3.h | 5 +++++ .../CGAL/Surface_mesh_default_criteria_3.h | 4 ++++ .../Surface_mesh_default_edges_criteria_3.h | 4 ++++ .../Surface_mesh_default_triangulation_3.h | 5 +++++ .../CGAL/Surface_mesh_traits_generator_3.h | 4 ++++ .../Surface_mesh_triangulation_generator_3.h | 4 ++++ .../include/CGAL/Surface_mesh_vertex_base_3.h | 4 ++++ .../CGAL/Surface_mesher/Combining_oracle.h | 5 +++++ .../include/CGAL/Surface_mesher/Has_edges.h | 4 ++++ .../Implicit_surface_oracle_3.h | 5 +++++ .../Intersection_data_structure_3.h | 4 ++++ .../CGAL/Surface_mesher/Null_oracle_visitor.h | 4 ++++ .../Point_surface_indices_oracle_visitor.h | 4 ++++ .../CGAL/Surface_mesher/Polyhedral_oracle.h | 4 ++++ .../CGAL/Surface_mesher/Profile_counter.h | 4 ++++ .../CGAL/Surface_mesher/Profile_timer.h | 5 +++++ .../CGAL/Surface_mesher/Sphere_oracle_3.h | 5 +++++ .../CGAL/Surface_mesher/Standard_criteria.h | 4 ++++ .../CGAL/Surface_mesher/Surface_mesher.h | 5 +++++ .../Surface_mesher_edges_level.h | 4 ++++ .../Surface_mesher_edges_level_visitor.h | 4 ++++ .../Surface_mesher/Surface_mesher_manifold.h | 5 +++++ .../Surface_mesher_regular_edges.h | 5 +++++ .../Surface_mesher/Surface_mesher_visitor.h | 4 ++++ .../CGAL/Surface_mesher/Types_generators.h | 4 ++++ .../CGAL/Surface_mesher/Verbose_flag.h | 4 ++++ ...rtices_on_the_same_psc_element_criterion.h | 4 ++++ .../Vertices_on_the_same_surface_criterion.h | 4 ++++ .../include/CGAL/Surface_mesher_generator.h | 4 ++++ .../CGAL/make_piecewise_smooth_surface_mesh.h | 5 +++++ .../include/CGAL/make_surface_mesh.h | 4 ++++ .../CGAL/vtkSurfaceMesherContourFilter.h | 4 ++++ 56 files changed, 236 insertions(+), 1 deletion(-) diff --git a/Installation/CHANGES.md b/Installation/CHANGES.md index 6c8befb902b..7e3b0205295 100644 --- a/Installation/CHANGES.md +++ b/Installation/CHANGES.md @@ -226,6 +226,11 @@ Release date: June 2024 - **Breaking change**: Removed the class templates `CGAL::Gray_image_mesh_domain_3`, `CGAL::Implicit_mesh_domain_3`, and `CGAL::Labeled_image_mesh_domain_3`, which were deprecated since CGAL-4.13. +### [3D Surface Mesh Generation](https://doc.cgal.org/6.0/Manual/packages.html#PkgSurfaceMesher3) + +- This package is deprecated and the package [3D Mesh Generation](https://doc.cgal.org/6.0/Manual/packages.html#PkgMesh3) should + be used instead. + ### [Surface Mesh Parameterization](https://doc.cgal.org/6.0/Manual/packages.html#PkgSurfaceMeshParameterization) - **Breaking change**: The method [`CGAL::Surface_mesh_parameterization::LSCM_parameterizer_3`](https://doc.cgal.org/6.0/Surface_mesh_parameterization/classCGAL_1_1Surface__mesh__parameterization_1_1LSCM__parameterizer__3.html) diff --git a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt index bf46b3a6eba..45a90589a1f 100644 --- a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt +++ b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt @@ -41,6 +41,9 @@ \cgalPkgShortInfoEnd \cgalPkgDescriptionEnd +\deprecated This package is deprecated since the version 6.0 of \cgal. The package \ref PkgMesh3 should be used instead. + + The surface mesh generation package offers a function template which builds a triangular mesh approximating a surface. diff --git a/Surface_mesher/doc/Surface_mesher/Surface_mesher.txt b/Surface_mesher/doc/Surface_mesher/Surface_mesher.txt index 5414f94f131..658dc7bae53 100644 --- a/Surface_mesher/doc/Surface_mesher/Surface_mesher.txt +++ b/Surface_mesher/doc/Surface_mesher/Surface_mesher.txt @@ -11,6 +11,8 @@ namespace CGAL { \image html segmented_head.png \image latex segmented_head.png +\deprecated This package is deprecated since the version 6.0 of \cgal. The package \ref PkgMesh3 should be used instead. + \section SurfaceMesher_section_intro Introduction This package provides a function template diff --git a/Surface_mesher/doc/Surface_mesher/dependencies b/Surface_mesher/doc/Surface_mesher/dependencies index c0330a78330..a122f2fc7ba 100644 --- a/Surface_mesher/doc/Surface_mesher/dependencies +++ b/Surface_mesher/doc/Surface_mesher/dependencies @@ -6,4 +6,5 @@ Circulator Stream_support Triangulation_2 Triangulation_3 +Mesh_3 Polyhedron diff --git a/Surface_mesher/doc/Surface_mesher/fig/segmented_head-small.png b/Surface_mesher/doc/Surface_mesher/fig/segmented_head-small.png index e42950336e074f6ac9d01409df15182b961d4f7d..038424ea3930246ecb64d1b694308fcca7b37c2a 100644 GIT binary patch literal 20619 zcmeFZcT|(zwl4mLKxmWl&4X?$F6digP(|r8@P42Fp_z!@^&PibI&C zbyMkfyd^1A)N6aCO^(hgSOzdHB4u8rb)}3`Gi4hmN7t9A)OVuTo>G;wa7f3lft-W6 zmmHT*!?#F$zMGAzfBPb<7(8GCZ<8swhl^AqwYru=p=PNu%(`bK9Ih$a@I1LP!;1B4 zr2%0H7Bc1w7ScQd08p5NqN1+4qT+wJgLfi3C{aeO8^QF+(zKC1h4Lx&dP0HZ4`pSq z3d4H};kw)n8&)3cbixj5`esZ-6VF3$MH>>+*_kt&5y}4sfBey@KBTO1ZmDm7ZL!l` zZgwVMx($5Z$Mvu;moVQkHBtRexLL3vN&9OmP?$h;*+;D)of{*+nJkZg?;i5?*MAte zkbtB-{|e+GvaMQ?*IcO|xSB|=2K^-A)+F1N*lm`l;|N}A{k6xqn$#VfOD|BD;rEl| zt?q_(OSJJ1-4~@%sF&q>?Q*MiU4GH^CRO!EGAHDUM9%1pP2oZ{vG zPKCxsyw7Q{WUw1>VI(J<9elCS&-OwOt<9~M{Kt|~E>{0i- zj(F$y-UNiX&$z1=Yeb%9JQ!wV=6y;S*7PiTGmdiylqQA!oyHPIvgK^t42NAPi+sU@nPrdfDbPt zZ7oTZt1}0l=j-f-k2?U6mh*K(qMXoPtk!5d2NxOko%bE=tPVCZ?2kpX;o5GB zXnO}We-HFSe;osqzY|KrhFwmUOxjlx58#aULbCcgKXLJt^p#=%8&?wl{;y_!cGkZ| zyqsj%jkI-H6j`A-(`eDM1s-S`Fg;QY?c{Qs`u>81P>5Asig{dg4bF_%B1Ms%z{1 zOXDvJ>>Qlk{?@{i{a+-#9BluStp8%$Up;@j^Y4b>)&GV2U!?!T_rHblQrg;*O0FpH zzsyrtl41XAd`TNul!J}r-*1s{2?=2_8!=wEjj#l-u#K%SuY?#L4LSkrP z5kd67K|Jtqz(*zW$-i6m7nBVi$`&nbYlA{c@Y+fUAbEv_B_w#QZLKAE;UYG+NVv6_ zkO=A@P&Oz@6;}^uBz`&_oRM~Dem57pzsLBCa7lSxbs2U+KKOsO=srPu+2R#s*tHy7 zynX+(!@$8A{m={f7n=fN0%F2Ka8U`kr~n);Ec~BBkI){T_(=Q3=!i6P8;M{OQN%+6XyV^L|`u(4z|5`k((*KxpH3v`p_K~U+9R6NPtgL@83P~jDA1-(zpQ3I4wiA!_k1muw(!~yq&mR8_*Z*jD_}_$rkf5yu zQVea&Ybyp9;1w2y+we-D#NoU)f)b*FXe3hH8vg%7_jI-O@_y=igkh z-uru^?*CU?eC*MG%>te!R!5_4WGR5 zxsd-~$?%_?{grn9AAbFFF8&{mfQSB{LH=9({tsRML)U+cf&Z59|3ugS(DmP9;J+pO zKhgDnjV`kPJWioq@Kulx{;*VcF&2YAXpy?98G8Z%`SrhkKtN_T4BtrXrLL_^yaoYN z6ACg`SRCS;Al90yO2Eut--kCzasU7!qOK%w;5)gML)>g`ICM-k{&TJ-FML^Zb04`HR$mwa}(C+#luRuvz=DfHEpGy}<@R#SV zr??=`#Vw(^@jtHZ@g^0!J(MrcBQcVtyFDVQ)x+PPsu#X}P(Sp?+qCel-4r9EDZif+ zs*jSaElw_)A$AP>i_baMP{-t*2Fl1mnB~}L+#cHRKK&Dzk$*E$x^y{bi%OYOGKpOA zWwn~UnZWN7ptv}CKI3DIN(soS5awLX1f85!Fy9DZ4oVf7J;+^QWC$TmxL%la%igqj zw+VAnoZ)I;DO0+e>cj6+xi`f09`eVc`0Y2dqJSTaj8Yx>J-s2=(yFQ|Nm@QLBNo4< z#5%9_;nH(ir}0XUA!WLh>kp*gp6};f@yxvU;Ri#Y_u^%ajJ&t%(7ok_Kc2Lo=2+I| z3!feHFZWvVq341$r*eEAt$rgz*_+lCy}Fyn<4k8^^expi^JT^OfU-i9fLxtRMD%n5td!OYl z-=42O2;u6uy4b0>3c1|ROPleTYdilPDaSK+vF+3A)4rdxHjV=j$OHqi<5y6zBYxAEuO2XC;O{uk+*`Iak(;QX!^%O424ko zI;QEZcihYGrVzi0W+qaD4QK)f<%^w1%a)znSU@a7wp#1M#hOI3xdGe8AP53Ddp~zk zElD-6dMn7wJ3lz&u)@+1;SOxahnz1yCB2$GZhtI52;lG300%W87fvVLw=Q+n|0Jri z7+>`HT{}XdVNa|v1Yx`&M?kk@42k!%By$n zLA`ZwRnzo#{q-6;4BPiIw>$fHHuj=!$CV-UH-I(%kP}UblcnU|H>J5I{o;!;8qeQ9 z-7-;!PY|#Se{;uzh+oMZeJ^CTHxSIqXnVqb2q485c1eLK-?@g(&1&p|@q98XVSw)eQP zVSt(>R>*aqk+o3%Po5q7?tykmfqAaqueYC5ovK?(piJVmJSGim>!_G(-?L>e<{%k< z445oGm-+{J!?=UD`UEjI1C~=Br=sE{O4vD+l-U!^NP6bf=&cZDMMp)+I^_oUKN^m) zt5Y-0H|Khm|5l`uX^^xJT?Kxwm*!c3!biVxO!vwFU+2m;TxMDgtvoJ?<^ISYG7=9g zGhLid&0Rh^jJ)y_H6e_U+$byj_VZJ8o(r!Xm!Hb!u`&kd3YfMZ6c0xv()Jj?0a(Ob z%#@8V3y5$9#Hu(4!R?p(Fe$Y>D8|uSb}4%!X&(+E9AA6BR%X89z`+Cuj=QL-0Z`Ot z$`f9<$rYx75~_yS74fA6#d1$+;&~)BcG>v6N_5_&r&Fl>j%h_>wjKPq-NrlTXj1Ta zwX>MM$JtionNp1~Fy}KDbn_Z(&m4-B>!zEGmE!m7I^qS{9^dYdd8?6s{D~;fiEN>B zV--%KK$wxgrII`Ut+7nN<;>O@c-yc{kAvQ-p;oVcy0iz-#oOUH?GPI5(H8Tm{(;n1 zLwOCZo9C-9-|9N}I4{MH_p29sGf#N#h)FPILPpPIU7*uSMsJ=ELyWO0 zdy5(wrt6UUCV_%Ydm%z#cGv4>ux_BhRJ*s(LclyCk)9PX z;ji|@Iy|vPf|RLJG2N#hRO4Avp617w*)$LawG~))2y$vQt%Y2c;x4~`{`P6gKL8XA8o4TD=!e=$CLG+*87=n&C4Wr3mFGz7y|0m85^{oZb}AAMp2`XyEk z!sN#ajuKR2?{N?=lH4S5cb8(nlf5V@t=At72VwwmwRTGA<1+Vd$QM}&Sk-l-MGDuu!$kuU-N^rIRW);Awe+R@wmKw7}c3JB>& zk-0HZAAH#FuhCwBh*&z-pokbW`@DlG@+UId1}j}o{85m~|LMnfp@3TZ zt-Cxzi+lboVriHkv+UYP*fCZb38uY+h(cl%e?5{5sayAg+ER|3R(=s&r?LrVC(>&8M)qq8%fjw z{1$sSH7Wb;YuUtvGZE9|ZzYiyE8^Q2FJ4BBTf?0?b8@>xMn{1k9pzzQviN8z0nlD|q^=`Q`Cem&f zI{rOUc@aupra5=MBFH=JC!ap=B#_y@8|!KiWLf*#jx3>2*@CAT&t4f1Kmdg@8Ss4^ z&Y+sG^d2+3$wn_s^ZI5?BiTLbbXQDRlo}Pr@rHzDtJ#9CDUj=V-wI0&e7;b-3+-(5 zZPXq3PN*ThwZRKUR9ZvDPJ!=gg3dyGlPl7=Kx9leX^YG5Bh!?#*UFHk%llGWqm&-U zlg|G3sUbejAKZ;k$D2|eZe6;qr!?{mL_SO0Gk^M{*!t*>QoM=Wzyi+q6DT)<^j70b zjZjuKlCVe^rtd@4D>wq9^wKP(>#dp?p>4j&7&W~vE6cE=)O2Z$u_^=#4*e~qmEXEz zk{)`teqD!raw(r8%~D!ZyC8)^(QR#MKDhEMSRmWVU}EW@Bhx?lq(abUHK+F{AnFs% z`z;m;oDR!D1-DG+9En?0IlOF&8VP)6ynBg^B|8(;L?Y;dI!P{qV1*A5!4k5uX{hzW zfwX6e2I8|VWQLG5MJ*uAKHIL^#trkVXnkU=F^Ukx5^)0;dhnZ3>!W-YK$QTKHzU?# zlMI@dCR8MQTZRM>BYQ_alS?5mYWT^FUzR(oHh^0&$#CCeTs%>1zz)LnOnSvia%S}= z(#$;6$9CkAmG=|%5xLiO)7mb!(32)kDf>-R)qyg{0*}_@VfeEslS)22$4_Gdji>ZmI=SP#iZe!xeXFiRxe6lK%|2fvR7OBbAWPJCeA;0)g3{fnI}8j zB!lGc91%t^CdG|ouAQx%ew}*q@Yx67!?9k>IYqM?Zw$m4Ml~Pz!*+9{^**DsL2HCS ziCpr|=@wc7_{?6H2!&IUyQT*t7$32RZ0q6Nh)YL@398pPWA zYYGHLjhf_zJPM|;I3zgA=HS65IgLgSM(x_XY(hf#GgK5E|gf*fggD-?-XbTQxB#+F**m z0SHnNR09mz@S{!rC{evdj5ecL$PaXyA@Q*%e-MO_$L2J0X%jg@S51|D2|%!W$N1F8 zW_hAP#S3O>W*Ux;aez<-Do<*I%bAk}LC%QzbWih#l zbHThnyHdyRH-HkT6GP`%$(#pSVqQ;>sVg}msf%9hA6#Eq#3W!URsbs!O(}T!rR$`u zV8>j`lnZ(&Qr2L_XTzXmVt@0O>y}A`l1w+ELH(9##?ZR~jevL+g%-Om&a7ADh2=!Y zyF3~FCwplXX9e_>Oq8P%48I(lmL8K?3DU<@4myxf=n3nJvvOwlPLm93NOs8UdcF~7 zEsA-@As~)b2zvc8qu%`q_C|j}E45*jS+vNO-=sjWrYVD`36{Y~jkf$o&w_t&A;07G zc63p7%TXMB`6o=>Q*_JBMLVl(Tvg~3Fj#5y)hCkP7$W$z^OFELS-q?JMDS` z_w*yY;FLkrklROPtMcvfy=~ov&a^}cKQ?PDU3BE$GX-cBU-R#g3=xJ}yxA<9nJVP{ z!d7SrXBlvFv|^H8eGQM_$dqV$EK|HYy)#;V7OgiE(|veBDfLU2bb=cKe^ZR(JsZoV z7rLjb>Xoen#6jX0B%%@H<94o&2SvU+^koaO2RNV(p~kGwom8Z)%nFOOr2=ms z^28>v0$|qU-BB7$@9>Kww)WsB91nUKRSKLNw3?{>Jc?YNayTPkr_Fr5HAFny9jp^_ zOjca#aT?6@Z-{J8LC&?LR*+NT?nkoQ2b;N-e#W;(R0+e2nVrj_ETsF zqF4(pmha?{bQL`jk0wp}W=&#Z=3$s%>+6GIhfX1vO+lhAMWy!G69NJzDkC^K;ettS z-v#we(gi;_xnt~{M5I9Y(jw)uY<02BC=+gZlC~lweHPu9*nOCk!WxxRjY+}hFpttj8z}x!jc)cP2M1vhQ z_K%UFyPNEd=adTo#%>LRh(&=I2Z@37D5vzR<~bvHPfAkdfr9R&ax0J@a&?(fIOlq* zZ;Vy*=s9`cnpd(0e_F!Y^F`>;vpf595kE@yxaFxjOZH_a37qBFT`mTE+g)ZPu4f^w z`$h??04F6Z)UN)O!gHUOALrb0uR{vXnn?C@VRzwQIHtmqANU2s0F2^Ld@iJ6RM$pkf&#DQ|_fi3Agekc(feryjX# z-Kyyul9{*#v%YHA84i78<(vDAHgv%|WG}{r{`e0}6C-^)pCYz_=8-VYo`r5MhIGDw z5kxF}&G|QDP$Xzg?qJ1)BcmNp-jp9!VT@IVI>j$KEJefCux?ZvRNBvl6{UkqZ%x;%QgAN$XOQQoKLnj_ zlpQSu>=>@#52@(!lC0E7g7Ln&b6W}CMez~~Dxu)?!6G0%=A9pC+1@W)X}2KJ z;4Nm+m|KPv-SVoZO2VWfeSbuRMQWQNE31+#ONm97AIyO6s#7;V@ldc03#0&K^n#EF zi=MUlop~Zj*8CaKu@NPz8-nS?N;EuW%auhN(3cN+*9aK58@2#8Pcrx4B-{3hVoo>0}c1j5g1 zBLo2V-?uYx9k_soo%8C`Reu<*2xT+Oy6VItg;6+3LK>BOJQSb$LTcLx@@X5kkFT`X zO`qt|R_}HSqU-y?3@Z=8$bZE@+j@B9NE?J8Wr4Uwve-Y_6d5^}*N2{_3Ve)DTL zW>DMR1^p?3?>1CE$ium-=Z5G59nv`8op)2I_p_epuMnQoGd|JX9=HN4{7Qats6yt) z8M&aGelZ+#l6i2Q)8?02?XC;z=ecuh^^{kB0o0X}p}~gqFdWXLLbup@vXW&fiKUJ` z`SeRA3fNr(zzaS;036`>7^8R_0T9_SasYrqRm+fBjqnhQ*3W#L_V|kdR}6+$oradbW+gXJ_MLnuR19A5G#FJLW?2D*Suw*W0)?u2yUj6*I2eetDcCr`?-N?OB| zR1iz1gx@!OeN5z3V@|6SB)7NzAWfc4+G%QTwe@ zD`0y5QxF`I9j9~~NzL$FYW23?bhj7gU49S;p*Ih<{P#GM?S4rjY#V(NrrbYH6S!`2 z5~JPAyyBiS&F@T2mVMJfh9iH-uFcv$;+ozNu7*kTv1Qw-#a^{fN&(2qYSNZzu-rOb zIxAr9u5Ncc1*7=dMq| zB8i@7K74`!;))9`oLF<5`jP;*dQljOgf=Gnn+?kt=4Y1E`*DFsxxI%N?D;3Zb~HO8 zy#BC6fI|FcKC=;>qW!S>dZB|PF`5Tn5_dDWaNsU_8m0JwXtV0E3psNuI?&K7Mi<%B z$g2Oo%yU(ci@+^NxNi++TQ7U~Mi5mP`|Ud>!~l`+>UeFfjO>x;pykEM;0=baPwcN} zGXn2D8%U}()-*|IV?Vai_cA)DCONqNATw2G9H67|@}v{%bzf1S9}}R@?r#xAQ>(Fr z4qyLt$QMb-On`8!GOn)pS+x)-{#_b%xr#k4mVtpBR>his%v|$N6K|%(3{hjEN4u0T z2a#q0_M{7x-GsJ(i2O0442@u974UPq)*uMh(emy;&hfUqngJc6^qWD@|c0Xg_ zRTcgyon(aRdEe-~5;EQgvv~h03gyD`zUy83YECE!ssPSk7gxJhuC(})Qt)%WBn8Ks z>yZV-N+;#5#iTWBwQ}Dxj~c!SwkjsffcwSa#N&xfn$XFShdnzb(*%`H)|9ye_2nGx z4ME-j^W~4KZ$vK6yBS*O)-HjQ*L#5ysQqzcH8Wv@D?3iZ?>H~XsUk!Ypx7M}Ap^x%4r%1eo6 zN{7f7mZMBDujHRZLG!6!x{_4>&>?1H$}S)2ntz^E3Q|CIiQHAPn%BteWk_R$8jxpn z7JdVzOWU;BnW26H5y=ub|B>m5-bU)JBKVNG-Wwr;UkCA(rahlESXxJPmh05^NgEdy zgE>m_E+3oesVrTdNNwxde)ceL80tX};kTrP^~DUoxB^68uW!Ts@5T$DFGkyg8YS1C zbQdrUGD3ukUdV@!Dwq-yNHU74f)NkHpcuL1mI1>cUwPo++;f$|9qA~_mTe}M$0>g3LtZafGQ7mJ{U#{Tb{GnVw{R6$9 z1n*?+NjeYjF70$KoVILMKD7Pl)+(?+@rIr;$?lYU!29g3b8Y43wUVqvky^-D?X+SD zz0hQ2JKGz$3}#4m#lI7ENoQ4Qei_k8&o4Yr?_yY-$H{@UAEc8sa(RA-JO8#3yooes zFy|zFE|1R2Iu1v{1T6Ox?7vFXUwK$GvV0A^{Gp#T?G9&Ef%O_JhhTnO+XR|m2fH~; zCc5q9B0Sk`c6VEVka%(ZcBC&gliLhO&&h>iK6l8U&^?>+TA{jw7UW!z#vI%s{(za) zn6Yryie*))LF2Hp!QFDD>C?_d2-!Bl)AKsE81a$?6I)(Hl053bic2lac|dNFr`KJV`OuKdhB`(@r5d2RYZ zFc-v*k9H?rs-63p80wnsQ zw~N#NP4f>}vHC`~s)$DpBz^X7)bfhM%crsgB<3+@b{lc~nG#rdXyWbk zPp_DnnHXsJ+I(fNz;)yIf&`#yrjAUW6<+kirQne?kYCR6KvnG*NnZ)Wc z!((nz8`Bi{8kv0{b}evCi@91OR~wfTEtUw|h=XShAMC(pSFZ^AO1vgO1k{#+p3w-uYpt$<<6r+|WIe zw%NVDKW!UP;>5VcDPY=Pm9uE z?6r)Qp#5q)=f#&4UfsKl41=F3-F?D8A)yo=`~~tDC4Ep@N1}cy^{Cj^Z$>P8+qCD1 zwwMgFRra`vJvC+5BO2Y$9(s=<#H^fD!{P+6CZkFDOWR-%3f@|^JA?ux*!fBi)L_21 z&ud1U{eU!l!~sYJ4U1I^a5&U4hlz8=2*c;EF*DR(94*^_czk$?Odc=|>bA}Lef)!M z+Ta{#T<-PtiY~;i$pbm5>LhT*PTl_rm~Pa`DIS2o`%3Hx*VMD0Xy$3KA%u1Z9WXKw zFkwLOByv$fP82W?c5J%WFmGZY?s+u=*yfKX5x_4BRAfywS--Q@)3d(ng(_M=XJd$0 zZmisa;IL*{CU7F}kLTex>if|wf;qJLren+lCCSaZQ z34mBu471iRg_DVX8~(@^a*&_;m@T;Sv`?}GV=W)VEbT0 z_D}`gK0{QqF_`D55;;WI?w!8*wu?sTVi-vRMNs2NXu^~?>?b@ZaHwkYnSf1Om+LDt zdF1Xu+8l_M6Ina@vH7-AdSdb5;rhVWb>avroQFsHVJ@}9_-8o_6(yRu>Jbaj3p+ub zQw-z{4YB_rpIGUwhYFQ%kS{$2SGOM0y%0d=x;vQ(>}>ee&qt4>+{rbQM+l|s+z$h} zO|X0Sl)n{&@q0EHr(mKd$WXmAu`U%NE^)6sWiEWlutIkIPx2lon)&?9=={=s0!;eJ(~z1~Z>_Bj}49zrVf<&opMEwE^kEhFTwmyu9&vN*!o=SR~eQRiy(~kU~6p z@@#)ERzxNsy05oOZMn?M$0dD!EwiBZc|aJOzv{(lRG#1j8miFp9+x!6@H-=yG=`O`2}a)b4=( z$!qk4@Z#^beYRj$0a=msm`!jqIQpIn-$w=1;S298MW>XOx36Bncqi=(1%;dj+}G#& zkdD6~!Z)F+9k~8ccclL{l*j#2uE!fDr8LE61I&>MU4N=FiDm4sW5yD;^F z-EL{<1cCEQ3LZ#d!&=v%#H?WIBvdVncYb0qDqm#kL4I@Ii6K>j!`)VX`us*AgAtRo zlCalF3$oBEu5b}r5eDqm8#7bm*7fc|Xn&i+#p}%A=Z9vl%p&!5KGk;^gvA%%kQGB= zx(<2K{`d`#1a+i&D>5<))rCPRd^{VOL+Zt+t;klZdSuv1OpKa3`WSVbz$7~gI*Jm`N z=AC=EG&$ zBq4<`M#Z8}Z=>8Lp#w~Zh4$n@R?r(+bg&;=WL0 z4>VKRX}4!zOX9Cy)K>w4aB~dvpf{=FL#%gGXg|fpD9l)kdkg4xk09#nP+%T1#tfZ+Cf4tGn3lY!*ZSmc z8Zpnf;W5&5jVt-*QI*iOocA+Zs#4TY%*;<~8gZqKG$+n6iO&zhvI0s%Xt|1a=)$mt z`%+N2&_@^(sTHNl@@uwi#S=yc0nKDPhKXf3&W=(9DBM2Dnxhw6Ty|~x{To^h=4hIL z(Jp`3w53qH&K9#}ast>soomPtoCY(yBR%4rzMjrYra$ZGgvQgIy=Nci7|6=zN&} zF)&-Q@3dIqRP;J&`naP5M;2*mS`l0?p?xw_G0XqS$i}EBx;rXvgN6M4O)Cz@gvym} zqZTSSi0Lq{s5`%e$z7(G^$DoDiHRta03y`BrK4ycVe{yd#jt84bI;Ay0`Ru5Nwt=g;T!fkHWYF;_g#XSCY#4CEd>R$yucmHyTrq^ z0}u`&ZqwtNj04`DIon2QvYZoA#3-Z8M}$K8^wZBk-y6_|WK4810 zl;8n*8fBL=jJDifh}N%`o`JJAgVSk4%c-Y5BjJ4e5iMk$R(H~|N_>@tb4*V;8&^ED zAEcAM(crcsCj=`ZQ9zW{Z^p#rf{^EwQal5Cap)k+9Hhhc^@-tl7q;oO*1)b&{KmOD zrpGt=@Ht`Z)lAYzt5g^3vqKr-dj%;eq|<3cIbN3R)PpzOBnD{@=3-q1pNS{}X$}F(U}hsQsxP1CM`_cSr1zXoU@j{uYLd9Ivc)+}=!+dF zlp01I;+bbPTyln7k94fw6Iogsp&~M9vn@jXa=`fju987dGiu)RwMM&5e1!a*S)f_~Li_imFd4ztW-vqY>-n7c0&x1<{*p%heTU=k(_-ul zNS7k#{s_iLZ$yR0jZ1m@rzJ&_Ci#zr;FC6#p#pvu$1w{9{+~M=Fh82&L~ggBP=1fb zp2+ScdIT3KeDy-L-dxS-PVWWu=W6mze`%|RPpJh;M79%h#B`XFXAAmdbr50Ux31oA z-DCsQic;-b{gL#9^RP!o17-G@Rk2fOGD0Yp8{tZvZqhHg!z*lS$RxSUdC!1(&c$K{ zQ`Vl^!+x7ugSeT06oX;lcB?SehusSm#!|jbj9To5cPk1{hkJ_7y^bMKn^^UuvqLPt zAw9V~Hhi%bR48ILZe)(RJp9sl-Pe%G(Knh`;|dTG-O&6h!|&Y8*FI&YIH!m5M+m-_?!)fUDnD~`VFzo8CAXx8N>t{$ zjJ`OcBCQQA48HeEf`4;DYJXZ*d`U5^yUUGkW%9m+Tu?>TH*bg4QGcr1Yb>yr9f>yb z7R@V}TS-&z`99hXV)b=2I2Oa!0W4jBQPm@D;y;j^R@S@@LTV-zSAIZ)$a@~0!l7kH zLQ(^hJ}x3NAEERTaDsHVHU=~B>`vcXL;HPu^X-lW#-7TX4sa~Z^tW z=fKesoZ3(AvNj;tNakkq3DkDs>?6E4z13jo)!{@9$3*6EtBzqe(>PASl)g^rTX@m# zmXqgNv=pleYVH)0J<+JCl{z?p-M}8o&J*y=vo+#s)Hq-KDznBKiUcq_nssa5YTLE0 zZh9WrJ^2_%e;P28IDe#>ygV!9vr$ z`N6F@YjLff>qiV_y*SYIQjD4!!Ski(d&Z-Kjx$@))78zxO7fL@o+w8KIG5#vl=l<` z0vG~TJ$B01N|+a#G;Scq^(8TTG&bTb1NTZWmbkaHs863JJqwo)fACd{qJL9Tc%zTeXN`=wem!JipD+JCTI3+)&tb1 z&)l}_#vXA;j~f-@F8_S)ecmW*ko)W4&7Lla$3w*CO>8{-r_$=X=Gr217sdg#Oc01! zl$F}R&t;Q??Hg`$^%0yVJp_W2EPU5z&={^JXdw!0la|58Nixx_(ym1$iksMw4A%?d%~g7O z_gNfc1wdM>&$HH0SopEAp;re+>8LNV}zv%*XT*%yVXAZ+W0d7 z+0r|)wzs&LR~9$O>n5emA2$rid&0fBM@qL(F3O?jOVnhBmB(LUjSlblzS@}Vf1@n# z-DQNJq33<+_zh_N?d22g8iAjSl%cm8KWM1Z@dvp*jxu#Plt7tfT$wG~MB36mE0jq? z9wa;IE#ye~RJ*|htUr3Dxw&;cCC-0q)qBvp?iEJ~GuAKm)vZ?(Dtj-!&=Pe{X;={ zHB{-@grVDd6U)8*d|th%R}4Ol*3bCY>eR}A6fyX_P&fx!3TVm*$Bl&xe+-NTZLJjx zz3CGBfDMG{0O#SSecWc`%)CuDL*6~BsqC0#MAuhz$RxRRE~%9y;pdDYDXX7CIR$_nM=g1ow?tT!)H#=W1gsjzg0*>GJDy}Q$ zVaNga$BZHBhZ`bWMS*#S9l$V2LNUxNSDvub+Z^X@PjyP=PN8hl-F=d`YqF!k_%Td^ z*HR?W^dZtVRj*79;KYKyKl+M3w?{;erk6&nfUV4v)b2b-rT9`#KKf0~6T=Gw{P!}? z=*(1Jc&NAjFz8E#h{9YNC03E<(U=X!9@aP({)-AF_dj`bBD2>KySjaG8_bzH7CBCQ z-?02zQ)1!v7-@dT)l2I92T{ehubwx^G(MG=%|7`v>MuD&=3*Eb17crKun$^nihLt% zi!dqaIxIgcHWOr!5G*P`tQ_ePW&ym8WpzTjFx#P`bBu$7!fI7I(DsZ|FY!*M7-mj{ zGq^kj&4xQTDOM4k{FIorqr*Rp1w-$70`7uQV?6$(M zPn*@IE6$CEEmEtkXlxLFn^(&%QNp$46Mq|stXS%PSVM?mTOy-62Og@-S-zB{@_4R~N ziV!>^X{II9<689!MV+^QK<@zY?cZet3PG#5jQyRlXo&sF%}~%IM5Gn;orq=c6Y`1P zcK4Xg!{2Kw(mq$0Mu;KU{VaF>X5IAxa$KExsO6(zU@dv4-yR zwlA}^NUw3JQx-B=5|fzJlTqAY_1m6Z%nvacsHOqtj$y4V?>LfE0%AgYq1#6A>!XMF z6|7>lH{ID@v{%piXG&+Gsj;0gm=`ZqE{1*5u^P|$3N1DQ7<1i2eowb}PEmlwuVc50 zQcFx(5+5OkLko9)u+KqTxw`4LnQ7R0x?*YTgPCZpxA2c-juiG(ljSc8<`cEp2IdA? zFpoCn3Mmm{Wjkc^{VQM#-9nohdm0stjYbN!aW>j7!mvzLu27#BpJmkKuB5gAM<>~g z$^1i#`RxynyB&-b!Il-My<5Xj`xwyu5?27%Ihj&?4d{-ck~tXcJ*92!@f`bNP1z`0 zoYH4LU|i7ON&}(SvU@Z9WaDvP zZOqVG-BHvJZiu*+>9FKuc)BOOSmb2@PY@WQ2G{zsm$cgFpPMGr@ypemjeDR8V?smX zAauUmHN)Dz1FIysF=|3Nq*EhfF8C$G0h~am|JF8?;@cOsZ+AeuKURhwGEL`td(-e&ef%~Mv%JoTb48y2Yt4~Y@ml)ou#jOx`owlye( zCZ-tNtI^sfwZqjFWMb8(i0PO62Znbc*w;7Tw!7zlNEf`|C&yM+u~v_>5xPZ}?x?u6 zd+0>ej=d-8g8Hm7SjY%*?)T;?K)JWDtfk@guJNb26K@_Gx;lE0h~L%Mq+L=3ETkwC zjFRVq@>mHM7@yxJQo9x==38s0i6M9sS*ym0eNB^SUzC1AsXlzu{+yv30?{4wO!u5V zeeN`A(=NRF-n;3!I!KT?;yPFQ8v^ebDH>uTy$_F1_bY+qhVan>+wUjyk_i$+kJrlj z4ZfCDxPVSBF-;u95_f^wgUz{yiPmBKKU!c;*{r6zM*C6M(bRct*ldd#trg|tZvJqX zMrk}tfnhqD{Ex|it!y*JM;{jBdUA08<1gSi1Q`Dejc}OH<{dGTMq{ z=5BP5Cd|!{PHk$O@C*@xvCqpekn)5uR_pF|%z?JrVyMum@2JKX)?5>{B4s zihJ2+{M+*GGP#RFpYHe5?Rey8^BS5q>_bN!6 zGUmB~qAw;)9Yiehk`N56f)HW`7y-$R z51J%S^IbW6#7j*ey&ccnpHes?)mukR)j_azvD<{?Kib}@ReZ8yZCIB#>3lRRz~bc3 zlk{m6G}M;~a75>jRFk@#Q`v8WRwUc~O6Iw@%Kf9g-(Q5Cn7Q7Bo;n8RUbDg~$<(cJ zx-ww&hA^?ME7{(;t;BlMT`YanERxJlhZwl zDU>9-!F;Om=FE-gre@Yzq83(Ie&#jbIC;HVc|eUX-vH>B9oOtdIS7Z^1fu6OM+zp1HVEW8 zA(k-BxYcTlA;^*V#QDmwCybg-DaGR2rjJ&zbmic#bZ}5X{jQ~8KfnOU1mwf=;`?QH99K!6NoI~$*K4hu##%pSa1N3o*N^5Yw( z-Iy-*uCRJPLUyA0@#l%PlL#8k->qJC1_V1UM!SpIzcMFiQ~;9s@pUh|Hpl5n!|`5~ z+r~`HB5@F3kvqqJAc$^EdB9Fv({#}B%*}LMpV6?|-bJB`A=*h|;Be^t3{#-fA1&l;t6i)QNf+@j#>HF^d*jQ_aQk~X_*5Go@sWL3!Wy~{IEN*=4@ z-9J6z!Q`0fORi!xY*Ow)BvK7#pvcB!Z z3UtgJ@Y9;I8B*^zuh-d@v;}$+9IL@bo^e4196&3nj$K4RLRF=mvW$~O`cfPry8{rW z1Saem6AH4@$Dl8Xq>Eq)?j~3SoQ&p4zu>-TCp4MbVJ=W4J=`3^!)sYF;0a+Q;amK= zaSgRbsoAty&bW>}Eb>Stq}6$2u}V)32f;sAj&%R7)yY}UBGwuU&3-Jb_^OD|pT?kaw} zPZLRa`zwS4n7$7*R#;{@c|Y8!3u9}hf*?%WQu9`W?td;b8uC$*vBlmZS^o-ed`RiAwg}X1W zGedminVYxFg!GN29KH?Qx3>VWnG~+M0ok$;W@nf^Y4DyY<+(mQi=_|}47f-<63p@m zZ9u!s$-d48E8Dze7=v#PBz^ky=_@b5%>@g}!~iyjJgIQ&6B+ou0b@kgv7=)7PK-1! z4ERd}`oau)TGq+zk|0VleE9H6`p3j_oD~AJ{nuN|gmCv0VTfwiU#Cvx(psegsG&7D z9#Az}_|4*_sBd3Q$C}v8#MS~PTFWqiI{?%G2J4?Ms17I?Wq=Hb?iVu1U|u*<4Dd)X zVDdlnFH6gb6DL0FG_Z029B`YlnwMrk0Q`8?jQs=b&{)k^WO;*yJuH7u$@hXRdzO;+ z8X#uof7INNAwwzy4GVlu)c5=lp!wFfR^ZNyn(J9FX#~l=#Y&v%DhALkvc~d*^|hPU zEJ9|y*0dXU-2weQmCw%8%J-+p^#xUFoT#=Pr*;`^@JrK!#JcL}YNK;u&GPnAU%Mf?_x!qHh?kfR&_kk%o zFD7Yi%9JTpKQz?b7-o76OURY|^Yo;ve znp8PGu%hq03Mpm&r{9d*?U}DTfXkClmS*O{ z=BlffW+bIKdv^PKlyL3g96*XG-opAAb&Ry$bj>woa^~AbyX;ct1c)aBFrFJ6A>4xs z;{a&RvGnpSW-P}ru*}Cc@m|1O*J@?Ec^iiCTQa;oU4)Mkj> zj3LwvNPtWT5$h9wFskXX#~!OxFhC=v%x(Ad>sJ;<(w4CCIud<#&H*CC#cRd9jZ~9F zheZs?7$g`?T;qNwz;Oqk8>CgYW<_EIF=zYsFVs8UC5x`H6heKkjPv5kVPri6$b=Ee zQO1plyAsul6f;+$wr`4sJ8iE$%e*Z1hn#d$xgp?^Fo1dkSfm$liRto9=n;z>iN(QDTI{dA}W%Pz~#G7H9)@m~y0KY(x$^JuXeFG>5-~ranr=MP? zXAYj7`TOQrxo6eILM6zH8BU1Rb zkzS;Y`5MdE++faO5##-WNi4KxMH}m5Ahj?^$LFO2{2U;+Ti&rU7ev+0h}xXD?Y89( zLV)!PB>~r$P4upFo%tWb3#%5OQR6r+ko4Bieq z#`4Y*qC|R^L@h7NoJ?qpc^L_H-bG4LzXbX*%7{cE%`gJ%V&?J{KWGVzF6QRe0&IZ% zTDt-NvjBd!IXOgbMnyN*_+V*^RJCOZwc>{?O{{R{Z{|pVCbrC6Zn15o_1Qjv>|0+@ z+g$%z#8&_F0bUVgfbG_;3JbPHqS{)De>|s;J3v43$Rm|2lPFXNSg#w>npm*`WXc002ovPDHLkV1oTAQNsWL literal 25795 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 +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_3.h b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_3.h index 79122ed5f60..9c17823f873 100644 --- a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_3.h +++ b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_3.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include // TODO: add the iterators diff --git a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h index af757f8365e..83a97cf4f5b 100644 --- a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h +++ b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_cell_base_3.h @@ -17,6 +17,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_vertex_base_3.h b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_vertex_base_3.h index 23140ed6efb..0d7e84604b9 100644 --- a/Surface_mesher/include/CGAL/Complex_2_in_triangulation_vertex_base_3.h +++ b/Surface_mesher/include/CGAL/Complex_2_in_triangulation_vertex_base_3.h @@ -18,7 +18,10 @@ #include - +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Gray_level_image_3.h b/Surface_mesher/include/CGAL/Gray_level_image_3.h index 64c00a06f3f..9edd091f0eb 100644 --- a/Surface_mesher/include/CGAL/Gray_level_image_3.h +++ b/Surface_mesher/include/CGAL/Gray_level_image_3.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_file_writer.h b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_file_writer.h index 46e95566031..fe79571ff2f 100644 --- a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_file_writer.h +++ b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_file_writer.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #define CGAL_C2T3_USE_FILE_WRITER_OFF diff --git a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_polyhedron_builder.h b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_polyhedron_builder.h index 865fdfb5657..5d804bd8caf 100644 --- a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_polyhedron_builder.h +++ b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_polyhedron_builder.h @@ -16,6 +16,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_medit.h b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_medit.h index f84385c8555..f3905c0aed5 100644 --- a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_medit.h +++ b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_medit.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_vtk.h b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_vtk.h index 2a76461b98a..6ae55d5a9c2 100644 --- a/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_vtk.h +++ b/Surface_mesher/include/CGAL/IO/Complex_2_in_triangulation_3_to_vtk.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/IO/facets_in_complex_2_to_triangle_mesh.h b/Surface_mesher/include/CGAL/IO/facets_in_complex_2_to_triangle_mesh.h index 80a3afaefe5..72d1813359d 100644 --- a/Surface_mesher/include/CGAL/IO/facets_in_complex_2_to_triangle_mesh.h +++ b/Surface_mesher/include/CGAL/IO/facets_in_complex_2_to_triangle_mesh.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/IO/output_surface_facets_to_polyhedron.h b/Surface_mesher/include/CGAL/IO/output_surface_facets_to_polyhedron.h index 08935e04503..2bf6e11f9c3 100644 --- a/Surface_mesher/include/CGAL/IO/output_surface_facets_to_polyhedron.h +++ b/Surface_mesher/include/CGAL/IO/output_surface_facets_to_polyhedron.h @@ -14,6 +14,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Implicit_surface_3.h b/Surface_mesher/include/CGAL/Implicit_surface_3.h index 23fa443abdc..34976c4660e 100644 --- a/Surface_mesher/include/CGAL/Implicit_surface_3.h +++ b/Surface_mesher/include/CGAL/Implicit_surface_3.h @@ -14,6 +14,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Multi_surface_3.h b/Surface_mesher/include/CGAL/Multi_surface_3.h index 134e9627711..2f4a27ef75d 100644 --- a/Surface_mesher/include/CGAL/Multi_surface_3.h +++ b/Surface_mesher/include/CGAL/Multi_surface_3.h @@ -14,6 +14,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include namespace CGAL { diff --git a/Surface_mesher/include/CGAL/Point_traits.h b/Surface_mesher/include/CGAL/Point_traits.h index 948482f0219..cab4a1f9a17 100644 --- a/Surface_mesher/include/CGAL/Point_traits.h +++ b/Surface_mesher/include/CGAL/Point_traits.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Point_with_psc_localisation.h b/Surface_mesher/include/CGAL/Point_with_psc_localisation.h index 24122b515cc..6eefcbc8256 100644 --- a/Surface_mesher/include/CGAL/Point_with_psc_localisation.h +++ b/Surface_mesher/include/CGAL/Point_with_psc_localisation.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Point_with_surface_index.h b/Surface_mesher/include/CGAL/Point_with_surface_index.h index a4adc974429..c14ba410f4b 100644 --- a/Surface_mesher/include/CGAL/Point_with_surface_index.h +++ b/Surface_mesher/include/CGAL/Point_with_surface_index.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Point_with_surface_index_geom_traits.h b/Surface_mesher/include/CGAL/Point_with_surface_index_geom_traits.h index bf65a959d6b..96af36419c3 100644 --- a/Surface_mesher/include/CGAL/Point_with_surface_index_geom_traits.h +++ b/Surface_mesher/include/CGAL/Point_with_surface_index_geom_traits.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Robust_circumcenter_traits_3.h b/Surface_mesher/include/CGAL/Robust_circumcenter_traits_3.h index 37b5107fd8d..448c267a9a6 100644 --- a/Surface_mesher/include/CGAL/Robust_circumcenter_traits_3.h +++ b/Surface_mesher/include/CGAL/Robust_circumcenter_traits_3.h @@ -20,6 +20,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesh_cell_base_3.h b/Surface_mesher/include/CGAL/Surface_mesh_cell_base_3.h index 8d813f47469..a83722a3c3c 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_cell_base_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_cell_base_3.h @@ -14,6 +14,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesh_complex_2_in_triangulation_3.h b/Surface_mesher/include/CGAL/Surface_mesh_complex_2_in_triangulation_3.h index fefeb5580dc..974d5f3d1f1 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_complex_2_in_triangulation_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_complex_2_in_triangulation_3.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesh_default_criteria_3.h b/Surface_mesher/include/CGAL/Surface_mesh_default_criteria_3.h index 1fde430d98d..677a97cbea6 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_default_criteria_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_default_criteria_3.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesh_default_edges_criteria_3.h b/Surface_mesher/include/CGAL/Surface_mesh_default_edges_criteria_3.h index c07930d8bae..32fa61734ce 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_default_edges_criteria_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_default_edges_criteria_3.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesh_default_triangulation_3.h b/Surface_mesher/include/CGAL/Surface_mesh_default_triangulation_3.h index 2474efe3e1f..9589b2b52bd 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_default_triangulation_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_default_triangulation_3.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include // traits class diff --git a/Surface_mesher/include/CGAL/Surface_mesh_traits_generator_3.h b/Surface_mesher/include/CGAL/Surface_mesh_traits_generator_3.h index 28b57b62dfa..08569ec23e3 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_traits_generator_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_traits_generator_3.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesh_triangulation_generator_3.h b/Surface_mesher/include/CGAL/Surface_mesh_triangulation_generator_3.h index f3df76a67d8..575557d5e27 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_triangulation_generator_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_triangulation_generator_3.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesh_vertex_base_3.h b/Surface_mesher/include/CGAL/Surface_mesh_vertex_base_3.h index 479fcd944b3..73520f1fc93 100644 --- a/Surface_mesher/include/CGAL/Surface_mesh_vertex_base_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesh_vertex_base_3.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Combining_oracle.h b/Surface_mesher/include/CGAL/Surface_mesher/Combining_oracle.h index 2541ef6ff30..e5addd68f56 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Combining_oracle.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Combining_oracle.h @@ -16,6 +16,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Has_edges.h b/Surface_mesher/include/CGAL/Surface_mesher/Has_edges.h index cb8b8e08b28..4abebce71ab 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Has_edges.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Has_edges.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include namespace CGAL { namespace Surface_mesher { diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Implicit_surface_oracle_3.h b/Surface_mesher/include/CGAL/Surface_mesher/Implicit_surface_oracle_3.h index 27362bda2f8..fb57c1805a4 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Implicit_surface_oracle_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Implicit_surface_oracle_3.h @@ -16,6 +16,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Intersection_data_structure_3.h b/Surface_mesher/include/CGAL/Surface_mesher/Intersection_data_structure_3.h index 453d4db1212..8e9b42811d4 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Intersection_data_structure_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Intersection_data_structure_3.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Null_oracle_visitor.h b/Surface_mesher/include/CGAL/Surface_mesher/Null_oracle_visitor.h index 1e633a3566e..44897235895 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Null_oracle_visitor.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Null_oracle_visitor.h @@ -16,6 +16,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include namespace CGAL { diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Point_surface_indices_oracle_visitor.h b/Surface_mesher/include/CGAL/Surface_mesher/Point_surface_indices_oracle_visitor.h index ef9526468c1..d5512a662c1 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Point_surface_indices_oracle_visitor.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Point_surface_indices_oracle_visitor.h @@ -16,6 +16,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include namespace CGAL { diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Polyhedral_oracle.h b/Surface_mesher/include/CGAL/Surface_mesher/Polyhedral_oracle.h index 9d2ac2cd6b3..3863c8ebbb0 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Polyhedral_oracle.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Polyhedral_oracle.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Profile_counter.h b/Surface_mesher/include/CGAL/Surface_mesher/Profile_counter.h index 12a0c01cc94..43dbeb4c8bc 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Profile_counter.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Profile_counter.h @@ -18,6 +18,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Profile_timer.h b/Surface_mesher/include/CGAL/Surface_mesher/Profile_timer.h index 5588637af54..cd8bd792fdf 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Profile_timer.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Profile_timer.h @@ -18,6 +18,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #ifdef CGAL_SURFACE_MESHER_PROFILE diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Sphere_oracle_3.h b/Surface_mesher/include/CGAL/Surface_mesher/Sphere_oracle_3.h index 55d4e1dc104..2e8cf47f695 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Sphere_oracle_3.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Sphere_oracle_3.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Standard_criteria.h b/Surface_mesher/include/CGAL/Surface_mesher/Standard_criteria.h index 01408e568c8..e05d358bc5a 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Standard_criteria.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Standard_criteria.h @@ -16,6 +16,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher.h b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher.h index e2b9cd4720a..ce0e4de049a 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher.h @@ -22,6 +22,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level.h b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level.h index 6466a188db9..64b80f4d793 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level_visitor.h b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level_visitor.h index 049b35f9c66..c69a904283f 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level_visitor.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_edges_level_visitor.h @@ -16,6 +16,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_manifold.h b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_manifold.h index 71b6cb08cbd..37c8d63bf12 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_manifold.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_manifold.h @@ -16,6 +16,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_regular_edges.h b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_regular_edges.h index 25095602a93..074861ea222 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_regular_edges.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_regular_edges.h @@ -15,6 +15,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_visitor.h b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_visitor.h index 9eaa3b197d7..af3f9ea198d 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_visitor.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Surface_mesher_visitor.h @@ -16,6 +16,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Types_generators.h b/Surface_mesher/include/CGAL/Surface_mesher/Types_generators.h index 9bef978a28d..da46a9858f0 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Types_generators.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Types_generators.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Verbose_flag.h b/Surface_mesher/include/CGAL/Surface_mesher/Verbose_flag.h index fefabbf888a..fae4d957850 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Verbose_flag.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Verbose_flag.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include namespace CGAL { namespace Surface_mesher { diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_psc_element_criterion.h b/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_psc_element_criterion.h index a349354287d..14bb5893d6e 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_psc_element_criterion.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_psc_element_criterion.h @@ -16,6 +16,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_surface_criterion.h b/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_surface_criterion.h index 9cba024536c..a8e8567adbc 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_surface_criterion.h +++ b/Surface_mesher/include/CGAL/Surface_mesher/Vertices_on_the_same_surface_criterion.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/Surface_mesher_generator.h b/Surface_mesher/include/CGAL/Surface_mesher_generator.h index 45bdb7f28b6..0266d8d8165 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher_generator.h +++ b/Surface_mesher/include/CGAL/Surface_mesher_generator.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include #include diff --git a/Surface_mesher/include/CGAL/make_piecewise_smooth_surface_mesh.h b/Surface_mesher/include/CGAL/make_piecewise_smooth_surface_mesh.h index ee7f4c54f0b..f95e4234cca 100644 --- a/Surface_mesher/include/CGAL/make_piecewise_smooth_surface_mesh.h +++ b/Surface_mesher/include/CGAL/make_piecewise_smooth_surface_mesh.h @@ -14,6 +14,11 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include + #include #endif //CGAL_MAKE_PIECEWISE_SMOOTH_SURFACE_MESH_H diff --git a/Surface_mesher/include/CGAL/make_surface_mesh.h b/Surface_mesher/include/CGAL/make_surface_mesh.h index 63929cc6f2f..27c32590d12 100644 --- a/Surface_mesher/include/CGAL/make_surface_mesh.h +++ b/Surface_mesher/include/CGAL/make_surface_mesh.h @@ -14,6 +14,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #include diff --git a/Surface_mesher/include/CGAL/vtkSurfaceMesherContourFilter.h b/Surface_mesher/include/CGAL/vtkSurfaceMesherContourFilter.h index 76f3a81590d..59ea94847f2 100644 --- a/Surface_mesher/include/CGAL/vtkSurfaceMesherContourFilter.h +++ b/Surface_mesher/include/CGAL/vtkSurfaceMesherContourFilter.h @@ -15,6 +15,10 @@ #include +#define CGAL_DEPRECATED_HEADER "" +#define CGAL_DEPRECATED_MESSAGE_DETAILS \ + "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." +#include #ifdef CGAL_USE_VTK From d2fe7f260fa2e960dc2618fba5554a98874a8d74 Mon Sep 17 00:00:00 2001 From: Jane Tournois Date: Tue, 4 Jun 2024 12:58:45 +0200 Subject: [PATCH 2/9] use Mesh_3 for Poisson reconstruction in demo --- .../Surface_reconstruction_poisson_impl.cpp | 73 ++++++++++--------- 1 file changed, 38 insertions(+), 35 deletions(-) diff --git a/Lab/demo/Lab/Plugins/Point_set/Surface_reconstruction_poisson_impl.cpp b/Lab/demo/Lab/Plugins/Point_set/Surface_reconstruction_poisson_impl.cpp index 11a8fe9a7b3..23b2b28d48d 100644 --- a/Lab/demo/Lab/Plugins/Point_set/Surface_reconstruction_poisson_impl.cpp +++ b/Lab/demo/Lab/Plugins/Point_set/Surface_reconstruction_poisson_impl.cpp @@ -7,19 +7,23 @@ #include // must be included before kernel #include #include -#include -#include -#include -#include -#include + #include #include +#include +#include +#include +#include +#include +#include + #include #include #include +#include #include "Kernel_type.h" #include "SMesh_type.h" @@ -179,10 +183,11 @@ SMesh* poisson_reconstruct(Point_set& points, // Poisson implicit function typedef CGAL::Poisson_reconstruction_function Poisson_reconstruction_function; - // Surface mesher - typedef CGAL::Surface_mesh_default_triangulation_3 STr; - typedef CGAL::Surface_mesh_complex_2_in_triangulation_3 C2t3; - typedef CGAL::Implicit_surface_3 Surface_3; + // Mesh_3 + typedef CGAL::Labeled_mesh_domain_3 Mesh_domain; + typedef typename CGAL::Mesh_triangulation_3::type Tr; + typedef CGAL::Mesh_complex_3_in_triangulation_3 C3t3; + typedef CGAL::Mesh_criteria_3 Mesh_criteria; // AABB tree typedef CGAL::AABB_face_graph_triangle_primitive Primitive; @@ -273,7 +278,7 @@ SMesh* poisson_reconstruct(Point_set& points, else { //*************************************** - // Surface mesh generation + // Surface mesh generation using Mesh_3 //*************************************** std::cerr << "Surface meshing...\n"; @@ -301,45 +306,43 @@ SMesh* poisson_reconstruct(Point_set& points, // conservative bounding sphere centered at inner point. Kernel::FT sm_sphere_radius = 5.0 * radius; Kernel::FT sm_dichotomy_error = sm_distance*average_spacing/1000.0; // Dichotomy error must be << sm_distance - Surface_3 surface(function, - Kernel::Sphere_3(inner_point,sm_sphere_radius*sm_sphere_radius), - sm_dichotomy_error/sm_sphere_radius); // Defines surface mesh generation criteria - CGAL::Surface_mesh_default_criteria_3 criteria(sm_angle, // Min triangle angle (degrees) - sm_radius*average_spacing, // Max triangle size - sm_distance*average_spacing); // Approximation error - - CGAL_TRACE_STREAM << " make_surface_mesh(sphere center=("<(domain, criteria, + CGAL::parameters::no_exude().no_perturb() + .manifold_with_boundary()); // Prints status std::cerr << "Surface meshing: " << task_timer.time() << " seconds, " - << tr.number_of_vertices() << " output vertices" + << c3t3.triangulation().number_of_vertices() << " output vertices" << std::endl; task_timer.reset(); - if(tr.number_of_vertices() == 0) + if(c3t3.triangulation().number_of_vertices() == 0) { delete mesh; return nullptr; } // Converts to polyhedron - CGAL::facets_in_complex_2_to_triangle_mesh(c2t3, *mesh); + CGAL::facets_in_complex_3_to_triangle_mesh(c3t3, *mesh); // Prints total reconstruction duration std::cerr << "Total reconstruction (implicit function + meshing): " << reconstruction_timer.time() << " seconds\n"; From 9f0cda6e4839cd5164f76505823a636c4f2180b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Loriot?= Date: Tue, 4 Jun 2024 13:49:01 +0200 Subject: [PATCH 3/9] prevent warnings in examples and tests --- .../examples/Surface_mesher/mesh_a_3d_gray_image.cpp | 2 ++ .../examples/Surface_mesher/mesh_an_implicit_function.cpp | 2 ++ Surface_mesher/test/Surface_mesher/combined_spheres.cpp | 2 ++ .../test/Surface_mesher/implicit_surface_mesher_test.cpp | 2 ++ Surface_mesher/test/Surface_mesher/test_c2t3_iterators.cpp | 2 ++ .../test/Surface_mesher/test_robust_circumcenter.cpp | 6 +----- 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/Surface_mesher/examples/Surface_mesher/mesh_a_3d_gray_image.cpp b/Surface_mesher/examples/Surface_mesher/mesh_a_3d_gray_image.cpp index 00508fc121b..600177e088a 100644 --- a/Surface_mesher/examples/Surface_mesher/mesh_a_3d_gray_image.cpp +++ b/Surface_mesher/examples/Surface_mesher/mesh_a_3d_gray_image.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include diff --git a/Surface_mesher/examples/Surface_mesher/mesh_an_implicit_function.cpp b/Surface_mesher/examples/Surface_mesher/mesh_an_implicit_function.cpp index c62844c85d5..0d2860938aa 100644 --- a/Surface_mesher/examples/Surface_mesher/mesh_an_implicit_function.cpp +++ b/Surface_mesher/examples/Surface_mesher/mesh_an_implicit_function.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include diff --git a/Surface_mesher/test/Surface_mesher/combined_spheres.cpp b/Surface_mesher/test/Surface_mesher/combined_spheres.cpp index 631ed4d355a..26500a87635 100644 --- a/Surface_mesher/test/Surface_mesher/combined_spheres.cpp +++ b/Surface_mesher/test/Surface_mesher/combined_spheres.cpp @@ -1,3 +1,5 @@ +#include + #include #include diff --git a/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp b/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp index 374c5b6941c..19eb6e57e00 100644 --- a/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp +++ b/Surface_mesher/test/Surface_mesher/implicit_surface_mesher_test.cpp @@ -1,3 +1,5 @@ +#include + #include #include #include diff --git a/Surface_mesher/test/Surface_mesher/test_c2t3_iterators.cpp b/Surface_mesher/test/Surface_mesher/test_c2t3_iterators.cpp index 2a6dbdb633c..531ae9b8e31 100644 --- a/Surface_mesher/test/Surface_mesher/test_c2t3_iterators.cpp +++ b/Surface_mesher/test/Surface_mesher/test_c2t3_iterators.cpp @@ -1,3 +1,5 @@ +#include + #include // c2t3 diff --git a/Surface_mesher/test/Surface_mesher/test_robust_circumcenter.cpp b/Surface_mesher/test/Surface_mesher/test_robust_circumcenter.cpp index 64950e89f51..7a5a1f83e1b 100644 --- a/Surface_mesher/test/Surface_mesher/test_robust_circumcenter.cpp +++ b/Surface_mesher/test/Surface_mesher/test_robust_circumcenter.cpp @@ -1,8 +1,4 @@ -// $URL$ -// $Id$ -// -// -// Author(s) : Mariette Yvinec +#include #include #include From 7173974ec3b3dc2fc9b6bd656ce6dffa16f67917 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 5 Jun 2024 16:49:43 +0200 Subject: [PATCH 4/9] repair the poisson reconstruction plugin --- .../Mesh_3/Poisson_mesh_traits_generator_3.h | 45 ++ .../Poisson_implicit_surface_oracle_3.h | 7 +- .../Surface_mesher/Poisson_sphere_oracle_3.h | 464 ++++++++++++++++++ .../CGAL/poisson_refine_triangulation.h | 6 +- 4 files changed, 515 insertions(+), 7 deletions(-) create mode 100644 Poisson_surface_reconstruction_3/include/CGAL/Mesh_3/Poisson_mesh_traits_generator_3.h create mode 100644 Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_sphere_oracle_3.h diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Mesh_3/Poisson_mesh_traits_generator_3.h b/Poisson_surface_reconstruction_3/include/CGAL/Mesh_3/Poisson_mesh_traits_generator_3.h new file mode 100644 index 00000000000..b92b6488db8 --- /dev/null +++ b/Poisson_surface_reconstruction_3/include/CGAL/Mesh_3/Poisson_mesh_traits_generator_3.h @@ -0,0 +1,45 @@ +// Copyright (c) 2006-2007, 2024 INRIA Sophia-Antipolis (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// Author(s) : Laurent Rineau, Jane Tournois + +#ifndef CGAL_MESH_3_POISSON_MESH_TRAITS_GENERATOR_3_H +#define CGAL_MESH_3_POISSON_MESH_TRAITS_GENERATOR_3_H + +#include + + +#include + +namespace CGAL { + +template +class Sphere_3; + +/** Default traits class. + * Partial specialization will be in other headers +*/ +template +struct Poisson_mesh_traits_generator_3 +{ + typedef typename Surface::Surface_mesher_traits_3 Type; + typedef Type type; // for Boost compatibility (meta-programming) +}; + + // specialization for Kernel::Sphere_3 +template +struct Poisson_mesh_traits_generator_3 > +{ + typedef Surface_mesher::Poisson_sphere_oracle_3 Type; + typedef Type type; // for Boost compatibility (meta-programming) +}; + +} // end namespace CGAL + +#endif // CGAL_MESH_3_POISSON_MESH_TRAITS_GENERATOR_3_H diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h b/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h index e43214ce663..5ebd27391d8 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h @@ -17,9 +17,8 @@ #include -#include #include -#include +#include #include #include #include @@ -56,7 +55,7 @@ namespace CGAL { Return_min, class Point_creator = Creator_uniform_3, - class Visitor = Null_oracle_visitor + class Visitor = Poisson_null_oracle_visitor > class Poisson_implicit_surface_oracle_3 { @@ -68,7 +67,7 @@ namespace CGAL { Point_creator, Visitor> Self; - typedef Sphere_oracle_3 Sphere_oracle; + typedef Poisson_sphere_oracle_3 Sphere_oracle; typedef typename GT::Point_3 Point; diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_sphere_oracle_3.h b/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_sphere_oracle_3.h new file mode 100644 index 00000000000..8ff4e4ea72e --- /dev/null +++ b/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_sphere_oracle_3.h @@ -0,0 +1,464 @@ +// Copyright (c) 2006-2007 INRIA Sophia-Antipolis (France). +// All rights reserved. +// +// This file is part of CGAL (www.cgal.org). +// +// $URL$ +// $Id$ +// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial +// +// +// Author(s) : Laurent RINEAU + +#ifndef CGAL_POISSON_SURFACE_MESHER_POISSON_SPHERE_ORACLE_3_H +#define CGAL_POISSON_SURFACE_MESHER_POISSON_SPHERE_ORACLE_3_H + +#include + +#include +#include +#include +#include + +#include + +namespace CGAL { + + namespace Surface_mesher { + + struct Poisson_null_oracle_visitor + { + template + void new_point(P&) const + { + } + }; + + + template < + class GT, + class Point_creator = Creator_uniform_3, + class Visitor = Poisson_null_oracle_visitor + > + class Poisson_sphere_oracle_3 + { + // private types + typedef Poisson_sphere_oracle_3 Self; + + typedef typename GT::Point_3 Point; + typedef typename GT::FT FT; + typedef typename GT::Sphere_3 Sphere_3; + + public: + + // Public types + typedef GT Geom_traits; + typedef typename GT::Point_3 Point_3; + typedef typename GT::Segment_3 Segment_3; + typedef typename GT::Ray_3 Ray_3; + typedef typename GT::Line_3 Line_3; + + typedef Sphere_3 Surface_3; + + typedef Point Intersection_point; + private: + // Private members + Visitor visitor; // a visitor that can modify a point, before returning it. + + public: + + // Constructors + Poisson_sphere_oracle_3 (Visitor visitor_ = Visitor() ) : + visitor(visitor_) + { +#ifdef CGAL_SURFACE_MESHER_DEBUG_CONSTRUCTORS +# ifndef CGAL_SURFACE_MESHER_IMPLICIT_SURFACE_ORACLE_3_H + std::cerr << "CONS: Poisson_sphere_oracle_3\n"; +# endif +#endif + } + + const Visitor& get_visitor() const + { + return visitor; + } + + // Predicates and Constructions + + bool is_in_volume(const Surface_3& sphere, const Point& p) const + { + typename GT::Has_on_bounded_side_3 on_bounded_side_of_sphere = + GT().has_on_bounded_side_3_object(); + + return on_bounded_side_of_sphere(sphere, p); + } + + class Intersect_3 + { + const Self& oracle; + + boost::tuple + intersection_line_sphere_lambda(const Surface_3& sphere, + const Point& a, + const Point& b) const + { + /* + Let the vectorial line equation: + m = a + lambda * ( b - a ) + (a, b, and m are points, and lambda if a real.) + + Let c be the center of the sphere, of radius r. + The intersection of the line and the sphere is given by: + (c-m)^2 = r^2 + That is: + ((c-a)^2 - r^2) + - 2 lambda (c-a)*(b-a) + + lambda^2 (b-a)^2 == 0 + + (second degre equation) + + deltaprime = delta/4 = ((c-a)(b-a))^2 - (b-a)^2 * ( (c-a)^2 -r^2 ) + + if delta > 0, root_1 = ((c-a)(b-a) - \sqrt(delta/4)) / (b-a)^2 + root_2 = ((c-a)(b-a) + \sqrt(delta/4)) / (b-a)^2 + (root_1 < root_2) + */ + + typedef typename GT::Vector_3 Vector_3; + + typename GT::Construct_vector_3 vector = + GT().construct_vector_3_object(); + typename GT::Compute_scalar_product_3 scalar_product = + GT().compute_scalar_product_3_object(); + typename GT::Compute_squared_distance_3 squared_distance = + GT().compute_squared_distance_3_object(); + typename GT::Construct_center_3 center = + GT().construct_center_3_object(); + typename GT::Compute_squared_radius_3 squared_radius = + GT().compute_squared_radius_3_object(); + + const Point c = center(sphere); + const Vector_3 ab = vector(a, b); + const Vector_3 ac = vector(a, c); + const FT ab_ac = scalar_product(ab, ac); + const FT ab2 = squared_distance(a, b); + const FT ac2 = squared_distance(a, c); + const FT r2 = squared_radius(sphere); + const FT deltaprime = ab_ac * ab_ac - ab2 * ( ac2 - r2 ); + + switch( CGAL::sign(deltaprime) ) + { + case ZERO: + return boost::make_tuple(1, ab_ac / ab2, 0); + case POSITIVE: + { + const FT sqrt_deltaprime = CGAL::sqrt(deltaprime); + return boost::make_tuple(2, + (ab_ac - sqrt_deltaprime) / ab2, + (ab_ac + sqrt_deltaprime) / ab2); + } + case NEGATIVE: + break; + } + return boost::make_tuple(0, 0, 0); + } //end intersection_line_sphere_lambda + + template + Object private_intersection(const Surface_3& sphere, + const Point& a, + const Point& b, + Assert_on_lambda test) const + { + typedef typename GT::Vector_3 Vector; + + typename GT::Construct_vector_3 vector = + GT().construct_vector_3_object(); + typename GT::Construct_scaled_vector_3 scaled_vector = + GT().construct_scaled_vector_3_object(); + typename GT::Construct_translated_point_3 translated_point = + GT().construct_translated_point_3_object(); + + int number_of_roots; + FT root_1, root_2; + boost::tie(number_of_roots, root_1, root_2) = + intersection_line_sphere_lambda(sphere, a, b); + + const Vector ab = vector(a, b); + if(number_of_roots > 0 && test(root_1)) + { + Point p = translated_point(a, scaled_vector(ab, root_1)); + oracle.get_visitor().new_point(p); + return make_object(p); + } + else if (number_of_roots > 1 && test(root_2)) + { + Point p = translated_point(a, scaled_vector(ab, root_2)); + oracle.get_visitor().new_point(p); + return make_object(p); + } + // else + return Object(); + } // end private_intersection + + struct Lambda_between_0_and_1 : public CGAL::cpp98::unary_function + { + bool operator()(const FT x) const + { + return FT(0) <= x && x <= FT(1); + } + }; + + struct Lambda_positive : public CGAL::cpp98::unary_function + { + bool operator()(const FT x) const + { + return FT(0) <= x; + } + }; + + struct Always_true : public CGAL::cpp98::unary_function + { + bool operator()(const FT) const + { + return true; + } + }; + + public: + Intersect_3(const Self& oracle) : oracle(oracle) + { + } + + Object operator()(const Surface_3& sphere, Segment_3 s) const + { + typename GT::Construct_point_on_3 point_on = + GT().construct_point_on_3_object(); + + const Point& a = point_on(s, 0); + const Point& b = point_on(s, 1); + + return private_intersection(sphere, a, b, Lambda_between_0_and_1()); + } // end operator()(Surface_3, Segment_3) + + Object operator()(const Surface_3& sphere, const Ray_3& r) const { + typename GT::Construct_point_on_3 point_on = + GT().construct_point_on_3_object(); + + const Point& a = point_on(r, 0); + const Point& b = point_on(r, 1); + + return private_intersection(sphere, a, b, Lambda_positive()); + } // end operator()(Surface_3, Ray_3) + + Object operator()(const Surface_3& sphere, const Line_3& l) const { + typename GT::Construct_point_on_3 point_on = + GT().construct_point_on_3_object(); + + const Point& a = point_on(l, 0); + const Point& b = point_on(l, 1); + + return private_intersection(sphere, a, b, Always_true()); + } // end operator()(Surface_3, Line_3) + + /** Modifies s = [a, b] by clipping it to sphere. + Return false iff s is outside sphere. */ + bool clip_segment(const Surface_3& sphere, + Point_3& a, + Point_3& b) const + { + typedef typename GT::Vector_3 Vector; + + typename GT::Has_on_bounded_side_3 on_bounded_side_of_sphere = + GT().has_on_bounded_side_3_object(); + typename GT::Construct_vector_3 vector = + GT().construct_vector_3_object(); + typename GT::Construct_scaled_vector_3 scaled_vector = + GT().construct_scaled_vector_3_object(); + typename GT::Construct_translated_point_3 translated_point = + GT().construct_translated_point_3_object(); + + const bool a_in_sphere = on_bounded_side_of_sphere(sphere, a); + const bool b_in_sphere = on_bounded_side_of_sphere(sphere, b); + + if( a_in_sphere && b_in_sphere ) + return true; + + int number_of_roots; + FT root_1, root_2; + + boost::tie(number_of_roots, root_1, root_2) = + intersection_line_sphere_lambda(sphere, a, b); + +#ifdef CGAL_SURFACE_MESHER_DEBUG_IMPLICIT_ORACLE + std::cerr << "Clip segment. Roots=(" + << root_1 << ", " << root_2 << ")\n"; +#endif + if( number_of_roots < 2 ) + return false; + + if( root_1 > FT(1) ) // root_x \in ]1,\infinity[ + return false; // no intersection + + if( root_1 >= FT(0) ) // root_1 \in [0,1[ + { // move point a + const Point original_a = a; + const Vector ab = vector(a, b); + a = translated_point(original_a, scaled_vector(ab, root_1)); + if( root_2 <= FT(1) ) /// move b if root_2 <=1 + { + b = translated_point(original_a, scaled_vector(ab, root_2)); + } + return true; + } + else // root_1 in ]-\infinity, 0[ + { // do not move point a + if( root_2 < FT(0) ) // root_x in ]-\infinity, 0[ + return false; // no intersection + else + { + const Vector ab = vector(a, b); + if( root_2 <= FT(1) ) + b = translated_point(a, scaled_vector(ab, root_2)); + return true; + } + } + } + + /** The return value s is r clipped to sphere. + Return false iff r does not intersect sphere. */ + bool clip_ray(const Surface_3& sphere, + const Ray_3& r, + Point_3& a, + Point_3& b) const + { + typedef typename GT::Vector_3 Vector; + + typename GT::Construct_point_on_3 point_on = + GT().construct_point_on_3_object(); + typename GT::Construct_vector_3 vector = + GT().construct_vector_3_object(); + typename GT::Construct_scaled_vector_3 scaled_vector = + GT().construct_scaled_vector_3_object(); + typename GT::Construct_translated_point_3 translated_point = + GT().construct_translated_point_3_object(); + + a = point_on(r, 0); + b = point_on(r, 1); + + int number_of_roots; + FT root_1, root_2; + + boost::tie(number_of_roots, root_1, root_2) = + intersection_line_sphere_lambda(sphere, a, b); + + if( number_of_roots == 2 && root_2 > FT(0) ) + { + const Vector ab = vector(a, b); + b = translated_point(a, scaled_vector(ab, root_2)); + if(root_1 > FT(0)) + a = translated_point(a, scaled_vector(ab, root_1)); + // if root_1 <= 0, a is in the ball + return true; + } + // else r does not intersect the sphere + return false; + } // end clip_ray + + /** The return value s=(ab) is l clipped to sphere. + Return false iff l does not intersect sphere. */ + bool clip_line(const Surface_3& sphere, const Line_3& l, + Point& a, + Point& b) const + { + typedef typename GT::Vector_3 Vector; + + typename GT::Construct_point_on_3 point_on = + GT().construct_point_on_3_object(); + typename GT::Construct_vector_3 vector = + GT().construct_vector_3_object(); + typename GT::Construct_scaled_vector_3 scaled_vector = + GT().construct_scaled_vector_3_object(); + typename GT::Construct_translated_point_3 translated_point = + GT().construct_translated_point_3_object(); + + a = point_on(l, 0); + b = point_on(l, 1); + + int number_of_roots; + FT root_1, root_2; + + boost::tie(number_of_roots, root_1, root_2) = + intersection_line_sphere_lambda(sphere, a, b); + + if( number_of_roots == 2 ) + { + const Point original_a = a; + const Vector ab = vector(a, b); + a = translated_point(original_a, scaled_vector(ab, root_1)); + b = translated_point(original_a, scaled_vector(ab, root_2)); + return true; + } + // else l does not intersect the sphere + return false; + } // end clip_line + + }; // end nested class Intersect_3 + + class Construct_initial_points + { + const Self& oracle; + public: + Construct_initial_points(const Self& oracle) : oracle(oracle) + { + } + + // Random points + template + OutputIteratorPoints operator() (const Surface_3& sphere, + OutputIteratorPoints out, + int n = 20) const // WARNING: why 20? + { + const Point center = + GT().construct_center_3_object()(sphere); + const FT squared_radius = + GT().compute_squared_radius_3_object()(sphere); + const double radius_in_double = + CGAL::sqrt(CGAL::to_double(squared_radius)); + + typename CGAL::Random_points_on_sphere_3 random_point_on_sphere(radius_in_double); + typename GT::Construct_vector_3 vector_3 = + GT().construct_vector_3_object(); + typename GT::Construct_translated_point_3 translate = + GT().construct_translated_point_3_object(); + + while (n-->0) + { + Point p = translate(*random_point_on_sphere++, + vector_3(CGAL::ORIGIN, center)); + oracle.get_visitor().new_point(p); + *out++ = p; + } + return out; + } + }; // end nested class Construct_initial_points + + Construct_initial_points construct_initial_points_object() const + { + return Construct_initial_points(*this); + } + + Intersect_3 intersect_3_object() const + { + return Intersect_3(*this); + } + }; // end Poisson_sphere_oracle_3 + + } // namespace Surface_mesher + +} // namespace CGAL + +#include + +#endif // CGAL_POISSON_SURFACE_MESHER_POISSON_SPHERE_ORACLE_3_H diff --git a/Poisson_surface_reconstruction_3/include/CGAL/poisson_refine_triangulation.h b/Poisson_surface_reconstruction_3/include/CGAL/poisson_refine_triangulation.h index c103468f3f1..13f08e45727 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/poisson_refine_triangulation.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/poisson_refine_triangulation.h @@ -21,7 +21,7 @@ #include #include #include -#include +#include namespace CGAL { @@ -142,7 +142,7 @@ class Poisson_mesher_level_impl_base : template ::type, + typename Oracle = typename CGAL::Poisson_mesh_traits_generator_3::type, typename PreviousLevel = Null_mesher_level > class Poisson_mesher_level : @@ -220,7 +220,7 @@ unsigned int poisson_refine_triangulation( , Sizing_field , Second_sizing_field > Tets_criteria; - typedef typename CGAL::Surface_mesh_traits_generator_3::type Oracle; + typedef typename CGAL::Poisson_mesh_traits_generator_3::type Oracle; typedef Poisson_mesher_level Refiner; From 693206c2422b4a49bc284b3f43068dd6a6f99fb1 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 5 Jun 2024 17:02:13 +0200 Subject: [PATCH 5/9] fix the UBSAN error ``` include/CGAL/Poisson_reconstruction_function.h:263:70: runtime error: reference binding to null pointer of type 'struct value_type' ``` --- .../include/CGAL/Poisson_reconstruction_function.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h index 68c71a27151..ae2544567d7 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/Poisson_reconstruction_function.h @@ -260,7 +260,10 @@ class Poisson_reconstruction_function Cell_handle get() const { - return Triangulation_data_structure::Cell_range::s_iterator_to(*m_cell); + if(m_cell == nullptr) + return {}; + else + return Triangulation_data_structure::Cell_range::s_iterator_to(*m_cell); } void set (Cell_handle ch) { m_cell = ch.operator->(); } }; From 76a829e6d437e5cf07a3277f5f35913105a672c5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 5 Jun 2024 19:08:29 +0200 Subject: [PATCH 6/9] move manifold tags to --- STL_Extension/doc/STL_Extension/CGAL/tags.h | 71 +++++++++++++++++++ STL_Extension/doc/STL_Extension/dependencies | 1 + STL_Extension/include/CGAL/tags.h | 5 ++ .../Surface_mesher/CGAL/make_surface_mesh.h | 70 ------------------ .../doc/Surface_mesher/PackageDescription.txt | 4 -- .../doc/Surface_mesher/dependencies | 1 + .../include/CGAL/Surface_mesher_generator.h | 4 -- .../include/CGAL/make_surface_mesh.h | 1 + 8 files changed, 79 insertions(+), 78 deletions(-) diff --git a/STL_Extension/doc/STL_Extension/CGAL/tags.h b/STL_Extension/doc/STL_Extension/CGAL/tags.h index 91b0ca5532d..9d349bf63a0 100644 --- a/STL_Extension/doc/STL_Extension/CGAL/tags.h +++ b/STL_Extension/doc/STL_Extension/CGAL/tags.h @@ -102,3 +102,74 @@ struct Null_tag { }; /* end Null_tag */ } /* end namespace CGAL */ + +namespace CGAL { + +/*! +\ingroup PkgSTLExtensionUtilities + +The class `Manifold_tag` is a tag class used to monitor the +surface meshing algorithm. When instantiated with the tag +`Manifold_tag` the function template +`make_surface_mesh()` +ensures that the output mesh is a manifold surface +without boundary. + +\sa `make_surface_mesh()` +\sa `Manifold_with_boundary_tag` +\sa `Non_manifold_tag` + +*/ + +struct Manifold_tag { + +}; /* end Manifold_tag */ +} /* end namespace CGAL */ + +namespace CGAL { + +/*! +\ingroup PkgSTLExtensionUtilities + +The class `Manifold_with_boundary_tag` is a tag class used to monitor the +surface meshing algorithm. When instantiated with the tag +`Manifold_with_boundary_tag`, the function template +`make_surface_mesh()` +ensures that the output mesh is a manifold surface +but it may have boundaries. + +\sa `make_surface_mesh()` +\sa `Manifold_tag` +\sa `Non_manifold_tag` + +*/ + +struct Manifold_with_boundary_tag { + +}; /* end Manifold_with_boundary_tag */ +} /* end namespace CGAL */ + +namespace CGAL { + +/*! +\ingroup PkgSTLExtensionUtilities + +The class `Non_manifold_tag` is a tag class used to monitor the +surface meshing algorithm. When instantiated with the tag +`Non_manifold_tag` the function template +`make_surface_mesh()` +does not ensure that the output mesh is a manifold surface. +The manifold property of output mesh +may nevertheless result from the choice of +appropriate meshing criteria. + +\sa `make_surface_mesh()` +\sa `Manifold_tag` +\sa `Manifold_with_boundary_tag` + +*/ + +struct Non_manifold_tag { + +}; /* end Non_manifold_tag */ +} /* end namespace CGAL */ diff --git a/STL_Extension/doc/STL_Extension/dependencies b/STL_Extension/doc/STL_Extension/dependencies index e3e3864ed1f..41945cebc67 100644 --- a/STL_Extension/doc/STL_Extension/dependencies +++ b/STL_Extension/doc/STL_Extension/dependencies @@ -4,4 +4,5 @@ Number_types Kernel_23 Miscellany Surface_mesh +Surface_mesher BGL diff --git a/STL_Extension/include/CGAL/tags.h b/STL_Extension/include/CGAL/tags.h index eba9ffdc721..8c446d8128d 100644 --- a/STL_Extension/include/CGAL/tags.h +++ b/STL_Extension/include/CGAL/tags.h @@ -51,6 +51,11 @@ typedef CGAL::Parallel_tag Parallel_if_available_tag; typedef CGAL::Sequential_tag Parallel_if_available_tag; #endif +// For Surface_mesher and Mesh_3 +struct Non_manifold_tag {}; +struct Manifold_tag {}; +struct Manifold_with_boundary_tag {}; + // A function that asserts a specific compile time tag // forcing its two arguments to have equal type. template diff --git a/Surface_mesher/doc/Surface_mesher/CGAL/make_surface_mesh.h b/Surface_mesher/doc/Surface_mesher/CGAL/make_surface_mesh.h index 620f7b9184e..23805009c22 100644 --- a/Surface_mesher/doc/Surface_mesher/CGAL/make_surface_mesh.h +++ b/Surface_mesher/doc/Surface_mesher/CGAL/make_surface_mesh.h @@ -136,73 +136,3 @@ int initial_number_of_points = 20 ); } /* namespace CGAL */ -namespace CGAL { - -/*! -\ingroup PkgSurfaceMesher3TagClasses - -The class `Manifold_tag` is a tag class used to monitor the -surface meshing algorithm. When instantiated with the tag -`Manifold_tag` the function template -`make_surface_mesh()` -ensures that the output mesh is a manifold surface -without boundary. - -\sa `make_surface_mesh()` -\sa `Manifold_with_boundary_tag` -\sa `Non_manifold_tag` - -*/ - -struct Manifold_tag { - -}; /* end Manifold_tag */ -} /* end namespace CGAL */ - -namespace CGAL { - -/*! -\ingroup PkgSurfaceMesher3TagClasses - -The class `Manifold_with_boundary_tag` is a tag class used to monitor the -surface meshing algorithm. When instantiated with the tag -`Manifold_with_boundary_tag`, the function template -`make_surface_mesh()` -ensures that the output mesh is a manifold surface -but it may have boundaries. - -\sa `make_surface_mesh()` -\sa `Manifold_tag` -\sa `Non_manifold_tag` - -*/ - -struct Manifold_with_boundary_tag { - -}; /* end Manifold_with_boundary_tag */ -} /* end namespace CGAL */ - -namespace CGAL { - -/*! -\ingroup PkgSurfaceMesher3TagClasses - -The class `Non_manifold_tag` is a tag class used to monitor the -surface meshing algorithm. When instantiated with the tag -`Non_manifold_tag` the function template -`make_surface_mesh()` -does not ensure that the output mesh is a manifold surface. -The manifold property of output mesh -may nevertheless result from the choice of -appropriate meshing criteria. - -\sa `make_surface_mesh()` -\sa `Manifold_tag` -\sa `Manifold_with_boundary_tag` - -*/ - -struct Non_manifold_tag { - -}; /* end Non_manifold_tag */ -} /* end namespace CGAL */ diff --git a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt index 45a90589a1f..39b9d967d97 100644 --- a/Surface_mesher/doc/Surface_mesher/PackageDescription.txt +++ b/Surface_mesher/doc/Surface_mesher/PackageDescription.txt @@ -7,10 +7,6 @@ /// \defgroup PkgSurfaceMesher3Classes Mesh and Domain Classes /// \ingroup PkgSurfaceMesher3Ref -/// \defgroup PkgSurfaceMesher3TagClasses Tag Classes -/// \ingroup PkgSurfaceMesher3Ref - - /// \defgroup PkgSurfaceMesher3Functions Functions /// \ingroup PkgSurfaceMesher3Ref diff --git a/Surface_mesher/doc/Surface_mesher/dependencies b/Surface_mesher/doc/Surface_mesher/dependencies index a122f2fc7ba..ae4e29fceb6 100644 --- a/Surface_mesher/doc/Surface_mesher/dependencies +++ b/Surface_mesher/doc/Surface_mesher/dependencies @@ -8,3 +8,4 @@ Triangulation_2 Triangulation_3 Mesh_3 Polyhedron +STL_Extension diff --git a/Surface_mesher/include/CGAL/Surface_mesher_generator.h b/Surface_mesher/include/CGAL/Surface_mesher_generator.h index 0266d8d8165..42000144288 100644 --- a/Surface_mesher/include/CGAL/Surface_mesher_generator.h +++ b/Surface_mesher/include/CGAL/Surface_mesher_generator.h @@ -35,10 +35,6 @@ namespace CGAL { - struct Non_manifold_tag {}; - struct Manifold_tag {}; - struct Manifold_with_boundary_tag {}; - // struct Dynamic_manifold_tag { // enum Tag { Manifold = 0, Non_manifold = 1, Manifold_with_boundary = 2 }; // }; diff --git a/Surface_mesher/include/CGAL/make_surface_mesh.h b/Surface_mesher/include/CGAL/make_surface_mesh.h index 27c32590d12..ba69f1d6942 100644 --- a/Surface_mesher/include/CGAL/make_surface_mesh.h +++ b/Surface_mesher/include/CGAL/make_surface_mesh.h @@ -19,6 +19,7 @@ "The 3D Mesh Generation package (see https://doc.cgal.org/latest/Mesh_3/) should be used instead." #include +#include #include #include From 99d39832e077dce5a487ac62ddf39cde0b7c6dd5 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 5 Jun 2024 19:22:57 +0200 Subject: [PATCH 7/9] WIP: bandage for now. We should switch to Mesh_3 --- .../poisson_reconstruction_example.cpp | 3 +++ .../poisson_reconstruction_test.cpp | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp index 92fef2cc110..074689607b5 100644 --- a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp +++ b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction_example.cpp @@ -1,3 +1,6 @@ +/// @TODO: change the usage from Surface_mesher to Mesh_3 +#include + #include #include #include diff --git a/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp b/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp index 760e505dc27..6f0ea438dc6 100644 --- a/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp +++ b/Poisson_surface_reconstruction_3/test/Poisson_surface_reconstruction_3/poisson_reconstruction_test.cpp @@ -8,6 +8,10 @@ // poisson_reconstruction_test mesh1.off point_set2.xyz... // CGAL + +/// @TODO: change the usage from Surface_mesher to Mesh_3 +#include + #include #include #include From bef9f25cac66a07889d0211cdfe209a355bc6655 Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 5 Jun 2024 20:06:37 +0200 Subject: [PATCH 8/9] fix poisson_surface_reconstruction_delaunay Now it uses Mesh_3 (in sequential) instead of Surface_mesher. --- .../Poisson_implicit_surface_oracle_3.h | 2 +- .../CGAL/poisson_surface_reconstruction.h | 51 +++++++++++-------- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h b/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h index 5ebd27391d8..1e282df8c0b 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/Surface_mesher/Poisson_implicit_surface_oracle_3.h @@ -1,5 +1,5 @@ // Copyright (c) 2003-2007 INRIA Sophia-Antipolis (France). -// Copyright (c) 2008,2011 GeometryFactory Sarl (France) +// Copyright (c) 2008,2011,2024 GeometryFactory Sarl (France) // All rights reserved. // // This file is part of CGAL (www.cgal.org). diff --git a/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h b/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h index d926f3d1172..e3da9e661bc 100644 --- a/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h +++ b/Poisson_surface_reconstruction_3/include/CGAL/poisson_surface_reconstruction.h @@ -14,10 +14,12 @@ #include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include #include @@ -97,9 +99,10 @@ namespace CGAL { typedef typename Kernel::FT FT; typedef CGAL::Poisson_reconstruction_function Poisson_reconstruction_function; - typedef typename CGAL::Surface_mesher::Surface_mesh_default_triangulation_3_generator::Type STr; - typedef CGAL::Surface_mesh_complex_2_in_triangulation_3 C2t3; - typedef CGAL::Implicit_surface_3 Surface_3; + typedef CGAL::Labeled_mesh_domain_3 Mesh_domain; + typedef typename CGAL::Mesh_triangulation_3::type Tr; + typedef CGAL::Mesh_complex_3_in_triangulation_3 C3t3; + typedef CGAL::Mesh_criteria_3 Mesh_criteria; Poisson_reconstruction_function function(begin, end, point_map, normal_map); if ( ! function.compute_implicit_function() ) @@ -112,26 +115,34 @@ namespace CGAL { FT sm_sphere_radius = 5.0 * radius; FT sm_dichotomy_error = sm_distance * spacing / 1000.0; - Surface_3 surface(function, - Sphere (inner_point, sm_sphere_radius * sm_sphere_radius), - sm_dichotomy_error / sm_sphere_radius); + Mesh_domain domain = Mesh_domain::create_implicit_mesh_domain(function, Sphere(inner_point, sm_sphere_radius), + CGAL::parameters::relative_error_bound(sm_dichotomy_error / sm_sphere_radius)); - CGAL::Surface_mesh_default_criteria_3 criteria (sm_angle, - sm_radius * spacing, - sm_distance * spacing); + Mesh_criteria criteria(CGAL::parameters::facet_angle = sm_angle, + CGAL::parameters::facet_size = sm_radius*spacing, + CGAL::parameters::facet_distance = sm_distance*spacing); - STr tr; - C2t3 c2t3(tr); - CGAL::make_surface_mesh(c2t3, - surface, - criteria, - tag); + auto turn_tag_into_mesh_3_manifold_option = [](Tag) { + if constexpr (std::is_same_v) + return CGAL::parameters::manifold_with_boundary(); + else if constexpr (std::is_same_v) + return CGAL::parameters::manifold(); + else + return CGAL::parameters::non_manifold(); + }; + + C3t3 c3t3 = CGAL::make_mesh_3(domain, criteria, + turn_tag_into_mesh_3_manifold_option(tag) + .no_exude().no_perturb() + .manifold_with_boundary()); + + const auto& tr = c3t3.triangulation(); if(tr.number_of_vertices() == 0) return false; - CGAL::facets_in_complex_2_to_triangle_mesh(c2t3, output_mesh); + CGAL::facets_in_complex_3_to_triangle_mesh(c3t3, output_mesh); return true; } From 6e6c103b78f533e4627c6ad01e5bb40fae832eed Mon Sep 17 00:00:00 2001 From: Laurent Rineau Date: Wed, 5 Jun 2024 20:07:03 +0200 Subject: [PATCH 9/9] WIP: i temporarily give up on this file --- .../Poisson_surface_reconstruction_3/poisson_reconstruction.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp index 19b2afb4942..72fe1283e2c 100644 --- a/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp +++ b/Poisson_surface_reconstruction_3/examples/Poisson_surface_reconstruction_3/poisson_reconstruction.cpp @@ -1,3 +1,4 @@ +#include // poisson_reconstruction.cpp //----------------------------------------------------------