FreeCAD/src/Mod/Ship/shipOutlineDraw/Plot.py
2012-08-01 19:32:43 -03:00

98 lines
5.2 KiB
Python

#***************************************************************************
#* *
#* Copyright (c) 2011, 2012 *
#* Jose Luis Cercos Pita <jlcercos@gmail.com> *
#* *
#* This program is free software; you can redistribute it and/or modify *
#* it under the terms of the GNU Lesser General Public License (LGPL) *
#* as published by the Free Software Foundation; either version 2 of *
#* the License, or (at your option) any later version. *
#* for detail see the LICENCE text file. *
#* *
#* 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 Library General Public License for more details. *
#* *
#* You should have received a copy of the GNU Library General Public *
#* License along with this program; if not, write to the Free Software *
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
#* USA *
#* *
#***************************************************************************
# FreeCAD modules
import FreeCAD,FreeCADGui
from FreeCAD import Base, Vector
import Part
# FreeCADShip modules
from shipUtils import Paths, Translator
from surfUtils import Geometry
def Plot(scale, sections, shape):
""" Creates the outline draw.
@param scale Plane scale (format 1:scale)
@param sections Sections computed.
@param shape Ship surfaces shell
@return plotted object (DocumentObject)
"""
msg = Translator.translate('Performing plot (Scale 1:%d)...\n' % (scale))
FreeCAD.Console.PrintMessage(msg)
scale = 1000.0 / scale
# Take positions
bounds = [0.0, 0.0, 0.0]
bbox = shape.BoundBox
bounds[0] = bbox.XLength
bounds[1] = bbox.YLength
bounds[2] = bbox.ZLength
xTot = scale*bounds[1] + 32.0 + scale*bounds[0]
yTot = scale*bounds[2] + 32.0 + scale*bounds[1]
xMid = 210.0
yMid = 185.0
x0 = xMid - 0.5*xTot
y0 = 297.0 - yMid - 0.5*yTot # 297 = A3_width
# Get border
edges = Geometry.getEdges([shape])
border = edges[0]
for i in range(0,len(edges)):
border = border.oldFuse(edges[i]) # Only group objects, don't try to build more complex entities
border = border.oldFuse(edges[i].mirror(Vector(0.0, 0.0, 0.0),Vector(0.0, 1.0, 0.0)))
# Fuse sections & borders
# obj = sections.oldFuse(border)
obj = border.oldFuse(sections)
# Send to 3D view
Part.show(obj)
objs = FreeCAD.ActiveDocument.Objects
obj = objs[len(objs)-1]
# Create a new plane
FreeCAD.ActiveDocument.addObject('Drawing::FeaturePage','OutlineDrawPlot')
FreeCAD.ActiveDocument.OutlineDrawPlot.Template = FreeCAD.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'
# Side view
FreeCAD.ActiveDocument.addObject('Drawing::FeatureViewPart','OutlineDrawSideView')
FreeCAD.ActiveDocument.OutlineDrawSideView.Source = obj
FreeCAD.ActiveDocument.OutlineDrawSideView.Direction = (1.0,0.0,0.0)
FreeCAD.ActiveDocument.OutlineDrawSideView.Rotation = -90.0
FreeCAD.ActiveDocument.OutlineDrawSideView.Scale = scale
FreeCAD.ActiveDocument.OutlineDrawSideView.X = 420.0 - x0 - 0.5*scale*bounds[1] # 420 = A3_height
FreeCAD.ActiveDocument.OutlineDrawSideView.Y = y0 + 0.5*scale*bounds[2]
FreeCAD.ActiveDocument.OutlineDrawPlot.addObject(FreeCAD.ActiveDocument.OutlineDrawSideView)
# Front view
FreeCAD.ActiveDocument.addObject('Drawing::FeatureViewPart','OutlineDrawFrontView')
FreeCAD.ActiveDocument.OutlineDrawFrontView.Source = obj
FreeCAD.ActiveDocument.OutlineDrawFrontView.Direction = (0.0,1.0,0.0)
FreeCAD.ActiveDocument.OutlineDrawFrontView.Rotation = -90.0
FreeCAD.ActiveDocument.OutlineDrawFrontView.Scale = scale
FreeCAD.ActiveDocument.OutlineDrawFrontView.X = 420.0 - x0 - scale*bounds[1] - 32 - 0.5*scale*bounds[0]
FreeCAD.ActiveDocument.OutlineDrawFrontView.Y = y0 + 0.5*scale*bounds[2]
FreeCAD.ActiveDocument.OutlineDrawPlot.addObject(FreeCAD.ActiveDocument.OutlineDrawFrontView)
# Up view
FreeCAD.ActiveDocument.addObject('Drawing::FeatureViewPart','OutlineDrawUpView')
FreeCAD.ActiveDocument.OutlineDrawUpView.Source = obj
FreeCAD.ActiveDocument.OutlineDrawUpView.Direction = (0.0,0.0,1.0)
FreeCAD.ActiveDocument.OutlineDrawUpView.Scale = scale
FreeCAD.ActiveDocument.OutlineDrawUpView.X = 420.0 - x0 - scale*bounds[1] - 32 - 0.5*scale*bounds[0]
FreeCAD.ActiveDocument.OutlineDrawUpView.Y = y0 + scale*bounds[2] + 32
FreeCAD.ActiveDocument.OutlineDrawPlot.addObject(FreeCAD.ActiveDocument.OutlineDrawUpView)
FreeCAD.ActiveDocument.recompute()
return obj