Multiple polygon painting functional and with unittests.
This commit is contained in:
parent
7a9a84c781
commit
38c44749f1
|
@ -1346,6 +1346,14 @@ class FlatCAMGeometry(FlatCAMObj, Geometry):
|
|||
self.app.worker_task.emit({'fcn': job_thread, 'params': [self.app]})
|
||||
|
||||
def paint_poly_all(self, tooldia, overlap, outname=None):
|
||||
"""
|
||||
Paints all polygons in this object.
|
||||
|
||||
:param tooldia:
|
||||
:param overlap:
|
||||
:param outname:
|
||||
:return:
|
||||
"""
|
||||
|
||||
proc = self.app.proc_container.new("Painting polygon.")
|
||||
|
||||
|
|
|
@ -0,0 +1,227 @@
|
|||
import sys
|
||||
import unittest
|
||||
from PyQt4 import QtGui
|
||||
from FlatCAMApp import App
|
||||
from FlatCAMObj import FlatCAMGeometry, FlatCAMCNCjob
|
||||
from ObjectUI import GerberObjectUI, GeometryObjectUI
|
||||
from time import sleep
|
||||
import os
|
||||
import tempfile
|
||||
from shapely.geometry import LineString, LinearRing, Polygon, MultiPolygon
|
||||
|
||||
|
||||
class PolyPaintTestCase(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.app = QtGui.QApplication(sys.argv)
|
||||
|
||||
# Create App, keep app defaults (do not load
|
||||
# user-defined defaults).
|
||||
self.fc = App(user_defaults=False)
|
||||
|
||||
def tearDown(self):
|
||||
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# NOTE: These are creating problems...
|
||||
# del self.fc
|
||||
# del self.app
|
||||
|
||||
def test_poly_paint_svg_all(self):
|
||||
|
||||
print "*********************************"
|
||||
print "* svg_all *"
|
||||
print "*********************************"
|
||||
|
||||
# Clear workspace
|
||||
self.fc.on_file_new()
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# Open SVG with polygons
|
||||
self.fc.import_svg('tests/svg/drawing.svg')
|
||||
|
||||
name = self.fc.collection.get_names()[0]
|
||||
|
||||
self.fc.collection.set_active(name)
|
||||
|
||||
geo_obj = self.fc.collection.get_by_name(name)
|
||||
|
||||
# Paint all polygons
|
||||
geo_obj.paint_poly_all(5, 0.2, 1)
|
||||
sleep(5) # Todo: Do not base it on fixed time.
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# New object should be available
|
||||
names = self.fc.collection.get_names()
|
||||
|
||||
self.assertEqual(len(names), 2)
|
||||
|
||||
# Verify new geometry makes sense
|
||||
painted = self.fc.collection.get_by_name(names[-1])
|
||||
for geo in painted.solid_geometry:
|
||||
# Correct Type
|
||||
self.assertTrue(isinstance(geo, LineString))
|
||||
# Lots of points (Should be 1000s)
|
||||
self.assertGreater(len(geo.coords), 2)
|
||||
|
||||
def test_poly_paint_svg_click(self):
|
||||
|
||||
print "*********************************"
|
||||
print "* svg_click *"
|
||||
print "*********************************"
|
||||
|
||||
# Clear workspace
|
||||
self.fc.on_file_new()
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# Open SVG with polygons
|
||||
self.fc.import_svg('tests/svg/drawing.svg')
|
||||
|
||||
name = self.fc.collection.get_names()[0]
|
||||
|
||||
self.fc.collection.set_active(name)
|
||||
|
||||
geo_obj = self.fc.collection.get_by_name(name)
|
||||
|
||||
# Paint all polygons
|
||||
geo_obj.paint_poly_single_click([300, 700], 5, 0.2, 1)
|
||||
sleep(5)
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# New object should be available
|
||||
names = self.fc.collection.get_names()
|
||||
|
||||
sleep(1)
|
||||
self.assertEqual(len(names), 2)
|
||||
|
||||
# Verify new geometry makes sense
|
||||
painted = self.fc.collection.get_by_name(names[-1])
|
||||
for geo in painted.solid_geometry:
|
||||
# Correct Type
|
||||
self.assertTrue(isinstance(geo, LineString))
|
||||
# Lots of points (Should be 1000s)
|
||||
self.assertGreater(len(geo.coords), 2)
|
||||
|
||||
def test_poly_paint_noncopper_all(self):
|
||||
|
||||
print "*********************************"
|
||||
print "* noncopper_all *"
|
||||
print "*********************************"
|
||||
|
||||
# Clear workspace
|
||||
self.fc.on_file_new()
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
self.fc.open_gerber('tests/gerber_files/simple1.gbr')
|
||||
sleep(1)
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
name = self.fc.collection.get_names()[0]
|
||||
|
||||
gerber_obj = self.fc.collection.get_by_name(name)
|
||||
|
||||
self.fc.collection.set_active(name)
|
||||
|
||||
gerber_obj.on_generatenoncopper_button_click()
|
||||
sleep(1)
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# New object should be available
|
||||
names = self.fc.collection.get_names()
|
||||
|
||||
sleep(1)
|
||||
self.assertEqual(len(names), 2)
|
||||
|
||||
geoname = "simple1.gbr_noncopper"
|
||||
geo_obj = self.fc.collection.get_by_name(geoname)
|
||||
self.fc.collection.set_active(geoname)
|
||||
|
||||
geo_obj.paint_poly_all(0.02, 0.2, 0)
|
||||
sleep(5)
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# New object should be available
|
||||
names = self.fc.collection.get_names()
|
||||
|
||||
sleep(1)
|
||||
self.assertEqual(len(names), 3)
|
||||
|
||||
# Verify new geometry makes sense
|
||||
painted = self.fc.collection.get_by_name(names[-1])
|
||||
for geo in painted.solid_geometry:
|
||||
# Correct Type
|
||||
self.assertTrue(isinstance(geo, LineString))
|
||||
# Lots of points (Should be 1000s)
|
||||
self.assertGreater(len(geo.coords), 2)
|
||||
|
||||
def test_poly_paint_noncopper_click(self):
|
||||
|
||||
print "*********************************"
|
||||
print "* noncopper_click *"
|
||||
print "*********************************"
|
||||
|
||||
# Clear workspace
|
||||
self.fc.on_file_new()
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
self.fc.open_gerber('tests/gerber_files/simple1.gbr')
|
||||
sleep(1)
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
name = self.fc.collection.get_names()[0]
|
||||
|
||||
gerber_obj = self.fc.collection.get_by_name(name)
|
||||
|
||||
self.fc.collection.set_active(name)
|
||||
|
||||
gerber_obj.on_generatenoncopper_button_click()
|
||||
sleep(1)
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# New object should be available
|
||||
names = self.fc.collection.get_names()
|
||||
|
||||
sleep(1)
|
||||
self.assertEqual(len(names), 2)
|
||||
|
||||
geoname = "simple1.gbr_noncopper"
|
||||
geo_obj = self.fc.collection.get_by_name(geoname)
|
||||
self.fc.collection.set_active(geoname)
|
||||
|
||||
geo_obj.paint_poly_single_click([2.7, 1.0], 0.02, 0.2, 0)
|
||||
sleep(5)
|
||||
for _ in range(2):
|
||||
self.app.processEvents()
|
||||
|
||||
# New object should be available
|
||||
names = self.fc.collection.get_names()
|
||||
|
||||
sleep(1)
|
||||
self.assertEqual(len(names), 3)
|
||||
|
||||
# Verify new geometry makes sense
|
||||
painted = self.fc.collection.get_by_name(names[-1])
|
||||
for geo in painted.solid_geometry:
|
||||
# Correct Type
|
||||
self.assertTrue(isinstance(geo, LineString))
|
||||
# Lots of points (Should be 1000s)
|
||||
self.assertGreater(len(geo.coords), 2)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue