An AcGeMatrix3d is a 4 x 4 matrix.
class AcGeMatrix3d {
double entry[4][4]; // [row][column]
};
It can represent a translation, rotation and scaling and more.
You can retrieve the coordinate system of a AcGeMatrix3d using
AcGeMatrix3d::getCoordSystem(
AcGePoint3d& origin,
AcGeVector3d& xAxis,
AcGeVector3d& yAxis,
AcGeVector3d& zAxis
);
For a matrix that represents translation and rotation the entry[4][4] values are like this:
xAxis.x, yAxis.x, zAxis.x, origin.x <- entry[0][0..3]
xAxis.y, yAxis.y, zAxis.y, origin.y <- entry[1][0..3]
xAxis.z, yAxis.z, zAxis.z, origin.z <- entry[2][0..3]
0, 0, 0, 1
origin can be seen as the translation vector of the matrix.
You want to calculate the rotation axis and angle of the matrix. This article describes a general solution for an arbitrary rotation axis.
Things are much easier, if you only have to deal with rotations around the Z axis. In this case your matrix will look like this:
xAxis.x, yAxis.x, 0, origin.x cos(a), -sin(a), 0, origin.x
xAxis.y, yAxis.y, 0, origin.y = sin(a), cos(a), 0, origin.y
0, 0, 1, origin.z 0, 0, 1, origin.z
0, 0, 0, 1 0, 0, 0, 1
With a being the Z rotation angle in radians. So you can simply calculate it like this:
a = atan2(xAxis.y, xAxis.x);
a * 180/pi gives the angle in degrees.
Thomas Brammer ● Software Developer ● imos AG ● LinkedIn ● 
If an answer solves your problem please [ACCEPT SOLUTION]. Otherwise explain why not.