test_polygon_paint.py 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. import sys
  2. import unittest
  3. from PyQt5 import QtGui, QtWidgets
  4. from FlatCAMApp import App
  5. from FlatCAMObj import FlatCAMGeometry, FlatCAMCNCjob
  6. from flatcamGUI.ObjectUI import GerberObjectUI, GeometryObjectUI
  7. from time import sleep
  8. import os
  9. import tempfile
  10. from shapely.geometry import LineString, LinearRing, Polygon, MultiPolygon
  11. class PolyPaintTestCase(unittest.TestCase):
  12. def setUp(self):
  13. self.app = QtWidgets.QApplication(sys.argv)
  14. # Create App, keep app defaults (do not load
  15. # user-defined defaults).
  16. self.fc = App(user_defaults=False)
  17. def tearDown(self):
  18. for _ in range(2):
  19. self.app.processEvents()
  20. # NOTE: These are creating problems...
  21. # del self.fc
  22. # del self.app
  23. def test_poly_paint_svg_all(self):
  24. print("*********************************")
  25. print("* svg_all *")
  26. print("*********************************")
  27. # Clear workspace
  28. self.fc.on_file_new()
  29. for _ in range(2):
  30. self.app.processEvents()
  31. # Open SVG with polygons
  32. self.fc.import_svg('tests/svg/drawing.svg')
  33. name = self.fc.collection.get_names()[0]
  34. self.fc.collection.set_active(name)
  35. geo_obj = self.fc.collection.get_by_name(name)
  36. # Paint all polygons
  37. geo_obj.paint_poly_all(5, 0.2, 1)
  38. sleep(5) # Todo: Do not base it on fixed time.
  39. for _ in range(2):
  40. self.app.processEvents()
  41. # New object should be available
  42. names = self.fc.collection.get_names()
  43. self.assertEqual(len(names), 2)
  44. # Verify new geometry makes sense
  45. painted = self.fc.collection.get_by_name(names[-1])
  46. for geo in painted.solid_geometry:
  47. # Correct Type
  48. self.assertTrue(isinstance(geo, LineString))
  49. # Lots of points (Should be 1000s)
  50. self.assertGreater(len(geo.coords), 2)
  51. def test_poly_paint_svg_click(self):
  52. print("*********************************")
  53. print("* svg_click *")
  54. print("*********************************")
  55. # Clear workspace
  56. self.fc.on_file_new()
  57. for _ in range(2):
  58. self.app.processEvents()
  59. # Open SVG with polygons
  60. self.fc.import_svg('tests/svg/drawing.svg')
  61. name = self.fc.collection.get_names()[0]
  62. self.fc.collection.set_active(name)
  63. geo_obj = self.fc.collection.get_by_name(name)
  64. # Paint all polygons
  65. geo_obj.paint_poly_single_click([300, 700], 5, 0.2, 1)
  66. sleep(5)
  67. for _ in range(2):
  68. self.app.processEvents()
  69. # New object should be available
  70. names = self.fc.collection.get_names()
  71. sleep(1)
  72. self.assertEqual(len(names), 2)
  73. # Verify new geometry makes sense
  74. painted = self.fc.collection.get_by_name(names[-1])
  75. for geo in painted.solid_geometry:
  76. # Correct Type
  77. self.assertTrue(isinstance(geo, LineString))
  78. # Lots of points (Should be 1000s)
  79. self.assertGreater(len(geo.coords), 2)
  80. def test_poly_paint_noncopper_all(self):
  81. print("*********************************")
  82. print("* noncopper_all *")
  83. print("*********************************")
  84. # Clear workspace
  85. self.fc.on_file_new()
  86. for _ in range(2):
  87. self.app.processEvents()
  88. self.fc.open_gerber('tests/gerber_files/simple1.gbr')
  89. sleep(1)
  90. for _ in range(2):
  91. self.app.processEvents()
  92. name = self.fc.collection.get_names()[0]
  93. gerber_obj = self.fc.collection.get_by_name(name)
  94. self.fc.collection.set_active(name)
  95. gerber_obj.on_generatenoncopper_button_click()
  96. sleep(1)
  97. for _ in range(2):
  98. self.app.processEvents()
  99. # New object should be available
  100. names = self.fc.collection.get_names()
  101. sleep(1)
  102. self.assertEqual(len(names), 2)
  103. geoname = "simple1.gbr_noncopper"
  104. geo_obj = self.fc.collection.get_by_name(geoname)
  105. self.fc.collection.set_active(geoname)
  106. geo_obj.paint_poly_all(0.02, 0.2, 0)
  107. sleep(5)
  108. for _ in range(2):
  109. self.app.processEvents()
  110. # New object should be available
  111. names = self.fc.collection.get_names()
  112. sleep(1)
  113. self.assertEqual(len(names), 3)
  114. # Verify new geometry makes sense
  115. painted = self.fc.collection.get_by_name(names[-1])
  116. for geo in painted.solid_geometry:
  117. # Correct Type
  118. self.assertTrue(isinstance(geo, LineString))
  119. # Lots of points (Should be 1000s)
  120. self.assertGreater(len(geo.coords), 2)
  121. def test_poly_paint_noncopper_click(self):
  122. print("*********************************")
  123. print("* noncopper_click *")
  124. print("*********************************")
  125. # Clear workspace
  126. self.fc.on_file_new()
  127. for _ in range(2):
  128. self.app.processEvents()
  129. self.fc.open_gerber('tests/gerber_files/simple1.gbr')
  130. sleep(1)
  131. for _ in range(2):
  132. self.app.processEvents()
  133. name = self.fc.collection.get_names()[0]
  134. gerber_obj = self.fc.collection.get_by_name(name)
  135. self.fc.collection.set_active(name)
  136. gerber_obj.on_generatenoncopper_button_click()
  137. sleep(1)
  138. for _ in range(2):
  139. self.app.processEvents()
  140. # New object should be available
  141. names = self.fc.collection.get_names()
  142. sleep(1)
  143. self.assertEqual(len(names), 2)
  144. geoname = "simple1.gbr_noncopper"
  145. geo_obj = self.fc.collection.get_by_name(geoname)
  146. self.fc.collection.set_active(geoname)
  147. geo_obj.paint_poly_single_click([2.7, 1.0], 0.02, 0.2, 0)
  148. sleep(5)
  149. for _ in range(2):
  150. self.app.processEvents()
  151. # New object should be available
  152. names = self.fc.collection.get_names()
  153. sleep(1)
  154. self.assertEqual(len(names), 3)
  155. # Verify new geometry makes sense
  156. painted = self.fc.collection.get_by_name(names[-1])
  157. for geo in painted.solid_geometry:
  158. # Correct Type
  159. self.assertTrue(isinstance(geo, LineString))
  160. # Lots of points (Should be 1000s)
  161. self.assertGreater(len(geo.coords), 2)