From 92c02bc6a1e654b7c63d22fa88906a0e860bc69a Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 23 Feb 2019 06:38:02 +0200 Subject: [PATCH] - cleaned up the imports in ToolSolderPaste --- README.md | 4 ++ flatcamTools/ToolSolderPaste.py | 97 +++++++++++++++++---------------- 2 files changed, 54 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 5f6c2121..2dbea56e 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,10 @@ CAD program, and create G-Code for Isolation routing. ================================================= +23.02.2019 + +- + 22.02.2019 - added Repetier postprocessor file diff --git a/flatcamTools/ToolSolderPaste.py b/flatcamTools/ToolSolderPaste.py index 7bfacb8f..ad88bfd5 100644 --- a/flatcamTools/ToolSolderPaste.py +++ b/flatcamTools/ToolSolderPaste.py @@ -1,18 +1,24 @@ from FlatCAMTool import FlatCAMTool -from ObjectCollection import * -from FlatCAMApp import * -from GUIElements import IntEntry, RadioSet, LengthEntry from FlatCAMCommon import LoudDict -from FlatCAMObj import FlatCAMGeometry, FlatCAMExcellon, FlatCAMGerber +from GUIElements import FCComboBox, FCEntry, FCTable +from FlatCAMApp import log +from camlib import distance, CNCjob +from FlatCAMObj import FlatCAMCNCjob from PyQt5 import QtGui, QtCore, QtWidgets -from copy import copy,deepcopy +from PyQt5.QtCore import Qt +from copy import deepcopy +from datetime import datetime from shapely.geometry import MultiPolygon, Polygon, LineString +from shapely.geometry.base import BaseGeometry +from shapely.ops import cascaded_union + +import traceback +from io import StringIO class SolderPaste(FlatCAMTool): - toolName = "Solder Paste Tool" def __init__(self, app): @@ -905,8 +911,42 @@ class SolderPaste(FlatCAMTool): pass @staticmethod - def distance(pt1, pt2): - return sqrt((pt1[0] - pt2[0]) ** 2 + (pt1[1] - pt2[1]) ** 2) + def solder_line(p, offset, units): + x_min, y_min, x_max, y_max = p.bounds + + diag_1_intersect = LineString([(x_min, y_min), (x_max, y_max)]).intersection(p) + diag_2_intersect = LineString([(x_min, y_max), (x_max, y_min)]).intersection(p) + + if units == 'MM': + round_diag_1 = round(diag_1_intersect.length, 1) + round_diag_2 = round(diag_2_intersect.length, 1) + else: + round_diag_1 = round(diag_1_intersect.length, 2) + round_diag_2 = round(diag_2_intersect.length, 2) + + if round_diag_1 == round_diag_2: + l = distance((x_min, y_min), (x_max, y_min)) + h = distance((x_min, y_min), (x_min, y_max)) + + if offset >= l / 2 or offset >= h / 2: + return "fail" + if l > h: + h_half = h / 2 + start = [x_min, (y_min + h_half)] + stop = [(x_min + l), (y_min + h_half)] + else: + l_half = l / 2 + start = [(x_min + l_half), y_min] + stop = [(x_min + l_half), (y_min + h)] + geo = LineString([start, stop]) + elif round_diag_1 > round_diag_2: + geo = round_diag_1 + else: + geo = round_diag_2 + + offseted_poly = p.buffer(-offset) + geo = geo.intersection(offseted_poly) + return geo def on_create_geo_click(self, signal): """ @@ -958,43 +998,6 @@ class SolderPaste(FlatCAMTool): geo_obj.multitool = True geo_obj.special_group = 'solder_paste_tool' - def solder_line(p, offset): - x_min, y_min, x_max, y_max = p.bounds - - diag_1_intersect = LineString([(x_min, y_min), (x_max, y_max)]).intersection(p) - diag_2_intersect = LineString([(x_min, y_max), (x_max, y_min)]).intersection(p) - - if self.units == 'MM': - round_diag_1 = round(diag_1_intersect.length, 1) - round_diag_2 = round(diag_2_intersect.length, 1) - else: - round_diag_1 = round(diag_1_intersect.length, 2) - round_diag_2 = round(diag_2_intersect.length, 2) - - if round_diag_1 == round_diag_2: - l = distance((x_min, y_min), (x_max, y_min)) - h = distance((x_min, y_min), (x_min, y_max)) - - if offset >= l /2 or offset >= h / 2: - return "fail" - if l > h: - h_half = h / 2 - start = [x_min, (y_min + h_half)] - stop = [(x_min + l), (y_min + h_half)] - else: - l_half = l / 2 - start = [(x_min + l_half), y_min] - stop = [(x_min + l_half), (y_min + h)] - geo = LineString([start, stop]) - elif round_diag_1 > round_diag_2: - geo = round_diag_1 - else: - geo = round_diag_2 - - offseted_poly = p.buffer(-offset) - geo = geo.intersection(offseted_poly) - return geo - work_geo = obj.solid_geometry try: _ = iter(work_geo) @@ -1023,7 +1026,7 @@ class SolderPaste(FlatCAMTool): for g in work_geo: if type(g) == MultiPolygon: for poly in g: - geom = solder_line(poly, offset=offset) + geom = self.solder_line(poly, offset=offset, units=self.units) if geom != 'fail': try: geo_obj.tools[tooluid]['solid_geometry'].append(geom) @@ -1032,7 +1035,7 @@ class SolderPaste(FlatCAMTool): else: rest_geo.append(poly) elif type(g) == Polygon: - geom = solder_line(g, offset=offset) + geom = self.solder_line(g, offset=offset, units=self.units) if geom != 'fail': try: geo_obj.tools[tooluid]['solid_geometry'].append(geom)