#!/usr/bin/env python

import sys
import salome

salome.salome_init()

###
### SHAPER component
###

from salome.shaper import model

model.begin()
partSet = model.moduleDocument()

### Create Part
Part_1 = model.addPart(partSet)
Part_1_doc = Part_1.document()

### Create Sketch
Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOZ"))

### Create SketchProjection
SketchProjection_1 = Sketch_1.addProjection(model.selection("EDGE", "PartSet/OZ"), False)
SketchLine_1 = SketchProjection_1.createdFeature()

### Create SketchArc
SketchArc_1 = Sketch_1.addArc(-6.864017181460244e-05, 3.455204956124555e-16, 0, 30, 0, -30, False)
Sketch_1.setCoincident(SketchLine_1.result(), SketchArc_1.startPoint(), True)

### Create SketchLine
SketchLine_2 = Sketch_1.addLine(0, -30, 0, 30)
SketchLine_2.setAuxiliary(True)
Sketch_1.setCoincident(SketchArc_1.endPoint(), SketchLine_2.startPoint(), True)
Sketch_1.setCoincident(SketchArc_1.startPoint(), SketchLine_2.endPoint(), True)
Sketch_1.setVertical(SketchLine_2.result(), True)

### Create SketchArc
SketchArc_2 = Sketch_1.addArc(0, 0, 0, 30, 0, -30, True)
Sketch_1.setCoincident(SketchArc_1.startPoint(), SketchArc_2.startPoint(), True)
Sketch_1.setCoincident(SketchArc_1.endPoint(), SketchArc_2.endPoint(), True)
Sketch_1.setCoincident(SketchArc_2.center(), SketchLine_1.result(), True)
Sketch_1.setRadius(SketchArc_2.results()[1], 30, True)

### Create SketchProjection
SketchProjection_2 = Sketch_1.addProjection(model.selection("EDGE", "PartSet/OX"), False)
SketchLine_3 = SketchProjection_2.createdFeature()
Sketch_1.setCoincident(SketchArc_2.center(), SketchLine_3.result(), True)
Sketch_1.setEqual(SketchArc_1.results()[1], SketchArc_2.results()[1], True)
model.do()

### Create Extrusion
Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("EDGE", "Sketch_1/SketchArc_2_2"), model.selection("EDGE", "Sketch_1/SketchArc_1_2")], model.selection("EDGE", "PartSet/OY"), 100, 0)

### Create Shell
Shell_1 = model.addShell(Part_1_doc, [model.selection("FACE", "Extrusion_1_1"), model.selection("FACE", "Extrusion_1_2")])

### Create Group
Group_1 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Shell_1_1/Modified_Face&Sketch_1/SketchArc_2_2")])
Group_1.setName("top")
Group_1.result().setName("top")

### Create Group
Group_2 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Shell_1_1/Modified_Face&Sketch_1/SketchArc_1_2")])
Group_2.setName("bottom")
Group_2.result().setName("bottom")

model.end()

###
### SHAPERSTUDY component
###

model.publishToShaperStudy()
import SHAPERSTUDY
Shell_1_1, top, bottom, = SHAPERSTUDY.shape(model.featureStringId(Shell_1))
###
### SMESH component
###

import  SMESH, SALOMEDS
from salome.smesh import smeshBuilder

smesh = smeshBuilder.New()
#smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
                                 # multiples meshes built in parallel, complex and numerous mesh edition (performance)

Mesh_1 = smesh.Mesh(Shell_1_1,'Mesh_1')
Regular_1D = Mesh_1.Segment()
Local_Length_1 = Regular_1D.LocalLength(10)
Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
top_1 = Mesh_1.GroupOnGeom(top,'top',SMESH.FACE)
bottom_1 = Mesh_1.GroupOnGeom(bottom,'bottom',SMESH.FACE)
isDone = Mesh_1.Compute()
Mesh_1.CheckCompute()

top_nodes = Mesh_1.CreateDimGroup( [ top_1 ], SMESH.NODE, 'top_nodes', SMESH.ALL_NODES, 0)
bottom_nodes = Mesh_1.CreateDimGroup( [ bottom_1 ], SMESH.NODE, 'bottom_nodes', SMESH.ALL_NODES, 0)
common_nodes = Mesh_1.GetMesh().IntersectListOfGroups( [ top_nodes, bottom_nodes ], 'common_nodes' )
[ affectedFaces, affectedEdges ] = Mesh_1.AffectedElemGroupsInRegion( [ common_nodes ], [], None )
common_nodes_double = Mesh_1.DoubleNodeGroups( [ common_nodes ], [ affectedFaces, affectedEdges ] ,True)



if salome.sg.hasDesktop():
  salome.sg.updateObjBrowser()
