public void GenerateFiducialPattern(double radius = 2.5, int numOfLines = 4) { _fiducialPattern = new List <IMarkGeometry>(); var baseLine = new MarkGeometryLine(new MarkGeometryPoint(-radius, 0), new MarkGeometryPoint(radius, 0)); var transform = GeometricArithmeticModule.GetRotationTransformationMatrix( 0, 0, Math.PI / numOfLines ); for (int i = 0; i < numOfLines; i++) { _fiducialPattern.Add((IMarkGeometry)baseLine.Clone()); baseLine.Transform(transform); } _fiducialPattern.Add(new MarkGeometryCircle(radius)); }
public Matrix4x4 ToMatrix4x4() { return(GeometricArithmeticModule.CombineTransformations( // apply scale GeometricArithmeticModule.GetScalingTransformationMatrix( ScaleX, ScaleY, ScaleZ ), // apply rotation - don't forget to convert degrees to radians GeometricArithmeticModule.GetRotationTransformationMatrix( GeometricArithmeticModule.ToRadians(RotationDegX), GeometricArithmeticModule.ToRadians(RotationDegY), GeometricArithmeticModule.ToRadians(RotationDegZ) ), // apply offset GeometricArithmeticModule.GetTranslationTransformationMatrix( OffsetX, OffsetY, OffsetZ ) )); }
// TODO: Implement mask angle align func // 1. The mask angle is measured directly by camera. // 2. The mask is rotated to compensate for the angle. // 3. The procedure continues until the angle is zero. public MVertex ConvertCADToMachineCoordinate(MVertex cadOrigin, MVertex pointOnCAD) { var transform = GeometricArithmeticModule.CombineTransformations( GeometricArithmeticModule.GetTranslationTransformationMatrix( -cadOrigin.X, -cadOrigin.Y ), GeometricArithmeticModule.GetRotationTransformationMatrix( 0, 0, Angle ), GeometricArithmeticModule.GetTranslationTransformationMatrix( OriginRelativeBEAM.X, OriginRelativeBEAM.Y ) ); var result = Vector3.Transform( new Vector3((float)pointOnCAD.X, (float)pointOnCAD.Y, 0), transform ); return(new MVertex(Inverts.X * result.X, Inverts.Y * result.Y)); }