X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTools%2FblocFissure%2Fgmu%2FrotTrans.py;fp=src%2FTools%2FblocFissure%2Fgmu%2FrotTrans.py;h=7b8ff6e476cee960d0625dfb049c504966e156c1;hb=e9e7af000e6d84b90aaa62d06f8c28ab093b0745;hp=0000000000000000000000000000000000000000;hpb=8c0cc49261c88cde61a96c8642ac89e061ff1fd8;p=modules%2Fsmesh.git diff --git a/src/Tools/blocFissure/gmu/rotTrans.py b/src/Tools/blocFissure/gmu/rotTrans.py new file mode 100644 index 000000000..7b8ff6e47 --- /dev/null +++ b/src/Tools/blocFissure/gmu/rotTrans.py @@ -0,0 +1,57 @@ +# -*- coding: utf-8 -*- + +import logging +from geomsmesh import geompy +import math +from triedreBase import triedreBase +O, OX, OY, OZ = triedreBase() + +# ----------------------------------------------------------------------------- +# --- operateur de rotation translation d'un objet centré à l'origine + +def rotTrans(objet, orientation, point, normal, trace = False): + """ + Déplacement par rotation translation d'un objet centré à l'origine, vers un point de la surface de la pièce saine + dans laquelle on insère le défaut. + @param objet : objet original centré à l'origine (geomObject) + @param orientation : rotation selon OX de l'objet original (degrés) + @param point : le point qui sera le centre de l'objet déplacé (geomObject), en général sur la surface de la pièce saine + @param normal : la normale à la surface de la pièce saine au point central (geomObject) + @return trans : objet transformé (geomObject) + """ + logging.info("start") + planXY = geompy.MakePlaneLCS(None, 2000, 1) + projXY = geompy.MakeProjection(normal, planXY) + [v1,v2] = geompy.ExtractShapes(projXY, geompy.ShapeType["VERTEX"], False) + xyz1 = geompy.PointCoordinates(v1) + xyz2 = geompy.PointCoordinates(v2) + x = xyz2[0] - xyz1[0] + y = xyz2[1] - xyz1[1] + sinalpha = y / math.sqrt(x*x + y*y) + cosalpha = x / math.sqrt(x*x + y*y) + alpha = math.asin(sinalpha) + if cosalpha < 0: + alpha = math.pi -alpha + + beta = geompy.GetAngleRadians(OZ, normal) + [v1,v2] = geompy.ExtractShapes(normal, geompy.ShapeType["VERTEX"], False) + xyz1 = geompy.PointCoordinates(v1) + xyz2 = geompy.PointCoordinates(v2) + z = xyz2[2] - xyz1[2] + if z < 0: + beta = math.pi -beta + + rot0 = geompy.MakeRotation(objet, OX, orientation*math.pi/180.0) + rot1 = geompy.MakeRotation(rot0, OZ, alpha) + axe2 = geompy.MakeRotation(OY, OZ, alpha) + rot2 = geompy.MakeRotation(rot1, axe2, beta -math.pi/2.) + logging.debug("alpha",alpha) + logging.debug("beta",beta) + if trace: + geompy.addToStudy( rot1, 'rot1' ) + geompy.addToStudy( axe2, 'axe2' ) + geompy.addToStudy( rot2, 'rot2' ) + + xyz = geompy.PointCoordinates(point) + trans = geompy.MakeTranslation(rot2, xyz[0], xyz[1], xyz[2]) + return trans