From 6376f37d9481676cabbb81d19cb2fac038171f26 Mon Sep 17 00:00:00 2001 From: Fabrice Salvaire Date: Sun, 27 Jan 2019 20:23:09 +0100 Subject: [PATCH] fixed test-dxf.py --- .../source/_static/patro-dxf-import.png | Bin 0 -> 63009 bytes doc/sphinx/source/examples/dxf-import.rst | 4 +- examples/file-format/dxf/SplineFromSvg.py | 95 ++++++++++ examples/file-format/dxf/test-dxf.py | 164 +++++------------- 4 files changed, 140 insertions(+), 123 deletions(-) create mode 100644 doc/sphinx/source/_static/patro-dxf-import.png create mode 100644 examples/file-format/dxf/SplineFromSvg.py diff --git a/doc/sphinx/source/_static/patro-dxf-import.png b/doc/sphinx/source/_static/patro-dxf-import.png new file mode 100644 index 0000000000000000000000000000000000000000..0e4d90aade741651ac5395ce61a6257c26e64e2c GIT binary patch literal 63009 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 G{rWE@eGe`G literal 0 HcmV?d00001 diff --git a/doc/sphinx/source/examples/dxf-import.rst b/doc/sphinx/source/examples/dxf-import.rst index ca6e72a..908e98e 100644 --- a/doc/sphinx/source/examples/dxf-import.rst +++ b/doc/sphinx/source/examples/dxf-import.rst @@ -5,8 +5,8 @@ ============ DXF Import ============ - -This screenshot show the file :file:`.dxf`. +x +This screenshot show the file :file:`test-dxf-r15.dxf` used as a test case. .. image:: /_static/patro-dxf-import.png :alt: Patro DXF Import diff --git a/examples/file-format/dxf/SplineFromSvg.py b/examples/file-format/dxf/SplineFromSvg.py new file mode 100644 index 0000000..856f604 --- /dev/null +++ b/examples/file-format/dxf/SplineFromSvg.py @@ -0,0 +1,95 @@ +#################################################################################################### +# +# Patro - A Python library to make patterns for fashion design +# Copyright (C) 2019 Fabrice Salvaire +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +#################################################################################################### + +#################################################################################################### + +def spline_from_svg(scene_importer): + + # m 74.999689,150.7821 + # c + # 9,-10 14.500002,-5 18.916662,-0.83334 4.41667,4.16667 7.749999,7.5 11.083339,5.83334 + # 3.33333,-1.66667 6.66666,-8.33334 13.33333,-11.66667 6.66667,-3.33333 16.66667,-3.33333 + # 16.66667,-3.33333 + + # Vector2D[40. 50.] + # Vector2D[49. 60.] + # Vector2D[54.500002 55. ] + # Vector2D[58.916662 50.83334 ] + # Vector2D[63.333332 46.66667 ] + # Vector2D[66.666661 43.33334 ] + # Vector2D[70.000001 45. ] + # Vector2D[73.333331 46.66667 ] + # Vector2D[76.666661 53.33334 ] + # Vector2D[83.333331 56.66667 ] + # Vector2D[90.000001 60. ] + # Vector2D[100.000001 60. ] + # Vector2D[100.000001 60. ] + + # CubicBezier2D(Vector2D[40. 50.], Vector2D[49. 60.], Vector2D[54.5 55. ], Vector2D[58.91666667 50.83333333]) + # CubicBezier2D(Vector2D[58.91666667 50.83333333], Vector2D[63.33333333 46.66666667], Vector2D[66.66666667 43.33333333], Vector2D[70. 45.]) + # CubicBezier2D(Vector2D[70. 45.], Vector2D[73.33333333 46.66666667], Vector2D[76.66666667 53.33333333], Vector2D[83.33333333 56.66666667]) + # CubicBezier2D(Vector2D[83.33333333 56.66666667], Vector2D[90. 60.], Vector2D[100. 60.], Vector2D[100. 60.]) + + x0, y0 = 40, 50 + control_points = ( + (9, -10), + (14.500002, -5), + (18.916662, -0.83334), + + (4.41667, 4.16667), + (7.749999, 7.5), + (11.083339, 5.83334), + + (3.33333, -1.66667), + (6.66666, -8.33334), + (13.33333, -11.66667), + + (6.66667, -3.33333), + (16.66667, -3.33333), + (16.66667, -3.33333), + ) + + vertices = [] + point = Vector2D(x0, y0) + vertices.append(point) + for i, xy in enumerate(control_points): + xi, yi = xy + yi = -yi + if (i+1) % 3: + x = xi + x0 + y = yi + y0 + else: + x0 += xi + y0 += yi + x, y = x0, y0 + point = Vector2D(x, y) + vertices.append(point) + + path_style = GraphicBezierStyle( + line_width=3.0, + stroke_color=Colors.blue, + stroke_style=StrokeStyle.SolidLine, + show_control=True, + control_color=Colors.red, + ) + + for vertex in vertices: + print(vertex) + # scene_importer.scene.bezier_path(vertices, degree=3, path_style=path_style, user_data=None) diff --git a/examples/file-format/dxf/test-dxf.py b/examples/file-format/dxf/test-dxf.py index 48d75bd..8dd155e 100644 --- a/examples/file-format/dxf/test-dxf.py +++ b/examples/file-format/dxf/test-dxf.py @@ -1,99 +1,47 @@ +#################################################################################################### +# +# Patro - A Python library to make patterns for fashion design +# Copyright (C) 2019 Fabrice Salvaire +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +#################################################################################################### + #################################################################################################### -from pathlib import Path +import logging from Patro.Common.Logging import Logging Logging.setup_logging() from Patro.FileFormat.Dxf.Importer import DxfImporter -from Patro.GeometryEngine.Conic import Circle2D, Ellipse2D -from Patro.GeometryEngine.Segment import Segment2D from Patro.GeometryEngine.Spline import BSpline2D -from Patro.GeometryEngine.Vector import Vector2D from Patro.GraphicEngine.GraphicScene.GraphicStyle import GraphicPathStyle, GraphicBezierStyle from Patro.GraphicEngine.Painter.QtPainter import QtScene from Patro.GraphicStyle import Colors, StrokeStyle +from PatroExample import find_data_path #################################################################################################### -def spline_from_svg(scene_importer): - - # m 74.999689,150.7821 - # c - # 9,-10 14.500002,-5 18.916662,-0.83334 4.41667,4.16667 7.749999,7.5 11.083339,5.83334 - # 3.33333,-1.66667 6.66666,-8.33334 13.33333,-11.66667 6.66667,-3.33333 16.66667,-3.33333 - # 16.66667,-3.33333 - - # Vector2D[40. 50.] - # Vector2D[49. 60.] - # Vector2D[54.500002 55. ] - # Vector2D[58.916662 50.83334 ] - # Vector2D[63.333332 46.66667 ] - # Vector2D[66.666661 43.33334 ] - # Vector2D[70.000001 45. ] - # Vector2D[73.333331 46.66667 ] - # Vector2D[76.666661 53.33334 ] - # Vector2D[83.333331 56.66667 ] - # Vector2D[90.000001 60. ] - # Vector2D[100.000001 60. ] - # Vector2D[100.000001 60. ] - - # CubicBezier2D(Vector2D[40. 50.], Vector2D[49. 60.], Vector2D[54.5 55. ], Vector2D[58.91666667 50.83333333]) - # CubicBezier2D(Vector2D[58.91666667 50.83333333], Vector2D[63.33333333 46.66666667], Vector2D[66.66666667 43.33333333], Vector2D[70. 45.]) - # CubicBezier2D(Vector2D[70. 45.], Vector2D[73.33333333 46.66666667], Vector2D[76.66666667 53.33333333], Vector2D[83.33333333 56.66666667]) - # CubicBezier2D(Vector2D[83.33333333 56.66666667], Vector2D[90. 60.], Vector2D[100. 60.], Vector2D[100. 60.]) - - x0, y0 = 40, 50 - control_points = ( - (9, -10), - (14.500002, -5), - (18.916662, -0.83334), - - (4.41667, 4.16667), - (7.749999, 7.5), - (11.083339, 5.83334), - - (3.33333, -1.66667), - (6.66666, -8.33334), - (13.33333, -11.66667), - - (6.66667, -3.33333), - (16.66667, -3.33333), - (16.66667, -3.33333), - ) - - vertices = [] - point = Vector2D(x0, y0) - vertices.append(point) - for i, xy in enumerate(control_points): - xi, yi = xy - yi = -yi - if (i+1) % 3: - x = xi + x0 - y = yi + y0 - else: - x0 += xi - y0 += yi - x, y = x0, y0 - point = Vector2D(x, y) - vertices.append(point) - - path_style = GraphicBezierStyle( - line_width=3.0, - stroke_color=Colors.blue, - stroke_style=StrokeStyle.SolidLine, - show_control=True, - control_color=Colors.red, - ) - - for vertex in vertices: - print(vertex) - # scene_importer.scene.bezier_path(vertices, degree=3, path_style=path_style, user_data=None) +_module_logger = logging.getLogger(__name__) #################################################################################################### class SceneImporter: + _logger = _module_logger.getChild('SceneImporter') + ############################################## def __init__(self, dxf_path): @@ -127,32 +75,25 @@ class SceneImporter: def _add_item(self, item): - # Fixme: + self._logger.info(item) + + line_width = 3. + path_style = GraphicPathStyle( - line_width=2.0, + line_width=line_width, stroke_color=Colors.black, stroke_style=StrokeStyle.SolidLine, ) - if isinstance(item, Segment2D): - self._scene.segment(item.p0, item.p1, - path_style, - user_data=item, - ) - elif isinstance(item, Circle2D): - kwargs = dict(user_data=item) - if item.domain: - kwargs['start_angle'] = item.domain.start - kwargs['stop_angle'] = item.domain.stop - self._scene.circle(item.center, item.radius, - path_style, - **kwargs, - ) + if isinstance(item, list): + for segment in item: + self._add_item(segment) + elif isinstance(item, BSpline2D): path_style = GraphicPathStyle( - line_width=3., - stroke_color=Colors.green, - ) # Fixme + line_width=line_width, + stroke_color=Colors.blue_blue, + ) self._scene.polyline(item.points, path_style, user_data=item, @@ -162,37 +103,18 @@ class SceneImporter: stroke_color=Colors.black, show_control=True, control_color=Colors.red, - ) # Fixme - for bezier in item.to_bezier(): - self._scene.cubic_bezier(*bezier.points, - path_style, - user_data=item, - ) - elif isinstance(item, Ellipse2D): - self._scene.ellipse(item.center, - item.x_radius, - item.y_radius, - item.angle, - path_style, - user_data=item, ) - elif isinstance(item, list): - for segment in item: - self._add_item(segment) + self._scene.add_spline(item, path_style) + + else: + self._scene.add_geometry(item, path_style) + self._update_bounding_box(item) #################################################################################################### -# filename = 'protection-rectangulaire-v2.dxf' -filename = 'test-dxf-r15.dxf' -try: - dxf_path = Path(__file__).parent.joinpath(filename) -except: - dxf_path = Path('examples', 'dxf', filename) +dxf_path = find_data_path('dxf', 'test-dxf-r15.dxf') scene_importer = SceneImporter(dxf_path) - -# spline_from_svg(scene_importer) - application.qml_application.scene = scene_importer.scene -- GitLab