# Basic Properties

import salome
salome.salome_init_without_session()

from salome.geom import geomBuilder
from salome.smesh import smeshBuilder

geom_builder = geomBuilder.New()
smesh_builder = smeshBuilder.New()

# create a box
box = geom_builder.MakeBoxDXDYDZ(100,100,100)
face = geom_builder.SubShapeAllSorted(box, geom_builder.ShapeType['FACE'])[0]

# mesh a box
mesh = smesh_builder.Mesh(box)
submesh_1d = mesh.Segment().NumberOfSegments(5)
submesh_2d = mesh.Quadrangle()
submesh_3d = mesh.Hexahedron()
submesh_2d_face = mesh.Triangle(face)
if not mesh.Compute(): raise Exception("Error when computing Mesh")

# create a group

group_2d = mesh.Group(face)

# compute basic properties

print("Get basic properties: approach 1 (via measurements tool) ----")

measure = smesh_builder.CreateMeasurements()

print("* for mesh:")
print("  length:", measure.Length(mesh.mesh))
print("  area:",   measure.Area(mesh.mesh))
print("  volume:", measure.Volume(mesh.mesh))

print("* for group (2d):")
print("  length:", measure.Length(group_2d))
print("  area:",   measure.Area(group_2d))
print("  volume:", measure.Volume(group_2d))

print("* for submesh (2d):")
print("  length:", measure.Length(submesh_2d_face.GetSubMesh()))
print("  area:",   measure.Area(submesh_2d_face.GetSubMesh()))
print("  volume:", measure.Volume(submesh_2d_face.GetSubMesh()))

measure.UnRegister()

print("Get basic properties: approach 2 (via smeshBuilder) ----")

print("* for mesh:")
print("  length:", smesh_builder.GetLength(mesh))
print("  area:",   smesh_builder.GetArea(mesh))
print("  volume:", smesh_builder.GetVolume(mesh))

print("* for group (2d):")
print("  length:", smesh_builder.GetLength(group_2d))
print("  area:",   smesh_builder.GetArea(group_2d))
print("  volume:", smesh_builder.GetVolume(group_2d))

print("* for submesh (2d):")
print("  length:", smesh_builder.GetLength(submesh_2d_face))
print("  area:",   smesh_builder.GetArea(submesh_2d_face))
print("  volume:", smesh_builder.GetVolume(submesh_2d_face))

print("Get basic properties: approach 3 (via smeshBuilder.Mesh) ----")

print("* for mesh:")
print("  length:", mesh.GetLength())
print("  area:",   mesh.GetArea())
print("  volume:", mesh.GetVolume())

print("* for group (2d): unsupported")

print("* for submesh (2d): unsupported")