Checking the meta tags on this says public, so therefore I believe I can post it freely. I did not write it however I believe it could be helpful. In the endeavor of understanding the CR2. If the people that wrote it have a problem with me for posting their work you can contact me and I will remove. Hopefully this will not happen and I wish to thank the people that published is document.
This information was discovered by examining the CR2 and playing with it's settings. Hopefully MC will decide to document the CR2 themselves. But until then I'll tell what I've learned. Some of this was learned by experimentation, much hwas told to me by Steve Cooper, and some by Larry Weinberg.
The CR2 is broken up into about 15 sections. Some of these might be classified as different parts, but I don't know what some parts do, so they are lumped. The examples and line numbers that follow are taken from Casual Man.CR2
1The body number is related to what figure number it was when it was saved to the library. The same number is used throughout the file.
It is the base of the figure and has basically the same properties as props and other non-posable objects. In addition, most of the settings that appear in the movable parts of the figure are the same or very similar to how they appear in the body.
The first line (line 279 in the CR2) is actor BODY:2. As before, the normal format for headers in the CR2 is "actor" BODYPART:number.
Then there is an open bracket. (line 280) All settings of the CR2 are contained inside brackets. These are always closed with a "}". There are also multiple depths of bracketing, as shown by the indents. One of the more common reasons why poser will blow up loading a hacked up a CR2 is an unmatched bracket. What I show here is an HTML approximation of the text file, but it looks nearly identical to the original.
Then we have the name of the part. (line 281) In this case it is BODY, but it is not shown this way in the example. What is shown in the example is "GetStringRes(1024,1)". That is a call by poser to show the first variable in the RSR, or the resource fork on a Mac. You can substitute another value for this, but be certain that it matches what any child object calls it. In the case of the body, the child is the hip.
Then is says "off". This makes the part both invisible and un-selectable with the mouse (on the image). It still shows on the elements menu. All the other body parts have this set to "on".
Then we have bend. (line 283) It is the bend parameter for the body. "bend 1" on. Of course, it doesn't really do anything on the "body" element. It does have a great deal of effect on a visible and pose able elements that make up the body. Bend is not inherited. Each element has it's own bend parameters.
hidden (line 285) set to 1 causes the part to be set to hidden initially. Most other parts will have it set to 0.
add To Menu (line 286) is basically obsolete. It is a file loading command that instructs Poser to add elements to the menu. It now seems to only have an effect if hidden is set to 1. Then it makes the part not show up on the current selected element menu.
Then we have in cludeIn Depth Cue. This determines which actors are included in the scene bounding box when depth cueing is enabled.
Then the parent is specified. In this case it is UNIVERSE, showing that the body is not parented to any other object.
After that we have the channels section. (line 289) This makes up the majority of the part. These control the figures location in space and it's size.
The first few parameters are set to invisible. Exactly what these do I'm not certain. The only visible channels are the propagatingScale channels (which size the entire figure), the rotation channels, (which control the orientation, and the translation channels (which determine where the figure is located in space).
In somewhat more detail, the init Value (line 294) is the setting the channel has when the figure is opened.
Hidden 1 (line 295) makes the channel hidden.
The forceLimits 0 setting does not enforce the limits on the channel. Setting forceLimits 1 causes poser to enforce the minimum and maximum limits for that channel, whether you have the "use limits" switch in poser turned on or not. This can be very useful, under the right circumstances. On a hidden channel it might result in some problems, as there is no warning that the limit is hit. The figure will just stop a motion at a given point.
min -100000 and max 100000 are the limits for the channel. (lines 297 & 298) These are the defaults if they are not explicitly set. You can set them to any vaule you want. When used with forceLimits you can do things that seem imposible.
The tracking Scale setting is a scale factor for each individual parameter dial's value based on mouse movement.
Next is the keys section. Well, I don't know what this does. The "k 0 -0.00771635" is related to this in some way, but have not beaten on it enough to determine.
The interpStyleLocked (line 305) parameter is a special flag which determines a fixed style of interpolation for that bodypart. For example, Poser 2 figure hands are constant interpolation only. This is almost always set to 0 (I need to get a better explanation about few of these.).
Then we have the rest of the channels. These all pretty much do the same thing, so I'll skip to the end.
We have the endPoint, the origin, the orientation, displayOrigin, displayMode and CustomMaterial lines before the entire body block is closed.
As can be be clearly seen, the endPoint and origin are both a set of XYZ coordinates. Exactly where on the figure these appear I'm not certain. As they are used inside of poser I would suggest that you adjust the size and location in Poser rather than trying to tweak the endPoint and origin. But if you figure out something cool that can be done with them please get in touch.
The orientation parameter is another XYZ set, but it should be angles? I'm a little uncertain as to how this works.
Display origin puts that little green cross at the figure origin if it is 1.
The display Mode parameter what mode the figure is shown in. For example, "displayMode SHADEDOUTLINE" is lit wireframe. Almost always this will be USEPARENT, which causes it to use the style that the entire scene (PZ3) is in. This should allow you to do some wacky looking stuff., if you adjust the setting for a body part....
The "customMaterial 0" means it does not have any custom materials. I have noticed that props and hair (pp2 and hr2) files have customMaterial 32, but figures seem to always have it set to 0. Exactly what this means I don't know. However, if you have a figure saved with props, the surface materials for the prop will immediatly follow the prop.
Here the parent is BODY:2. Compare to the Body parent of UNIVERSE.
Once again the channels are in the order provided. It does matter, so don't change it and expect no problems. The first set are joint parameters, from here to here. These are not the joint parameters that are adjusted in the hip, they are the joint parameters that are set from the hip and thights. If you look carefully you will see that values are the same in bortth the hip and the body part being addrssed. So the hip joint "jointX abdomen_jointx" is the same as the abdomen joint "jointX jointx". The main joint parameter that is set from the hip is the center point.
The center point is actually not a channel, it is set up at the end on the hip's structure. Notice the origin and end point are what are shown in the centerpoint joint parameter screen shot.
Due to the fact that these are set elsewhere we will examine the other joint parameters in detail when looking at the other body parts.
Most of the channels in the hip are hidden. Most body parts have some hidden channels, the hip has more than some and less than others. Next we will look at the visable dials.
The first is taper. This is pretty simple.
Then we have scale. This scales the entire part. After this are the scaling controls for the individual axis; scaleX, scaleY, scaleZ. They are pretty much self explanitory.
Then we have the rotation channels, the rotateZ, rotateX and rotateY channels. As the hip is the base of the figure this will rotate the entire figure.
The x, y ,and z offset translation channels are next. I don't know what these hidden channels do.
Then we have the visable translation channels, xtran, ytran, and ztran. These move the figure. Only the base of figures normally have these channels visable. However, enabling inverse kinematics makes the translation channels at the end of the IK chain visable to allow fine adjustments.
The last channel is the geomChan. What does it do? I don't know. Only the hip has it, so it may be related to the hip being the figure base.
The abdomen begins with the same set of stuff as the hip. Then it has the chest joints, which are adjusted from the chest but repeated here. Then we reach the visable abdomen channels. In general, it works the same as the hip does.
There the scaling controls, followed by the joint parameters. Lets look at the joint parameters now, as these are where things start to get complex.
If you look at the .PHI for a human figure you will also see "2 abdomen yzx". This makes the primary axis for the abdome to be the y axis. If we look at the y axis joint parameter you will see that it has a center point, a start point and an end point. If you look at in the joint parameters view you will see this, with the twist joint being the white line.
If you scroll down the cr2 you can see that the joints come in two different styles. The primary rotation joint in a set is diffrerent from the other two (z x)
The second and third rotation order joints have multiple angles and a center. They appear as a set of 4 intersecting lines in the joint parmeters windows.
This is the reason that getting the rotation order of the joints correct in the phi is so important. If you are making a model and realize that you have the rotation order wrong somewhere in the model it is not trivial to change this. It can be done, but it is probably easier to reimport the PHI, depending on how much work has been done.