#!/usr/bin/python
# -*- coding: iso-8859-1 -*-
import salome
import SALOME
import sys
import platform
import os
import math
import re
import string
from smesh import *
from geompy import *
import geompy
import GEOM
geom = geompy.geom
ShapeType = geompy.ShapeType
import SALOMEDS
import smesh
import SMESH
import StdMeshers
import NETGENPlugin
import CommonFunctions
#smesh = smesh.smesh

#Created: 28/02/2007
#Modified by Sergey Mozokhin - parametrization of holes
#Based on "AngleBracket.py" script

#%Geometry creation%
#Main parameters of model
#Radius of external central cylinder
Radius_1 = 17.5
#Radius of internal central cylinder
Radius_2 = 16

#Raidus of holes
Radius_3 = 5

#Radius of fillets
Fillet_radius_1 = 8
Fillet_radius_2 = 10

Wire_1 = geompy.MakeSketcher("Sketcher:F 70 0:TT 0 0:R -60:L 100:R 90:L -6:R 90:L -100:TT 70 6:TT 70 0:WW", [0, 0, 0, 0, 0, 1, 1, 0, 0])
edges_1 = geompy.SubShapeAll(Wire_1, geompy.ShapeType["EDGE"])
Vertex_1 = geompy.MakeVertex(70, 6, 0)
Vertex_2 = geompy.MakeVertex(-10, 6, 0)
Line_1 = geompy.MakeLineTwoPnt(Vertex_1, Vertex_2)
Partition_3 = geompy.MakePartition([edges_1[3], Line_1], [], [], [], geompy.ShapeType["EDGE"], 0, [])
edges_2 = geompy.SubShapeAll(Partition_3, geompy.ShapeType["EDGE"])
Wire_2 = geompy.MakeWire([edges_1[0], edges_1[1], edges_1[2], edges_1[5], edges_2[0], edges_2[2]])
Vector_1 = geompy.MakeVectorDXDYDZ(0, 0, 130)
ProcessShape_1 = geompy.ProcessShape(Wire_2, ["FixShape", "FixFaceSize", "DropSmallEdges", "SameParameter"], ["FixShape.Tolerance3d", "FixShape.MaxTolerance3d", "FixFaceSize.Tolerance", "DropSmallEdges.Tolerance3d", "SameParameter.Tolerance3d"], ["0.0000001", "1", "0.05", "0.05", "0.0000001"])
Face_1 = geompy.MakeFaceWires([ProcessShape_1], 1)
Extrusion_2 = geompy.MakePrismVecH(Face_1, Vector_1, 120)
Fillet_4 = geompy.MakeFillet(Extrusion_2, Fillet_radius_2, geompy.ShapeType["EDGE"], [11, 12, 32, 33])
Fillet_5 = geompy.MakeFillet(Fillet_4, 10, geompy.ShapeType["EDGE"], [41])
Fillet_6 = geompy.MakeFillet(Fillet_5, 16, geompy.ShapeType["EDGE"], [69])
Vertex_6 = geompy.MakeVertex(70, 59, 60)
Vector_2 = geompy.MakeVectorDXDYDZ(130, 0, 0)
Circle_1 = geompy.MakeCircle(Vertex_6, Vector_2, Radius_1)
Circle_2 = geompy.MakeCircle(Vertex_6, Vector_2, Radius_2)
Face_2 = geompy.MakeFaceWires([Circle_1, Circle_2], 1)
Extrusion_3 = geompy.MakePrismVecH(Face_2, Vector_2, -120)
Partition_4 = geompy.MakePartition([Fillet_6, Extrusion_3], [], [], [], geompy.ShapeType["SOLID"], 0, [])
solids_1 = geompy.SubShapeAll(Partition_4, geompy.ShapeType["SOLID"])
Fuse_1 = geompy.MakeFuse(Fillet_6, solids_1[3])
solids_2 = geompy.SubShapeAll(Fuse_1, geompy.ShapeType["SOLID"])
Wire_3 = geompy.MakeSketcher("Sketcher:F 0 56:TT 44.5 56:TT 42.5 64:TT 0 64:TT 0 56:WW", [0, 0, 0, 1, 0, 0, 0, 1, 0])
Face_3 = geompy.MakeFaceWires([Wire_3], 1)
Extrusion_4 = geompy.MakePrismVecH(Face_3, Vector_2, 70)
Extrusion_5 = geompy.MakePrismVecH(Face_3, Vector_2, -30)
Fuse_2 = geompy.MakeFuse(Extrusion_4, Extrusion_5)
solids_3 = geompy.SubShapeAll(Fuse_2, geompy.ShapeType["SOLID"])
Partition_5 = geompy.MakePartition([solids_2[0], solids_3[0]], [], [], [], geompy.ShapeType["SOLID"], 0, [])
[Solid_6,Solid_8,Main_2,Solid_10,Solid_11] = geompy.SubShapeAll(Partition_5, geompy.ShapeType["SOLID"])
Fuse_3 = geompy.MakeFuse(Main_2, solids_2[0])
[Main_3] = geompy.SubShapeAll(Fuse_3, geompy.ShapeType["SOLID"])
Extrusion_6 = geompy.MakePrismVecH(Face_3, Vector_2, 50)
Fuse_4 = geompy.MakeFuse(Extrusion_6, Extrusion_5)
Partition_6 = geompy.MakePartition(solids_2, [Fuse_4], [], [], geompy.ShapeType["SOLID"], 0, [])
[Solid_9,Solid_12] = geompy.SubShapeAll(Partition_6, geompy.ShapeType["SOLID"])
Partition_7 = geompy.MakePartition([solids_2[0], Fuse_4], [], [], [], geompy.ShapeType["SOLID"], 0, [])
[Solid_13,Solid_14,Solid_15,Solid_16,Solid_17] = geompy.SubShapeAll(Partition_7, geompy.ShapeType["SOLID"])
Fuse_5 = geompy.MakeFuse(Solid_15, solids_2[0])
Fillet_7 = geompy.MakeFillet(Fuse_5, Fillet_radius_1, geompy.ShapeType["EDGE"], [86])
Fillet_8 = geompy.MakeFillet(Fillet_7, Fillet_radius_1, geompy.ShapeType["EDGE"], [74])
Fillet_9 = geompy.MakeFillet(Fillet_8, Fillet_radius_1, geompy.ShapeType["EDGE"], [11])
[Main_4] = geompy.SubShapeAll(Fillet_9, geompy.ShapeType["SOLID"])
Vertex_7 = geompy.MakeVertex(50, 0, 20)
Dy = geompy.MakeVectorDXDYDZ(0, 120, 0)
Translation_1 = geompy.MakeTranslation(Vertex_7, 10, 0, -10)
Circle_3 = geompy.MakeCircle(Translation_1, Dy, Radius_3)
Face_41 = geompy.MakeFaceWires([Circle_3], 1)
Extrusion_7 = geompy.MakePrismVecH(Face_41, Dy, 30)
Translation_2 = geompy.MakeTranslation(Extrusion_7, -40, 0, 0)
Translation_3 = geompy.MakeTranslation(Extrusion_7, -40, 0, 100)
Translation_4 = geompy.MakeTranslation(Extrusion_7, 0, 0, 100)
Cut_1 = geompy.MakeCut(Main_4, Extrusion_7)
Cut_2 = geompy.MakeCut(Cut_1, Translation_2)
Cut_3 = geompy.MakeCut(Cut_2, Translation_3)
Cut_4 = geompy.MakeCut(Cut_3, Translation_4)
Rotation_1 = geompy.MakeRotation(Translation_2, Vector_1, 120*math.pi/180.0)
Wire_4 = geompy.MakeSketcher("Sketcher:F 45.55 50:T -25 0:T -35 0", [-27.22404845270363, 47.15343510779957, 60, -0.8660254037844386, -0.5, 0, -0.5, 0.8660254037844386, 0])
[Vertex_8,Vertex_9,Vertex_10] = geompy.SubShapeAll(Wire_4, geompy.ShapeType["VERTEX"])
Wire_5 = geompy.MakeSketcher("Sketcher:F -34.45 50:T 15 0", [-27.22404845270363, 47.15343510779957, 60, -0.8660254037844386, -0.5, 0, -0.5, 0.8660254037844386, 0])
[Vertex_11,Vertex_12] = geompy.SubShapeAll(Wire_5, geompy.ShapeType["VERTEX"])
Translation_5 = geompy.MakeTranslationTwoPoints(Rotation_1, Vertex_11, Vertex_10)
[Face_42,Face_43,Face_44] = geompy.SubShapeAll(Translation_5, geompy.ShapeType["FACE"])
Translation_6 = geompy.MakeTranslationTwoPoints(Rotation_1, Vertex_11, Vertex_9)
LocalCS_1 = geompy.MakeMarker(-32.99038105676657, 27.14101615137755, 10, -0.5, 0.8660254037844389, 0, -0.8660254037844387, -0.5, 0)
Wire_6 = geompy.MakeSketcher("Sketcher:F -0.00190309 -15:T 0 -50", [-32.99038105676657, 27.14101615137754, 10, 0, 0, 1, -0.5, 0.8660254037844389, 0])
[Vertex_13,Vertex_14] = geompy.SubShapeAll(Wire_6, geompy.ShapeType["VERTEX"])
Vector_3 = geompy.MakeVector(Vertex_13, Vertex_14)
Extrusion_8 = geompy.MakePrismVecH(Face_43, Vector_3, 20)
Translation_7 = geompy.MakeTranslationTwoPoints(Extrusion_8, Vertex_13, Vertex_9)
Cut_5 = geompy.MakeCut(Cut_4, Extrusion_8)
Main_6 = geompy.MakeCut(Cut_5, Translation_7)
Vector_4 = geompy.MakeVector(Vertex_10, Vertex_9)
Plane_1 = geompy.MakePlane(Vertex_9, Vector_4, 150)
Partition_8 = geompy.MakePartition([Translation_7], [Plane_1], [], [], geompy.ShapeType["FACE"], 0, [])
[Face_45,Face_46,profile,Face_48,Face_49,Face_50,Face_51,Face_52] = geompy.SubShapeAll(Partition_8, geompy.ShapeType["FACE"])
Extrusion_9 = geompy.MakePrismVecH(profile, Vector_4, -35)
Fuse_6 = geompy.MakeFuse(Extrusion_9, Translation_7)
Fuse_7 = geompy.MakeFuse(Fuse_6, Extrusion_8)
Translation_8 = geompy.MakeTranslation(Fuse_7, 0, 0, 100)
AngleBracket = geompy.MakeCut(Main_6, Translation_8)
geompy.addToStudy(AngleBracket, "AngleBracket")
if geompy.salome.sg.hasDesktop():
	geompy.salome.sg.updateObjBrowser(1)

#%Mesh creation%
#^Wire discretisation: AverageLength=3^
#^Triangle(Mefisto)  : Max.ElementArea=3^
#^Tetrahedron(NETGEN) : Max.ElementVolume=100^

mesh = smesh.Mesh(AngleBracket, "AngleBracket")

averageLength = 3
algo1 = mesh.Segment()
hypNbSeg = algo1.LocalLength(averageLength)
smesh.SetName(hypNbSeg, "AverageLength_3")

maxElementArea = 3
algo2 = mesh.Triangle(smesh.MEFISTO)
hypArea = algo2.MaxElementArea(maxElementArea)
smesh.SetName(hypArea, "MaxElementArea_3")

maxElementVolume = 100
algo3 = mesh.Tetrahedron(smesh.NETGEN)
hypVolume = algo3.MaxElementVolume(maxElementVolume)
smesh.SetName(hypVolume, "MaxElementVolume_100")

mesh.Compute()

#^Mesh elements checking^
CommonFunctions.CompareMeshInfos({"Nodes": [19000, 25000], "Edges": [1300, 1400], "Triangles": [33000, 40000], "Tetrahedrons": [65000, 85000]}, mesh.GetMesh(), ORDER=0, CHECK_ERROR=1)
