Просмотр исходного кода

Added "interiors" shell command.

Juan Pablo Caram 10 лет назад
Родитель
Сommit
b5f428deea
2 измененных файлов с 71 добавлено и 3 удалено
  1. 46 1
      FlatCAMApp.py
  2. 25 2
      camlib.py

+ 46 - 1
FlatCAMApp.py

@@ -2209,6 +2209,42 @@ class App(QtCore.QObject):
 
 
             return 'Ok'
             return 'Ok'
 
 
+        def interiors(obj_name, *args):
+            a, kwa = h(*args)
+            types = {}
+
+            for key in kwa:
+                if key not in types:
+                    return 'Unknown parameter: %s' % key
+                kwa[key] = types[key](kwa[key])
+
+            try:
+                obj = self.collection.get_by_name(str(obj_name))
+            except:
+                return "Could not retrieve object: %s" % obj_name
+
+            if obj is None:
+                return "Object not found: %s" % obj_name
+
+            assert isinstance(obj, Geometry)
+
+            obj_interiors = obj.get_interiors()
+
+            def geo_init(geo_obj, app_obj):
+                geo_obj.solid_geometry = obj_interiors
+
+            if 'outname' in kwa:
+                outname = kwa['outname']
+            else:
+                outname = obj_name + ".interiors"
+
+            try:
+                self.new_object('geometry', outname, geo_init)
+            except Exception as e:
+                return "Failed: %s" % str(e)
+
+            return 'Ok'
+
         def isolate(name, *args):
         def isolate(name, *args):
             a, kwa = h(*args)
             a, kwa = h(*args)
             types = {'dia': float,
             types = {'dia': float,
@@ -2568,10 +2604,19 @@ class App(QtCore.QObject):
                         "   name: Name of the source Geometry object.\n" +
                         "   name: Name of the source Geometry object.\n" +
                         "   outname: Name of the resulting Geometry object."
                         "   outname: Name of the resulting Geometry object."
             },
             },
+            'interiors': {
+                'fcn': interiors,
+                'help': "Get interiors of polygons.\n" +
+                        "> interiors <name> [-outname <outname>]\n" +
+                        "   name: Name of the source Geometry object.\n" +
+                        "   outname: Name of the resulting Geometry object."
+            },
             'drillcncjob': {
             'drillcncjob': {
                 'fcn': drillcncjob,
                 'fcn': drillcncjob,
                 'help': "Drill CNC job.\n" +
                 'help': "Drill CNC job.\n" +
-                        "> drillcncjob <name> -tools <str> -drillz <float> -travelz <float> -feedrate <float> -outname <str> [-spindlespeed (int)] [-toolchange (int)] \n" +
+                        "> drillcncjob <name> -tools <str> -drillz <float> " +
+                        "-travelz <float> -feedrate <float> -outname <str> " +
+                        "[-spindlespeed (int)] [-toolchange (int)] \n" +
                         "   name: Name of the object\n" +
                         "   name: Name of the object\n" +
                         "   tools: Comma separated indexes of tools (example: 1,3 or 2)\n" +
                         "   tools: Comma separated indexes of tools (example: 1,3 or 2)\n" +
                         "   drillz: Drill depth into material (example: -2.0)\n" +
                         "   drillz: Drill depth into material (example: -2.0)\n" +

+ 25 - 2
camlib.py

@@ -172,11 +172,34 @@ class Geometry(object):
 
 
         return None
         return None
 
 
+    def get_interiors(self, geometry=None):
+
+        interiors = []
+
+        if geometry is None:
+            geometry = self.solid_geometry
+
+        ## If iterable, expand recursively.
+        try:
+            for geo in geometry:
+                interiors.extend(self.get_interiors(geometry=geo))
+
+        ## Not iterable, get the exterior if polygon.
+        except TypeError:
+            if type(geometry) == Polygon:
+                interiors.extend(geometry.interiors)
+
+        return interiors
+
+
     def get_exteriors(self, geometry=None):
     def get_exteriors(self, geometry=None):
         """
         """
-        Returns all exteriors of polygons in geometry.
+        Returns all exteriors of polygons in geometry. Uses
+        ``self.solid_geometry`` if geometry is not provided.
 
 
-        :return:
+        :param geometry: Shapely type or list or list of list of such.
+        :return: List of paths constituting the exteriors
+           of polygons in geometry.
         """
         """
 
 
         exteriors = []
         exteriors = []