Hi, LetterRip. I am definitely interested in learning as much as I can handle on this topic. I have already tried to account for rotation order issues while constructing this. Unfortunately, regulating the rotation orders upon Blender export really doesn’t seem to solve the Poser import problems. (Note that import into Blender is fine. Import into Poser is a problem.) In fact, I’ve encountered a couple of cases in which Poser imports are better when I use the incorrect rotation order for the target figure. (?!?) Hmm. I keep reading about the “fuzzy” nature of quat to euler/matrix to euler conversion, however, and my week of testing slowly ruled out one thing after another until it looks like the conversion method may be the source of the inaccuracies I’m seeing. Then again, I’m no expert, and I’m also a math doofus.

If you have any links or resources to share, I’d be thankful. I’ve done a lot of digging, including through the Blender source, but I haven’t yet found a better solution to the limitations in the current export method.

Are you suggesting that the order of processing is important, during conversion? Reevan McKay’s BVH export script seems to suggest that, offering different conversion routines for each order. But I adapted the below from his code, and it was far less effective than what I posted above… I also tried going through axis-angle, two matrix methods, and two other direct quat to euler methods. The version I post above is the only one which returned results as good as (actually better than, for my needs) the native Blender processing.

```
def mat3ToRotOrder(m,order):
#adapted from Reevan McKay's BVH export script
PI=3.14159
if order == [0,1,2]: a,b,c,d,e,f,g,h = (m[0][2],-m[1][2],m[2][2],-m[0][1],m[0][0],m[1][0],m[1][1],m[1][0])
if order == [0,2,1]: a,b,c,d,e,f,g,h = (-m[0][1],m[2][1],m[1][1],m[0][2],m[0][0],-m[2][0],m[2][2],-m[2][0])
if order == [1,0,2]: a,b,c,d,e,f,g,h = (-m[1][2],m[0][2],m[2][2],m[1][0],m[1][1],-m[0][1],m[0][0],-m[0][1])
if order == [1,2,0]: a,b,c,d,e,f,g,h = (m[1][0],-m[2][0],m[0][0],-m[1][2],m[1][1],m[2][1],m[2][2],m[2][1])
if order == [2,0,1]: a,b,c,d,e,f,g,h = (m[2][1],-m[0][1],m[1][1],-m[2][0],m[2][2],m[0][2],m[0][0],m[0][2])
if order == [2,1,0]: a,b,c,d,e,f,g,h = (-m[2][0],m[1][0],m[0][0],m[2][1],m[2][2],m[0][1],m[0][2],-m[0][1])
thetaY=math.asin (a)
if (thetaY<PI/2):
if (thetaY>-PI/2):
thetaZ=math.atan2(b,c)
thetaX=math.atan2(d,e)
else:
thetaZ=-math.atan2(f,g)
thetaX=0.0
else:
thetaZ=math.atan2(h,g)
thetaX=0.0
return thetaX,thetaY,thetaZ
```