implement inside cutting (holes not yet working properly)
Stefan Schuermans

Stefan Schuermans commited on 2013-01-27 21:19:38
Showing 6 changed files, with 56 additions and 19 deletions.

... ...
@@ -10,7 +10,7 @@ CFLAGS=-Wall -Wextra -Werror -O2 -g -frounding-math
10 10
 DEFINES=
11 11
 INCLUDES=
12 12
 LDFLAGS=
13
-LIBS=-lm -ldime -lCGAL
13
+LIBS=-lCGAL -lCGAL_Core -ldime -lm
14 14
 
15 15
 CPP=g++
16 16
 CPPARGS=$(CFLAGS) $(DEFINES) $(INCLUDES)
... ...
@@ -21,14 +21,14 @@ $DIMGAP
21 21
  40
22 22
 0.625
23 23
   9
24
-$INSUNITS
25
- 70
26
-4
27
-  9
28 24
 $DIMEXO
29 25
  40
30 26
 0.625
31 27
   9
28
+$INSUNITS
29
+ 70
30
+4
31
+  9
32 32
 $DIMTXT
33 33
  40
34 34
 2.5
... ...
@@ -37,18 +37,18 @@ $DIMSTYLE
37 37
   2
38 38
 Standard
39 39
   9
40
-$PLIMMIN
41
- 10
42
-0.0
43
- 20
44
-0.0
45
-  9
46 40
 $PLIMMAX
47 41
  10
48 42
 210.0
49 43
  20
50 44
 297.0
51 45
   9
46
+$PLIMMIN
47
+ 10
48
+0.0
49
+ 20
50
+0.0
51
+  9
52 52
 $DIMEXE
53 53
  40
54 54
 1.25
... ...
@@ -120,10 +120,13 @@ bool CmdParser::procCmd_cut_inside(std::istream &strm)
120 120
   if (!getLayerPolys(strm, layerName, layer, polys))
121 121
     return false;
122 122
 
123
-  // TODO
124
-  std::cerr << "TODO: cut_inside" << std::endl;
123
+  // innner offset polygons
124
+  Polygons newPolys;
125
+  polys.createInnerOffset(mSettings.tool_diameter * 0.5, newPolys);
126
+
127
+  // convert polygons back to layer (containing paths)
125 128
   Layer newLayer;
126
-  polys.writeToLayer(newLayer);
129
+  newPolys.writeToLayer(newLayer);
127 130
 
128 131
   // convert layer to G-code
129 132
   newLayer.toGCode(mSettings, mGCode);
... ...
@@ -10,8 +10,8 @@
10 10
 #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
11 11
 #include <CGAL/Polygon_2.h>
12 12
 #include <CGAL/Polygon_with_holes_2.h>
13
-#include <CGAL/create_offset_polygons_2.h>
14 13
 #include <CGAL/Boolean_set_operations_2.h>
14
+#include <CGAL/create_offset_polygons_from_polygon_with_holes_2.h>
15 15
 
16 16
 #include "layer.h"
17 17
 #include "path.h"
... ...
@@ -147,6 +147,36 @@ bool Polygons::loadLayer(const Layer &layer, double eqDist)
147 147
   return addLayer(layer, eqDist);
148 148
 }
149 149
 
150
+/**
151
+ * @brief create inner offset polygons
152
+ * @param[in] offset offset, > 0.0
153
+ * @param[out] offsetPolys offset polygons (!= *this)
154
+ */
155
+void Polygons::createInnerOffset(double offset, Polygons &offsetPolys) const
156
+{
157
+  // clear output polygons
158
+  offsetPolys.mPolys.clear();
159
+  // leave if tool diameter is invalid
160
+  if (offset <= 0.0)
161
+    return;
162
+
163
+  // process all polygons
164
+  CgPolyHolesVec::const_iterator poly;
165
+  for (poly = mPolys.begin(); poly != mPolys.end(); ++poly) {
166
+
167
+    // create inner offset polygons
168
+    CgPolyHolesPtrVec offPolys =
169
+      CGAL::create_interior_skeleton_and_offset_polygons_with_holes_2(
170
+        offset, *poly);
171
+
172
+    // add offset polygons to output polygons
173
+    CgPolyHolesPtrVec::const_iterator offPoly;
174
+    for (offPoly = offPolys.begin(); offPoly != offPolys.end(); ++offPoly)
175
+      offsetPolys.mPolys.push_back(**offPoly);
176
+
177
+  } // for poly
178
+}
179
+
150 180
 /**
151 181
  * @brief add all polygons with holes as multiple paths to a layer
152 182
  * @param[in,out] layer layer to add paths to
... ...
@@ -12,7 +12,6 @@
12 12
 #include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
13 13
 #include <CGAL/Polygon_2.h>
14 14
 #include <CGAL/Polygon_with_holes_2.h>
15
-#include <CGAL/create_offset_polygons_2.h>
16 15
 
17 16
 #include "layer.h"
18 17
 
... ...
@@ -24,12 +23,10 @@ public:
24 23
   typedef CgKern::Point_2                    CgPoint;
25 24
   typedef CGAL::Polygon_2<CgKern>            CgPoly;
26 25
   typedef CGAL::Polygon_with_holes_2<CgKern> CgPolyHoles;
27
-  typedef CGAL::Straight_skeleton_2<CgKern>  CgSskel;
28 26
   typedef std::vector<CgPoly>                CgPolyVec;
29 27
   typedef std::vector<CgPolyHoles>           CgPolyHolesVec;
30 28
   typedef boost::shared_ptr<CgPoly>          CgPolyPtr;
31 29
   typedef boost::shared_ptr<CgPolyHoles>     CgPolyHolesPtr;
32
-  typedef boost::shared_ptr<CgSskel>         CgSskelPtr;
33 30
   typedef std::vector<CgPolyPtr>             CgPolyPtrVec;
34 31
   typedef std::vector<CgPolyHolesPtr>        CgPolyHolesPtrVec;
35 32
 
... ...
@@ -54,6 +51,13 @@ public:
54 51
    */
55 52
   bool loadLayer(const Layer &layer, double eqDist);
56 53
 
54
+  /**
55
+   * @brief create inner offset polygons
56
+   * @param[in] offset offset, > 0.0
57
+   * @param[out] offsetPolys offset polygons (!= *this)
58
+   */
59
+  void createInnerOffset(double offset, Polygons &offsetPolys) const;
60
+
57 61
   /**
58 62
    * @brief add all polygons with holes as multiple paths to a layer
59 63
    * @param[in,out] layer layer to add paths to
... ...
@@ -14,7 +14,7 @@ Settings::Settings():
14 14
   feed_mill(10.0),
15 15
   move_z(10.0),
16 16
   precision(0.001),
17
-  tool_diameter(0.0)
17
+  tool_diameter(1.0)
18 18
 {
19 19
 }
20 20
 
21 21