#  -*- coding: iso-8859-1 -*-
#  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
#
#  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
#
#  This library is free software; you can redistribute it and/or
#  modify it under the terms of the GNU Lesser General Public
#  License as published by the Free Software Foundation; either
#  version 2.1 of the License.
#
#  This library 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
#  Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public
#  License along with this library; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
#
#  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#

#==============================================================================
#  Info.
#  Bug (from script, bug)   : tube_geom_corrected.py, PAL5243
#  Modified                 : 25/11/2004
#  Author                   : Kovaltchuk Alexey
#  Project                  : PAL/SALOME
#==============================================================================
# Geometrie du cas test
#
import salome
from geompy import *

#
# base de l'assemblage
#
L_base = 300.
l_base = 150.
h_base = 75.
e_base = 6.

base_bot = MakeBox(0.,0.,0.,L_base,l_base,e_base)
base_top = MakeTranslation(base_bot,0.,0.,h_base-e_base)
base_front = MakeBox(0,0,0,L_base,e_base,h_base)
base_rear = MakeTranslation(base_front,0.,l_base,0.)

tmp = MakeBoolean(base_top,base_rear,3)
tmp = MakeBoolean(tmp,base_bot,3)
base = MakeBoolean(tmp,base_front,3)

addToStudy(base,"base")
#
# traverse
#
L_trav = 60.
h_trav = 300.
e_trav = 7.
marge = 15.

flange_left = MakeBox(0.,0.,0,e_trav,L_trav,h_trav)
flange_right = MakeTranslation(flange_left,L_trav-e_trav,0.,0.)
flange_front = MakeBox(0.,0.,0,L_trav,e_trav,h_trav)
flange_rear = MakeTranslation(flange_front,0.,L_trav-e_trav,0.)

tmp = MakeBoolean(flange_left,flange_rear,3)
tmp = MakeBoolean(tmp,flange_right,3)
flange = MakeBoolean(tmp,flange_front,3)
#
# left chamfer
#
import math
length = e_trav/math.sin(math.pi/4.)
p1 = MakeVertex(0,0,0)
p2 = MakeVertex(0,1,0)
yaxis = MakeVector(p1, p2)
cut_left = MakeBox(0.,-marge,0.,-length,L_trav+marge,length)
cut_left = MakeRotation(cut_left,yaxis,-math.pi/4.)
cut_left = MakeTranslation(cut_left,e_trav,0.,0.)
#
# right chamfer
#
symPlaneYZ = MakePlane(
     MakeVertex(L_trav/2.,0.,0.),
     MakeVector(p1,MakeVertex(1.,0.,0.)), 10000. )
cut_right = MakeMirrorByPlane(cut_left,symPlaneYZ)
#
# front chamfer
#
xaxis = MakeVector(p1,MakeVertex(1.,0.,0.))
cut_front = MakeBox(-marge,0.,0.,L_trav+marge,length,length)
cut_front = MakeRotation(cut_front,xaxis,3.*math.pi/4.)
cut_front = MakeTranslation(cut_front,0.,e_trav,0.)
#
# rear chamfer
#
symPlaneXZ = MakePlane(
     MakeVertex(0.,L_trav/2.,0.),
     MakeVector(p1,MakeVertex(0.,1.,0.)), 10000. )
cut_rear = MakeMirrorByPlane(cut_front,symPlaneXZ)
#
# chamfer
#
trav = MakeBoolean(flange,cut_left,2)
trav = MakeBoolean(trav,cut_right,2)
trav = MakeBoolean(trav,cut_front,2)
trav = MakeBoolean(trav,cut_rear,2)
trav = MakeTranslation(trav,
                       L_base/2.-L_trav/2.,
                       l_base/2.-L_trav/2.,
                       h_base)
addToStudy(trav,"trav")
#
# Welding
#
ground = MakeBox(-1000.,-1000.,0.,1000.,1000.,-1000.)
weld_left = MakeBoolean(cut_left,ground,2)
weld_right = MakeBoolean(cut_right,ground,2)
weld_front = MakeBoolean(cut_front,ground,2)
weld_rear = MakeBoolean(cut_rear,ground,2)
#
# Assembly
#
coarse_weld = MakeBoolean(weld_left,weld_rear,3)
coarse_weld = MakeBoolean(coarse_weld,weld_right,3)
coarse_weld = MakeBoolean(coarse_weld,weld_front,3)
#
# Cleaners
#
left_cleaner = MakeBox(0.,-10*marge,0.,-10.*marge,10.*marge,10.*marge)
left_cleaner = MakeRotation(left_cleaner,yaxis,math.pi/4.)
left_cleaner = MakeTranslation(left_cleaner,-e_trav-2.*marge,0.,-2.*marge)

right_cleaner = MakeMirrorByPlane(left_cleaner,symPlaneYZ)

front_cleaner = MakeBox(-10*marge,0.,0.,10.*marge,10.*marge,10.*marge)
front_cleaner = MakeRotation(front_cleaner,xaxis,3.*math.pi/4.)
front_cleaner = MakeTranslation(front_cleaner,0.,2.*marge-e_trav,2.*marge)

rear_cleaner = MakeMirrorByPlane(front_cleaner,symPlaneXZ)
#
# Welding
#
weld = MakeBoolean(coarse_weld,left_cleaner,2)
weld = MakeBoolean(weld,rear_cleaner,2)
weld = MakeBoolean(weld,right_cleaner,2)
weld = MakeBoolean(weld,front_cleaner,2)
weld = MakeTranslation(weld,
                       L_base/2.-L_trav/2.,
                       l_base/2.-L_trav/2.,
                       h_base)
weldId = addToStudy(weld,"weld")
#
# Assembly
#
assemblage = Partition([base ,weld ,trav])
assemblageId = addToStudy(assemblage, "assemblage")
salome.sg.updateObjBrowser(1)
#
# Display
#
## gg.createAndDisplayGO(assemblageId)
## gg.createAndDisplayGO(baseId)
## gg.setTransparency(baseId,0.5)
## gg.setDisplayMode(baseId,1)
## gg.setColor(baseId,255,0,0)
## gg.createAndDisplayGO(travId)
## gg.setTransparency(travId,0.5)
## gg.setDisplayMode(travId,1)
## gg.setColor(travId,0,255,0)


