# ! /usr/bin/python2
# -*- coding: utf-8; -*-
#
# (c) 2013 booya (http://booya.at)
#
# This file is part of the OpenGlider project.
#
# OpenGlider 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 2 of the License, or
# (at your option) any later version.
#
# OpenGlider 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 OpenGlider. If not, see <http://www.gnu.org/licenses/>.
import os
import subprocess
from openglider import jsonify
import openglider.plots.spreadsheets
import openglider.plots.cuts
from openglider.plots.drawing import PlotPart, Layout
from openglider.plots.glider import PlotMaker
[docs]class Patterns(object):
[docs] class DefaultConf(PlotMaker.DefaultConfig):
pass
def __init__(self, glider2d, config=None):
self.glider_2d = glider2d
self.config = self.DefaultConf(config)
def __json__(self):
return {
"glider2d": self.glider_2d,
"config": self.config
}
[docs] def unwrap(self, outdir, glider=None):
def fn(filename):
return os.path.join(outdir, filename)
subprocess.call("mkdir -p {}".format(outdir), shell=True)
glider = glider or self.glider_2d.get_glider_3d()
if self.config.complete_glider:
glider_complete = glider.copy_complete()
glider_complete.rename_parts()
plots = PlotMaker(glider_complete, config=self.config)
glider_complete.lineset.iterate_target_length()
else:
plots = PlotMaker(glider, config=self.config)
glider.lineset.iterate_target_length()
plots.unwrap()
all_patterns = plots.get_all_grouped()
with open(fn("patterns.json"), "w") as outfile:
jsonify.dump(plots, outfile)
print("create sketches")
import openglider.plots.sketches as sketch
shapeplot = sketch.ShapePlot(self.glider_2d, glider)
design_upper = shapeplot.copy().insert_design(lower=True)
design_upper.insert_cell_names()
design_lower = shapeplot.copy().insert_design(lower=False)
lineplan = shapeplot.copy()
lineplan.insert_design(lower=True)
lineplan.insert_attachment_points()
lineplan.insert_rib_numbers()
diagonals = sketch.ShapePlot(self.glider_2d, glider)
diagonals.insert_cells()
diagonals.insert_attachment_points(add_text=False)
diagonals.insert_diagonals()
straps = sketch.ShapePlot(self.glider_2d, glider)
straps.insert_cells()
straps.insert_attachment_points(add_text=False)
straps.insert_straps()
drawings = [design_upper.drawing, design_lower.drawing, lineplan.drawing, diagonals.drawing, straps.drawing]
designs = Layout.stack_column(drawings, self.config.patterns_align_dist_y)
all_patterns.append_left(designs, distance=self.config.patterns_align_dist_x*2)
print("export patterns")
all_patterns.scale(1000)
all_patterns.export_svg(fn("plots_all.svg"))
all_patterns.export_dxf(fn("plots_all_dxf2000.dxf"))
all_patterns.export_dxf(fn("plots_all_dxf2007.dxf"), "AC1021")
all_patterns.export_ntv(fn("plots_all.ntv"))
# ribs = packer.pack_parts(parts["ribs"].parts, sheet_size=sheet_size)
# panels = packer.pack_parts(parts["panels"].parts, sheet_size=sheet_size)
# for sheet_no, sheet in enumerate(ribs):
# openglider.plots.create_svg(sheet, fn("ribs_{}".format(sheet_no)))
# for sheet_no, sheet in enumerate(panels):
# openglider.plots.create_svg(sheet, fn("panels_{}".format(sheet_no)))
# sketches = openglider.plots.sketches.get_all_plots(self.glider_2d, glider)
#
# for sketch_name in ("design_upper", "design_lower"):
# sketch = sketches.pop(sketch_name)
# sketch.drawing.scale_a4()
# sketch.drawing.export_svg(fn(sketch_name+".svg"), add_styles=True)
#
# for sketch_name, sketch in sketches.items():
# sketch.drawing.scale_a4()
# sketch.drawing.export_svg(fn(sketch_name+".svg"), add_styles=False)
print("output spreadsheets")
excel = openglider.plots.spreadsheets.get_glider_data(glider)
excel.saveas(os.path.join(outdir, "data.ods"))