More compatibility fixes
This commit is contained in:
parent
2b97fccd4d
commit
7ac7adcce4
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue