More compatibility fixes

This commit is contained in:
rdb 2013-10-27 11:19:26 +00:00
parent 2b97fccd4d
commit 7ac7adcce4
7 changed files with 58 additions and 62 deletions

View File

@ -289,7 +289,16 @@ void MaxEggJoint::CreateMaxBone(void)
_node->SetWireColor(RGB(int(boneColor.x*255.0f), int(boneColor.y*255.0f), int(boneColor.z*255.0f) ));
_node->SetBoneNodeOnOff(TRUE, 0);
_node->SetRenderable(FALSE);
_node->SetName(TSTR(_egg_joint->get_name().c_str()));
#ifdef _UNICODE
TCHAR *wname [1024];
wname[1023] = 0;
mbstowcs(wname, _egg_joint->get_name().c_str(), 1023);
_node->SetName(wname);
#else
_node->SetName(_egg_joint->get_name().c_str());
#endif
_node->SetObjOffsetRot(ooquat);
if (_parent) {
_node->Detach(0, 1);

View File

@ -20,36 +20,26 @@ TypeHandle MaxNodeDesc::_type_handle;
////////////////////////////////////////////////////////////////////
// Function: MaxNodeDesc::Constructor
// Access: Public
// Description:
// Description: Creates a MaxNodeDesc. The name is copied from
// the given max node. Use from_INode to actually
// associate the desc with a given max node.
////////////////////////////////////////////////////////////////////
MaxNodeDesc::
MaxNodeDesc(MaxNodeDesc *parent, const string &name) :
Namable(name),
_parent(parent)
{
_max_node = (INode *)NULL;
_egg_group = (EggGroup *)NULL;
_egg_table = (EggTable *)NULL;
_anim = (EggXfmSAnim *)NULL;
_joint_type = JT_none;
_joint_entry = NULL;
MaxNodeDesc(MaxNodeDesc *parent, INode *max_node) :
_parent(parent) {
// Add ourselves to our parent.
if (_parent != (MaxNodeDesc *)NULL) {
_parent->_children.push_back(this);
if (max_node != NULL) {
const TCHAR *max_name = max_node->GetName();
#ifdef _UNICODE
char name_mb [1024];
name_mb[1023] = 0;
wcstombs(name_mb, max_name, 1023);
set_name(name_mb);
#else
set_name(max_name);
#endif
}
}
////////////////////////////////////////////////////////////////////
// Function: MaxNodeDesc::Constructor
// Access: Public
// Description: This convenience constructor takes a wstring.
////////////////////////////////////////////////////////////////////
MaxNodeDesc::
MaxNodeDesc(MaxNodeDesc *parent, const wstring &name) :
Namable(string(name.begin(), name.end())),
_parent(parent)
{
_max_node = (INode *)NULL;
_egg_group = (EggGroup *)NULL;
_egg_table = (EggTable *)NULL;
@ -66,7 +56,7 @@ MaxNodeDesc(MaxNodeDesc *parent, const wstring &name) :
////////////////////////////////////////////////////////////////////
// Function: MaxNodeDesc::Destructor
// Access: Public
// Description:
// Description:
////////////////////////////////////////////////////////////////////
MaxNodeDesc::
~MaxNodeDesc() {}
@ -82,8 +72,8 @@ from_INode(INode *max_node) {
if (_max_node == (INode *)NULL) {
_max_node = max_node;
// This is how I decided to check to see if this max node is a
// joint. It works in all instances I've seen so far, but this
// This is how I decided to check to see if this max node is a
// joint. It works in all instances I've seen so far, but this
// may be a good starting place to look if joints are not being
// picked up correctly in the future.
@ -96,7 +86,7 @@ from_INode(INode *max_node) {
((c->ClassID() == BIPSLAVE_CONTROL_CLASS_ID) ||
(c->ClassID() == BIPBODY_CONTROL_CLASS_ID) ||
(c->ClassID() == FOOTPRINT_CLASS_ID)))) {
// This node is a joint.
_joint_type = JT_node_joint;
if (_parent != (MaxNodeDesc *)NULL) {

View File

@ -25,8 +25,7 @@
////////////////////////////////////////////////////////////////////
class MaxNodeDesc : public ReferenceCount, public Namable {
public:
MaxNodeDesc(MaxNodeDesc *parent = NULL, const string &name = string());
MaxNodeDesc(MaxNodeDesc *parent = NULL, const wstring &name = wstring());
MaxNodeDesc(MaxNodeDesc *parent = NULL, INode *max_node = NULL);
~MaxNodeDesc();
void from_INode(INode *max_node);
@ -42,7 +41,7 @@ class MaxNodeDesc : public ReferenceCount, public Namable {
MaxNodeDesc *_joint_entry;
typedef pvector< MaxNodeDesc* > Children;
Children _children;
private:
void clear_egg();
void mark_joint_parent();

View File

@ -18,7 +18,7 @@
////////////////////////////////////////////////////////////////////
// Function: MaxNodeTree::Constructor
// Access: Public
// Description:
// Description:
////////////////////////////////////////////////////////////////////
MaxNodeTree::
MaxNodeTree() {
@ -41,13 +41,15 @@ MaxNodeDesc *MaxNodeTree::
build_node(INode *max_node) {
MaxNodeDesc *node_desc = r_build_node(max_node);
node_desc->from_INode(max_node);
if (node_desc->is_node_joint())
if (node_desc->is_node_joint()) {
node_desc->_joint_entry = build_joint(max_node, node_desc);
}
return node_desc;
}
////////////////////////////////////////////////////////////////////
// Function: MaxNodeTree::build_node
// Function: MaxNodeTree::build_joint
// Access: Public
// Description: Returns a pointer to the node corresponding to the
// indicated INode object, creating it first if
@ -57,7 +59,7 @@ MaxNodeDesc *MaxNodeTree::
build_joint(INode *max_node, MaxNodeDesc *node_joint) {
MaxNodeDesc *node_desc = r_build_joint(node_joint, max_node);
node_desc->from_INode(max_node);
node_desc->set_joint(true);
node_desc->set_joint(true);
return node_desc;
}
@ -102,7 +104,7 @@ build_complete_hierarchy(INode *root, ULONG *selection_list, int len) {
// *** Log an error
return false;
}
bool all_ok = true;
r_build_hierarchy(root, selection_list, len);
@ -218,7 +220,7 @@ get_egg_table(MaxNodeDesc *node_desc) {
nassertr(node_desc->_parent != (MaxNodeDesc *)NULL, NULL);
EggTable *egg_table = new EggTable(node_desc->get_name());
node_desc->_anim = new EggXfmSAnim("xform",
node_desc->_anim = new EggXfmSAnim("xform",
_egg_data->get_coordinate_system());
node_desc->_anim->set_fps(_fps);
egg_table->add_child(node_desc->_anim);
@ -247,21 +249,18 @@ get_egg_table(MaxNodeDesc *node_desc) {
// has not already been created.
////////////////////////////////////////////////////////////////////
EggXfmSAnim *MaxNodeTree::
get_egg_anim(MaxNodeDesc *node_desc)
{
get_egg_anim(MaxNodeDesc *node_desc) {
get_egg_table(node_desc);
return node_desc->_anim;
}
////////////////////////////////////////////////////////////////////
// Function: MaxNodeTree::r_build_node
// Access: Private
// Description: The recursive implementation of build_node().
////////////////////////////////////////////////////////////////////
MaxNodeDesc *MaxNodeTree::
r_build_node(INode* max_node)
{
r_build_node(INode* max_node) {
// If we have already encountered this pathname, return the
// corresponding MaxNodeDesc immediately.
@ -286,7 +285,6 @@ r_build_node(INode* max_node)
} else {
INode *parent_node;
TSTR local_name = max_node->GetName();
if (max_node->IsRootNode()) {
parent_node = NULL;
@ -295,7 +293,7 @@ r_build_node(INode* max_node)
}
MaxNodeDesc *parent_node_desc = r_build_node(parent_node);
node_desc = new MaxNodeDesc(parent_node_desc, local_name);
node_desc = new MaxNodeDesc(parent_node_desc, max_node);
_nodes.push_back(node_desc);
}
@ -309,15 +307,15 @@ r_build_node(INode* max_node)
// Description: The recursive implementation of build_joint().
////////////////////////////////////////////////////////////////////
MaxNodeDesc *MaxNodeTree::
r_build_joint(MaxNodeDesc *node_desc, INode *max_node)
r_build_joint(MaxNodeDesc *node_desc, INode *max_node)
{
MaxNodeDesc *node_joint;
if (node_desc == _root) {
node_joint = new MaxNodeDesc(_root, max_node->GetName());
node_joint = new MaxNodeDesc(_root, max_node);
_nodes.push_back(node_joint);
return node_joint;
} else if (node_desc->is_node_joint() && node_desc->_joint_entry) {
node_joint = new MaxNodeDesc(node_desc->_joint_entry, max_node->GetName());
node_joint = new MaxNodeDesc(node_desc->_joint_entry, max_node);
_nodes.push_back(node_joint);
return node_joint;
} else {
@ -331,21 +329,20 @@ r_build_joint(MaxNodeDesc *node_desc, INode *max_node)
// Description: The recursive implementation of build_node().
////////////////////////////////////////////////////////////////////
MaxNodeDesc *MaxNodeTree::
find_node(INode* max_node)
{
find_node(INode* max_node) {
// If we have already encountered this pathname, return the
// corresponding MaxNodeDesc immediately.
ULONG node_handle = 0;
if (max_node) {
node_handle = max_node->GetHandle();
}
}
NodesByPath::const_iterator ni = _nodes_by_path.find(node_handle);
if (ni != _nodes_by_path.end()) {
return (*ni).second;
}
}
return NULL;
}

View File

@ -15,7 +15,7 @@
//Disable the forcing int to true or false performance warning
#pragma warning(disable: 4800)
void SetICustEdit(HWND wnd, int nIDDlgItem, const TCHAR *text)
void SetICustEdit(HWND wnd, int nIDDlgItem, TCHAR *text)
{
ICustEdit *edit = GetICustEdit(GetDlgItem(wnd, nIDDlgItem));
edit->SetText(text);

View File

@ -370,8 +370,7 @@ process_model_node(MaxNodeDesc *node_desc) {
//It's a CV Curve, process it
egg_group = _tree.get_egg_group(node_desc);
get_transform(max_node, egg_group);
CStr node_name = CStr::FromMSTR(max_node->GetName());
make_nurbs_curve((NURBSCVCurve *)nObj, node_name,
make_nurbs_curve(max_node, (NURBSCVCurve *)nObj,
time, egg_group);
}
}
@ -578,7 +577,7 @@ get_joint_transform(INode *max_node, INode *parent_node, EggGroup *egg_group) {
// structure and attaches it to the indicated egg group.
////////////////////////////////////////////////////////////////////
bool MaxToEggConverter::
make_nurbs_curve(NURBSCVCurve *curve, const string &name,
make_nurbs_curve(INode *max_node, NURBSCVCurve *curve,
TimeValue time, EggGroup *egg_group)
{
int degree = curve->GetOrder();
@ -590,6 +589,8 @@ make_nurbs_curve(NURBSCVCurve *curve, const string &name,
return false;
}
string name = max_node->GetName();
string vpool_name = name + ".cvs";
EggVertexPool *vpool = new EggVertexPool(vpool_name);
egg_group->add_child(vpool);
@ -651,8 +652,8 @@ make_polyset(INode *max_node, Mesh *mesh,
// all the vertices up front, we'll start with an empty vpool, and
// add vertices to it on the fly.
CStr node_name = CStr::FromMSTR(max_node->GetName());
string vpool_name = string(node_name) + ".verts";
string node_name = max_node->GetName();
string vpool_name = node_name + ".verts";
EggVertexPool *vpool = new EggVertexPool(vpool_name);
egg_group->add_child(vpool);

View File

@ -78,7 +78,7 @@ class MaxToEggConverter {
void get_joint_transform(INode *max_node, INode *parent_node,
EggGroup *egg_group);
bool make_nurbs_curve(NURBSCVCurve *curve, const string &name,
bool make_nurbs_curve(INode *max_node, NURBSCVCurve *curve,
TimeValue time, EggGroup *egg_group);
void make_polyset(INode *max_node,
Mesh *mesh,