Esempio n. 1
0
        public static TwoAxisRealignment Create(string symmetry, string axisId1, string axisId2)
        {
            SymmetryBuilder    builder = SymmetryBuilderFactory.CreateFromSymmetryName(symmetry);
            TwoAxisRealignment result  = Create(builder, axisId1, axisId2);

            return(result);
        }
Esempio n. 2
0
        public static TwoAxisRealignment Create(SymmetryBuilder builder, int multiplicity1, int multiplicity2)
        {
            string             axis1  = builder.GetUnits().First(axis => builder.GetMultiplicity(axis) == multiplicity1);
            string             axis2  = builder.GetUnits().First(axis => builder.GetMultiplicity(axis) == multiplicity2 && axis != axis1);
            TwoAxisRealignment result = Create(builder, axis1, axis2);

            return(result);
        }
Esempio n. 3
0
        public static TwoAxisRealignment Create(string symmetry, int multiplicity1, int multiplicity2)
        {
            SymmetryBuilder    builder = SymmetryBuilderFactory.CreateFromSymmetryName(symmetry);
            string             axis1   = builder.GetUnits().First(axis => builder.GetMultiplicity(axis) == multiplicity1);
            string             axis2   = builder.GetUnits().First(axis => builder.GetMultiplicity(axis) == multiplicity2 && axis != axis1);
            TwoAxisRealignment result  = Create(symmetry, axis1, axis2);

            return(result);
        }
Esempio n. 4
0
        public static TwoAxisRealignment Create(SymmetryBuilder builder, string axis1, string axis2)
        {
            CoordinateSystem coordinateSystem1 = builder.GetPrincipalCoordinateSystem(axis1);
            CoordinateSystem coordinateSystem2 = builder.GetPrincipalCoordinateSystem(axis2);
            Line             principalAxis1    = Line.CreateFromPointAndDirection(coordinateSystem1.Translation, coordinateSystem1.UnitX); // The rosetta symdefs axes are along X of each transformed coordinate system, but something not requiring foreknowledge would be nice.
            Line             principalAxis2    = Line.CreateFromPointAndDirection(coordinateSystem2.Translation, coordinateSystem2.UnitX); // The rosetta symdefs axes are along X of each transformed coordinate system, but something not requiring foreknowledge would be nice.
            Quaternion       premultiply       = Quaternion.Inverse(coordinateSystem1.Transform.Rotation);

            principalAxis1.Direction = Vector3.Transform(principalAxis1.Direction, premultiply);
            principalAxis2.Direction = Vector3.Transform(principalAxis2.Direction, premultiply);
            principalAxis1.Point     = Vector3.Transform(principalAxis1.Point, premultiply);
            principalAxis2.Point     = Vector3.Transform(principalAxis2.Point, premultiply);
            float angleDegrees        = (float)VectorMath.GetAngleDegrees(principalAxis1.Direction, principalAxis2.Direction);
            TwoAxisRealignment result = TwoAxisRealignment.Create(angleDegrees, principalAxis1, principalAxis2);

            return(result);
        }
Esempio n. 5
0
 public static bool TryCreate(string symmetry, int multiplicity1, int multiplicity2, out TwoAxisRealignment realignment)
 {
     try
     {
         realignment = Create(symmetry, multiplicity1, multiplicity2);
         return(true);
     }
     catch
     {
         realignment = null;
     }
     return(false);
 }