algorithms for 3d printing and other manufacturing...
TRANSCRIPT
![Page 1: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/1.jpg)
Algorithms for 3D Printing and Other ManufacturingMethodologies
Efi Fogel
Tel Aviv University
CgalApr. 3rd, 2017
![Page 2: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/2.jpg)
Outline
1 CGALIntroductionContentLiteratureDetails
Algorithms for 3D Printing and Other Manufacturing Methodologies 2
![Page 3: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/3.jpg)
Outline
1 CGALIntroductionContentLiteratureDetails
Algorithms for 3D Printing and Other Manufacturing Methodologies 3
![Page 4: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/4.jpg)
Cgal: Mission
“Make the large body of geometric algorithms developed in the field ofcomputational geometry available for industrial applications”
Cgal Project Proposal, 1996
Algorithms for 3D Printing and Other Manufacturing Methodologies 4
![Page 5: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/5.jpg)
Cgal Facts
Written in C++
Adheres the generic programming paradigmDevelopment started in 1995Several active contributor sitesHigh search-engine ranking for www.cgal.org
Used in a diverse range of domainse.g., computer graphics, scientific visualization, computer aided designand modeling, additive manufacturing, geographic information systems,molecular biology, medical imaging, and VLSI
The de-facto standard in applied Computational Geometry
Algorithms for 3D Printing and Other Manufacturing Methodologies 5
![Page 6: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/6.jpg)
Cgal in Numbers
600,000 lines of C++ code10,000 downloads per year not including Linux distributions4,500 manual pages (user and reference manual)1,000 subscribers to user mailing list200 commercial users120 packages30 active developers6 months release cycle2 licenses: Open Source and commercial
Algorithms for 3D Printing and Other Manufacturing Methodologies 6
![Page 7: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/7.jpg)
Cgal HistoryYear Version Released Other Milestones1996 Cgal founded1998 July 1.11999 Work continued after end of European support2001 Aug 2.3 Editorial Board established2002 May 2.42003 Nov 3.0 Geometry Factory founded2004 Dec 3.120052006 May 3.22007 Jun 3.32008 CMake2009 Jan 3.4, Oct 3.52010 Mar 3.6, Oct 3.7 Google Summer of Code (GSoC) 20102011 Apr 3.8, Aug 3.9 GSoC 20112012 Mar 4.0, Oct 4.1 GSoC 20122013 Mar 4.2, Oct 4.3 GSoC 2013, Doxygen2014 Apr 4.4, Oct 4.5 GSoC 20142015 Apr 4.6, Oct 4.7 GitHub, HTML5, Main repository made public2016 Apr 4.8, Sep 4.9 20th anniversary2017 GSoC 2017
Algorithms for 3D Printing and Other Manufacturing Methodologies 7
![Page 8: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/8.jpg)
Cgal Properties
ReliabilityExplicitly handles degeneraciesFollows the Exact Geometric Computation (EGC) paradigm
EfficiencyDepends on leading 3rd party libraries
F e.g., Boost, Gmp, Mpfr, Qt, Eigen, Tbb, and CoreAdheres to the generic-programming paradigm
F Polymorphism is resolved at compile time
The best of both worlds
Algorithms for 3D Printing and Other Manufacturing Methodologies 8
![Page 9: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/9.jpg)
Cgal Properties, Cont
FlexibilityAdaptable, e.g., graph algorithms can directly be applied to Cgal datastructuresExtensible, e.g., data structures can be extended
Ease of UseHas didactic and exhaustive ManualsFollows standard concepts (e.g., C++ and Stl)Has a modular structure, e.g., geometry and topology are separatedCharacterizes with a smooth learning-curve
Algorithms for 3D Printing and Other Manufacturing Methodologies 9
![Page 10: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/10.jpg)
Outline
1 CGALIntroductionContentLiteratureDetails
Algorithms for 3D Printing and Other Manufacturing Methodologies 10
![Page 11: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/11.jpg)
2D Algorithms and Data Structures
Triangulations Mesh Generation Polyline Simplification Voronoi Diagrams
Arrangements Boolean Operations Neighborhood Queries Minkowski Sums Straight Skeleton
Algorithms for 3D Printing and Other Manufacturing Methodologies 11
![Page 12: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/12.jpg)
3D Algorithms and Data Structures
Triangulations Mesh Generation Polyhedral Surface Deformation Boolean Operations
Mesh Simplification Skeleton Segmentation Classification Hole Filling
Algorithms for 3D Printing and Other Manufacturing Methodologies 12
![Page 13: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/13.jpg)
Outline
1 CGALIntroductionContentLiteratureDetails
Algorithms for 3D Printing and Other Manufacturing Methodologies 13
![Page 14: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/14.jpg)
Cgal Bibliography I
The Cgal Project.Cgal User and Reference Manual.Cgal Editorial Board, 4.4 edition, 2014. http://doc.cgal.org/4.2/CGAL.CGAL/html/index.html .
Efi Fogel, Ron Wein, and Dan Halperin.Cgal Arrangements and Their Applications, A Step-by-Step Guide.Springer, 2012.
Mario Botsch, Leif Kobbelt, Mark Pauly, Pierre Alliez, and Bruno Levy.Polygon Mesh Processing.CRC Press, 2010.
A. Fabri, G.-J. Giezeman, L. Kettner, S. Schirra, and S. Schönherr.On the design of Cgal a computational geometry algorithms library.Software — Practice and Experience, 30(11):1167–1202, 2000. Special Issue on Discrete AlgorithmEngineering.
A. Fabri and S. Pion.A generic lazy evaluation scheme for exact geometric computations.In 2nd Library-Centric Software Design Workshop, 2006.
M. H. Overmars.Designing the computational geometry algorithms library Cgal.In Proceedings of ACM Workshop on Applied Computational Geometry, Towards GeometricEngineering, volume 1148, pages 53–58, London, UK, 1996. Springer.
Many Many Many papers
Algorithms for 3D Printing and Other Manufacturing Methodologies 14
![Page 15: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/15.jpg)
Outline
1 CGALIntroductionContentLiteratureDetails
Algorithms for 3D Printing and Other Manufacturing Methodologies 15
![Page 16: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/16.jpg)
Cgal Structure
Basic LibraryAlgorithms and Data Structurese.g., Triangulations, Surfaces, and Arrangements
KernelElementary geometric objectsElementary geometric computations on them
Support Library
Configurations, Assertions,...
VisualizationFilesI/O
Number TypesGenerators
Algorithms for 3D Printing and Other Manufacturing Methodologies 16
![Page 17: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/17.jpg)
Cgal Basic Library
Generic data structures are parameterized with TraitsSeparates algorithms and data structures from the geometric kernel.
Generic algorithms are parameterized with iterator rangesDecouples the algorithm from the data structure.
Algorithms for 3D Printing and Other Manufacturing Methodologies 17
![Page 18: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/18.jpg)
Cgal Components Developed at Tel Aviv University
2D Arrangements
2D Regularized Boolean Set-Operations2D Minkowski Sums
2D Envelopes
3D Envelopes2D Snap Rounding
Inscribed Areas / 2D Largest empty iso rectangle
Algorithms for 3D Printing and Other Manufacturing Methodologies 18
![Page 19: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/19.jpg)
Cgal Components Developed at Tel Aviv University
2D Arrangements2D Regularized Boolean Set-Operations2D Minkowski Sums2D Envelopes3D Envelopes2D Snap RoundingInscribed Areas / 2D Largest empty iso rectangle
Algorithms for 3D Printing and Other Manufacturing Methodologies 19
![Page 20: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/20.jpg)
Cgal 2D Arrangements
The main data structure� �t emp la t e <typename Tra i t s , typename Dcel> Arrangement_2 { . . . } ;� �Traits definitions of geometric elements
geometric-object types e.g., Point_2, andoperations on objects of these types, e.g., Compare_xy_2.
Dcel definitions of topological elementstopological-object types, e.g., vertex, halfedge, and face, andoperations required to maintain the incidence relations amongobjects of these types.
A traits class for line segments.� �Arr_non_cached_segment_tra its_2<Kerne l> : p u b l i c Ke rne l { . . . } ;� �
All object types and most operations are inherited from the derivedkernel.
Algorithms for 3D Printing and Other Manufacturing Methodologies 20
![Page 21: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/21.jpg)
Two Dimensional ArrangementsDefinition (Arrangement)Given a collection C of curves on a surface, the arrangement A (C ) is thepartition of the surface into vertices, edges and faces induced by thecurves of C .
An arrangementof circles in theplane.
An arrangement of lines inthe plane.
An arrangementof great-circlearcs on a sphere.
Algorithms for 3D Printing and Other Manufacturing Methodologies 21
![Page 22: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/22.jpg)
Cgal Kernel Concept
Geometric objects of constant size.Geometric operations on object of constant size.
Primitives 2D, 3D, dD OperationsPredicates Constructions
point comparison intersectionvector orientation squared distancetriangle containment . . .iso rectangle . . .circle
. . .
Algorithms for 3D Printing and Other Manufacturing Methodologies 22
![Page 23: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/23.jpg)
Cgal Kernel Affine Geometry
point - origin → vectorpoint - point → vectorpoint + vector → point
point + point ← Illegalmidpoint(a,b) = a +1/2× (b−a)
Algorithms for 3D Printing and Other Manufacturing Methodologies 23
![Page 24: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/24.jpg)
Cgal Kernel Classification
Dimension: 2, 3, arbitraryNumber types:
Ring: +,−,×Euclidean ring (adds integer division and gcd) (e.g., CGAL : : Gmpz).Field: +,−,×,/ (e.g., CGAL : : Gmpq).Exact sign evaluation for expressions with roots (F i e l d_w i th_sq r ).
Coordinate representationCartesian—requires a field number type or Euclidean ring if noconstructions are performed.Homegeneous—requires Euclidean ring.
Reference countingExact, Filtered
Algorithms for 3D Printing and Other Manufacturing Methodologies 24
![Page 25: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/25.jpg)
Cgal Kernels and Number Types
Cartesian representation Homogeneous representation
point∣∣∣∣ x = hx
hwy = hy
hwpoint
∣∣∣∣∣∣hxhyhw
Intersection of two lines{a1x +b1y + c1 = 0a2x +b2y + c2 = 0
{a1hx +b1hy + c1hw = 0a2hx +b2hy + c2hw = 0
(x ,y) = (hx ,hy ,hw) =∣∣∣∣∣ b1 c1
b2 c2
∣∣∣∣∣∣∣∣∣∣ a1 b1a2 b2
∣∣∣∣∣,−
∣∣∣∣∣ a1 c1a2 c2
∣∣∣∣∣∣∣∣∣∣ a1 b1a2 b2
∣∣∣∣∣
(∣∣∣∣ b1 c1b2 c2
∣∣∣∣ ,− ∣∣∣∣ a1 c1a2 c2
∣∣∣∣ , ∣∣∣∣ a1 b1a2 b2
∣∣∣∣)
Field operations Ring operations
Algorithms for 3D Printing and Other Manufacturing Methodologies 25
![Page 26: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/26.jpg)
Example: Ke rne l s<NumberType>
Ca r t e s i a n <FieldNumberType>t y p ed e f CGAL : : Ca r t e s i a n <Gmpq> Kerne l ;t y p ed e f CGAL : : S imp l e_ca r t e s i an<double> Kerne l ;
F No reference-counting, inexact instantiationHomogeneous<RingNumberType>
t y pd e f CGAL : : Homogeneous<Core : : B ig In t> Kerne l ;d-dimensional Ca r t e s i an_d and Homogeneous_dTypes + Operations
Kerne l : : Point_2, Ke rne l : : Segment_3Ke rne l : : Less_xy_2, Ke rne l : : Con s t r u c t_b i s e c t o r_3
Algorithms for 3D Printing and Other Manufacturing Methodologies 26
![Page 27: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/27.jpg)
Cgal Numerical Issues� �#i f 1
t y p ed e f CORE : : Expr NT;t y p ed e f CGAL : : Ca r t e s i a n <NT> Kerne l ;NT sq r t 2 = CGAL : : s q r t (NT( 2 ) ) ;
#e l s et y p ed e f doub l e NT;t y p ed e f CGAL : : Ca r t e s i a n <NT> Kerne l ;NT sq r t 2 = s q r t ( 2 ) ;
#e n d i f
Ke rne l : : Point_2 p (0 , 0 ) , q ( sq r t2 , s q r t 2 ) ;Ke rne l : : C i r c l e_2 C(p , 4 ) ;a s s e r t (C . has_on_boundary ( q ) ) ;� �
OK if NT supports exact sqrt.Assertion violation otherwise.
p
qC
Algorithms for 3D Printing and Other Manufacturing Methodologies 27
![Page 28: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/28.jpg)
Cgal Pre-defined Cartesian Kernels
Support construction of points from doub l e Cartesian coordinates.Support exact geometric predicates.Handle geometric constructions differently:
CGAL : : E x a c t_p r e d i c a t e s_ i n e x a c t_ c on s t r u c t i o n s_k e r n e lF Geometric constructions may be inexact due to round-off errors.F It is however more efficient and sufficient for most Cgal algorithms.
CGAL : : E x a c t_p r e d i c a t e s_e x a c t_con s t r u c t i o n s_k e r n e lCGAL : : E x a c t_p r ed i c a t e s_e xa c t_con s t r u c t i o n s_ke r n e l_w i t h_ sq r t
F Its number type supports the exact square-root operation.
Algorithms for 3D Printing and Other Manufacturing Methodologies 28
![Page 29: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/29.jpg)
Cgal Special Kernels
Filtered kernels2D circular kernel3D spherical kernel
Refer to Cgal’s manual for more details.
Algorithms for 3D Printing and Other Manufacturing Methodologies 29
![Page 30: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/30.jpg)
Computing the Orientationimperative style� �#i n c l u d e <CGAL/ Exa c t_p r e d i c a t e s_ i n e x a c t_ c on s t r u c t i o n s_k e r n e l . h>
t yp ed e f CGAL : : E x a c t_p r e d i c a t e s_ i n e x a c t_ c on s t r u c t i o n s_k e r n e l Ke rne l ;t y p ed e f Ke rne l : : Point_2 Point_2 ;
i n t main ( ){
Point_2 p (0 , 0 ) , q (10 , 3 ) , r ( 1 2 , 1 9 ) ;r e t u r n (CGAL : : o r i e n t a t i o n (q , p , r ) == CGAL : : LEFT_TURN) ? 0 : 1 ;
}� �precative style� �#i n c l u d e <CGAL/ Exa c t_p r e d i c a t e s_ i n e x a c t_ c on s t r u c t i o n s_k e r n e l . h>
t yp ed e f CGAL : : E x a c t_p r e d i c a t e s_ i n e x a c t_ c on s t r u c t i o n s_k e r n e l Ke rne l ;t y p ed e f Ke rne l : : Point_2 Point_2 ;t y p ed e f Ke rne l : : O r i en t a t i on_2 Or i en t a t i on_2 ;
i n t main ( ){
Ke rne l k e r n e l ;O r i en t a t i on_2 o r i e n t a t i o n = k e r n e l . o r i e n t a t i o n_2_ob j e c t ( ) ;
Point_2 p (0 , 0 ) , q (10 , 3 ) , r ( 1 2 , 1 9 ) ;r e t u r n ( o r i e n t a t i o n (q , p , r ) == CGAL : : LEFT_TURN) ? 0 : 1 ;
}� �Algorithms for 3D Printing and Other Manufacturing Methodologies 30
![Page 31: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/31.jpg)
Cgal Adaptable & Extensible Kernel
Geometric class templates are parameterized with the kernel� �t emp la t e <typename K> s t r u c t MyPoint { . . . } ;t emp la t e <typename K> s t r u c t MyLine { . . . } ;t emp la t e <typename K> s t r u c t MyConstruct { . . . } ;� �Geometric class definitions are nested in the kernel� �s t r u c t Ke rne l {
t y p ed e f MyPoint<Kerne l> Point_2 ;t y p ed e f MyLine<Kerne l> Line_2 ;t y p ed e f MyConstruct<Kerne l> Cons t ru c t_ l i n e_2 ;
} ;� �Injecting a class into its nested templates is not a problem, but there ismore...
Algorithms for 3D Printing and Other Manufacturing Methodologies 31
![Page 32: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/32.jpg)
Cgal Adaptable & Extensible Kernel, Cont
We want to define a new kernel where new types can be added andexisting ones can be exchanged� �s t r u c t New_kernel : p u b l i c Ke rne l {
t y p ed e f NewPoint<New_kernel> Point_2 ;t y p ed e f MyLeftTurn<New_kernel> Lef t_turn_2 ;
} ;� �Problem: The inherited class MyConstruct is still parameterizedwith Kernel, hence it operates on the old point class MyPoint.Solutions
Redefine Cons t ruc t_ l i n e_2 in New_kernel
Defer the instantiation of Cons t ruc t_ l i n e_2
Algorithms for 3D Printing and Other Manufacturing Methodologies 32
![Page 33: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/33.jpg)
Cgal Adaptable & Extensible Kernel, Cont
We want to define a new kernel where new types can be added andexisting ones can be exchanged� �s t r u c t New_kernel : p u b l i c Ke rne l {
t y p ed e f NewPoint<New_kernel> Point_2 ;t y p ed e f MyLeftTurn<New_kernel> Lef t_turn_2 ;
} ;� �Problem: The inherited class MyConstruct is still parameterizedwith Kernel, hence it operates on the old point class MyPoint.Solutions
Redefine Cons t ruc t_ l i n e_2 in New_kernel
Defer the instantiation of Cons t ruc t_ l i n e_2
Algorithms for 3D Printing and Other Manufacturing Methodologies 33
![Page 34: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/34.jpg)
Cgal Adaptable & Extensible Kernel, Cont
We want to define a new kernel where new types can be added andexisting ones can be exchanged� �s t r u c t New_kernel : p u b l i c Ke rne l {
t y p ed e f NewPoint<New_kernel> Point_2 ;t y p ed e f MyLeftTurn<New_kernel> Lef t_turn_2 ;
} ;� �Problem: The inherited class MyConstruct is still parameterizedwith Kernel, hence it operates on the old point class MyPoint.Solutions
Redefine Cons t ruc t_ l i n e_2 in New_kernelDefer the instantiation of Cons t ruc t_ l i n e_2
Algorithms for 3D Printing and Other Manufacturing Methodologies 34
![Page 35: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/35.jpg)
Cgal Adaptable & Extensible Kernel, Cont
� �t emp la t e <typename K>s t r u c t Kerne l_base {
t y p ed e f MyPoint<K> Point_2 ;t y p ed e f MyLine<K> Line_2 ;t y p ed e f MyConstruct<K> Cons t ruc t_ l i n e_2 ;
} ;s t r u c t Ke rne l : p u b l i c Kerne l_base<Kerne l> {} ;� �Defer instantiation once again to be able to extend New_kernel in thesame way as Ke rne l .� �t emp la t e <typename K>s t r u c t New_kernel_base : p u b l i c Kerne l_base<K> {
t yp ed e f NewPoint<K> Point_2 ;t y p ed e f MyLeftTurn<K> Left_turn_2 ;
} ;s t r u c t New_kernel : p u b l i c New_kernel_base<New_kernel> {} ;� �
Algorithms for 3D Printing and Other Manufacturing Methodologies 35
![Page 36: Algorithms for 3D Printing and Other Manufacturing …acg.cs.tau.ac.il/courses/3d-printing/cgal.pdf · 2017-04-04 · 2009 Jan3.4,Oct3.5 2010 Mar3.6,Oct3.7GoogleSummerofCode(GSoC)2010](https://reader034.vdocument.in/reader034/viewer/2022050518/5fa2542c79cba5635e02b792/html5/thumbnails/36.jpg)
Computing the Intersection
� �#i n c l u d e <CGAL/ Exa c t_p r e d i c a t e s_ i n e x a c t_ c on s t r u c t i o n s_k e r n e l . h>#i n c l u d e <CGAL/ i n t e r s e c t i o n s . h>
t yp ed e f CGAL : : E x a c t_p r e d i c a t e s_ i n e x a c t_ c on s t r u c t i o n s_k e r n e l Ke rne l ;t y p ed e f Ke rne l : : Point_2 Point_2 ;t y p ed e f Ke rne l : : Segment_2 Segment_2 ;t y p ed e f Ke rne l : : L ine_2 Line_2 ;
i n t main ( ) {Point_2 p (1 , 1 ) , q ( 2 , 3 ) , r ( −12 ,19) ;Line_2 l i n e (p , q ) ;Segment_2 seg ( r , p ) ;auto r e s u l t = CGAL : : i n t e r s e c t i o n ( seg , l i n e ) ;i f ( r e s u l t ) {
i f ( con s t Segment_2∗ s = boos t : : get<Segment_2>(&∗ r e s u l t ) ) {// hand l e segment
}e l s e {
cons t Point_2∗ p = boos t : : get<Point_2>(&∗ r e s u l t ) ;// hand l e po i n t
}}r e t u r n 0 ;
}� �Algorithms for 3D Printing and Other Manufacturing Methodologies 36