mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
added the ability to exclude nodes (and their children) with maya2egg
This commit is contained in:
parent
69b464dd02
commit
e5c6aebcef
@ -283,6 +283,17 @@ tag() {
|
|||||||
_tagged = true;
|
_tagged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: MayaNodeDesc::untag
|
||||||
|
// Access: Private
|
||||||
|
// Description: Un-tags this node for conversion, but does not tag child
|
||||||
|
// nodes.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void MayaNodeDesc::
|
||||||
|
untag() {
|
||||||
|
_tagged = false;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: MayaNodeDesc::tag_recursively
|
// Function: MayaNodeDesc::tag_recursively
|
||||||
// Access: Private
|
// Access: Private
|
||||||
@ -300,6 +311,23 @@ tag_recursively() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: MayaNodeDesc::untag_recursively
|
||||||
|
// Access: Private
|
||||||
|
// Description: Un-tags this node and all descendant nodes for
|
||||||
|
// conversion.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void MayaNodeDesc::
|
||||||
|
untag_recursively() {
|
||||||
|
_tagged = false;
|
||||||
|
|
||||||
|
Children::const_iterator ci;
|
||||||
|
for (ci = _children.begin(); ci != _children.end(); ++ci) {
|
||||||
|
MayaNodeDesc *child = (*ci);
|
||||||
|
child->untag_recursively();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: MayaNodeDesc::has_object_type
|
// Function: MayaNodeDesc::has_object_type
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
@ -67,7 +67,9 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void tag();
|
void tag();
|
||||||
|
void untag();
|
||||||
void tag_recursively();
|
void tag_recursively();
|
||||||
|
void untag_recursively();
|
||||||
void tag_joint();
|
void tag_joint();
|
||||||
void tag_joint_recursively();
|
void tag_joint_recursively();
|
||||||
|
|
||||||
|
@ -185,6 +185,32 @@ tag_named(const GlobPattern &glob) {
|
|||||||
return found_any;
|
return found_any;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: MayaNodeTree::untag_named
|
||||||
|
// Access: Public
|
||||||
|
// Description: Un-tags nodes matching the indicated glob (and all of
|
||||||
|
// their children) for conversion. Returns true on
|
||||||
|
// success, false otherwise (e.g. the named node does
|
||||||
|
// not exist).
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
bool MayaNodeTree::
|
||||||
|
untag_named(const GlobPattern &glob) {
|
||||||
|
// There might be multiple nodes matching the name; search for all
|
||||||
|
// of them.
|
||||||
|
bool found_any = false;
|
||||||
|
|
||||||
|
Nodes::iterator ni;
|
||||||
|
for (ni = _nodes.begin(); ni != _nodes.end(); ++ni) {
|
||||||
|
MayaNodeDesc *node = (*ni);
|
||||||
|
if (glob.matches(node->get_name())) {
|
||||||
|
node->untag_recursively();
|
||||||
|
found_any = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return found_any;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: MayaNodeTree::tag_selected
|
// Function: MayaNodeTree::tag_selected
|
||||||
// Access: Public
|
// Access: Public
|
||||||
|
@ -49,6 +49,7 @@ public:
|
|||||||
void tag_all();
|
void tag_all();
|
||||||
bool tag_selected();
|
bool tag_selected();
|
||||||
bool tag_named(const GlobPattern &glob);
|
bool tag_named(const GlobPattern &glob);
|
||||||
|
bool untag_named(const GlobPattern &glob);
|
||||||
|
|
||||||
int get_num_nodes() const;
|
int get_num_nodes() const;
|
||||||
MayaNodeDesc *get_node(int n) const;
|
MayaNodeDesc *get_node(int n) const;
|
||||||
|
@ -109,6 +109,7 @@ MayaToEggConverter(const MayaToEggConverter ©) :
|
|||||||
_from_selection(copy._from_selection),
|
_from_selection(copy._from_selection),
|
||||||
_subsets(copy._subsets),
|
_subsets(copy._subsets),
|
||||||
_subroots(copy._subroots),
|
_subroots(copy._subroots),
|
||||||
|
_excludes(copy._excludes),
|
||||||
_ignore_sliders(copy._ignore_sliders),
|
_ignore_sliders(copy._ignore_sliders),
|
||||||
_force_joints(copy._force_joints),
|
_force_joints(copy._force_joints),
|
||||||
_tree(this),
|
_tree(this),
|
||||||
@ -267,6 +268,27 @@ add_subset(const GlobPattern &glob) {
|
|||||||
_subsets.push_back(glob);
|
_subsets.push_back(glob);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: MayaToEggConverter::clear_excludes
|
||||||
|
// Access: Public
|
||||||
|
// Description: Empties the list of excluded nodes added via
|
||||||
|
// add_exclude().
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void MayaToEggConverter::
|
||||||
|
clear_excludes() {
|
||||||
|
_excludes.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
// Function: MayaToEggConverter::add_exclude
|
||||||
|
// Access: Public
|
||||||
|
// Description: Adds a name pattern to the list of excluded nodes.
|
||||||
|
////////////////////////////////////////////////////////////////////
|
||||||
|
void MayaToEggConverter::
|
||||||
|
add_exclude(const GlobPattern &glob) {
|
||||||
|
_excludes.push_back(glob);
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////
|
||||||
// Function: MayaToEggConverter::clear_ignore_sliders
|
// Function: MayaToEggConverter::clear_ignore_sliders
|
||||||
// Access: Public
|
// Access: Public
|
||||||
@ -465,7 +487,6 @@ convert_maya() {
|
|||||||
if (all_ok) {
|
if (all_ok) {
|
||||||
if (_from_selection) {
|
if (_from_selection) {
|
||||||
all_ok = _tree.tag_selected();
|
all_ok = _tree.tag_selected();
|
||||||
|
|
||||||
} else if (!_subsets.empty()) {
|
} else if (!_subsets.empty()) {
|
||||||
Globs::const_iterator gi;
|
Globs::const_iterator gi;
|
||||||
for (gi = _subsets.begin(); gi != _subsets.end(); ++gi) {
|
for (gi = _subsets.begin(); gi != _subsets.end(); ++gi) {
|
||||||
@ -480,6 +501,18 @@ convert_maya() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (all_ok) {
|
||||||
|
if (!_excludes.empty()) {
|
||||||
|
Globs::const_iterator gi;
|
||||||
|
for (gi = _excludes.begin(); gi != _excludes.end(); ++gi) {
|
||||||
|
if (!_tree.untag_named(*gi)) {
|
||||||
|
mayaegg_cat.info()
|
||||||
|
<< "No node matching " << *gi << " found.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (all_ok) {
|
if (all_ok) {
|
||||||
switch (get_animation_convert()) {
|
switch (get_animation_convert()) {
|
||||||
case AC_pose:
|
case AC_pose:
|
||||||
|
@ -83,6 +83,9 @@ public:
|
|||||||
void clear_subsets();
|
void clear_subsets();
|
||||||
void add_subset(const GlobPattern &glob);
|
void add_subset(const GlobPattern &glob);
|
||||||
|
|
||||||
|
void clear_excludes();
|
||||||
|
void add_exclude(const GlobPattern &glob);
|
||||||
|
|
||||||
void clear_ignore_sliders();
|
void clear_ignore_sliders();
|
||||||
void add_ignore_slider(const GlobPattern &glob);
|
void add_ignore_slider(const GlobPattern &glob);
|
||||||
bool ignore_slider(const string &name) const;
|
bool ignore_slider(const string &name) const;
|
||||||
@ -166,6 +169,7 @@ private:
|
|||||||
typedef pvector<GlobPattern> Globs;
|
typedef pvector<GlobPattern> Globs;
|
||||||
Globs _subsets;
|
Globs _subsets;
|
||||||
Globs _subroots;
|
Globs _subroots;
|
||||||
|
Globs _excludes;
|
||||||
Globs _ignore_sliders;
|
Globs _ignore_sliders;
|
||||||
Globs _force_joints;
|
Globs _force_joints;
|
||||||
|
|
||||||
|
@ -113,6 +113,15 @@ MayaToEgg() :
|
|||||||
"converted.",
|
"converted.",
|
||||||
&MayaToEgg::dispatch_vector_string, NULL, &_subsets);
|
&MayaToEgg::dispatch_vector_string, NULL, &_subsets);
|
||||||
|
|
||||||
|
add_option
|
||||||
|
("exclude", "name", 0,
|
||||||
|
"Specifies that a subset of the geometry in the Maya file should "
|
||||||
|
"not be converted; specifically, the geometry under the node or nodes whose "
|
||||||
|
"name matches the parameter (which may include globbing characters "
|
||||||
|
"like * or ?). This parameter may be repeated multiple times to name "
|
||||||
|
"multiple roots.",
|
||||||
|
&MayaToEgg::dispatch_vector_string, NULL, &_excludes);
|
||||||
|
|
||||||
add_option
|
add_option
|
||||||
("ignore-slider", "name", 0,
|
("ignore-slider", "name", 0,
|
||||||
"Specifies the name of a slider (blend shape deformer) that maya2egg "
|
"Specifies the name of a slider (blend shape deformer) that maya2egg "
|
||||||
@ -196,7 +205,6 @@ run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//vector_string::const_iterator si;
|
|
||||||
if (!_subsets.empty()) {
|
if (!_subsets.empty()) {
|
||||||
converter.clear_subsets();
|
converter.clear_subsets();
|
||||||
for (si = _subsets.begin(); si != _subsets.end(); ++si) {
|
for (si = _subsets.begin(); si != _subsets.end(); ++si) {
|
||||||
@ -204,6 +212,13 @@ run() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!_excludes.empty()) {
|
||||||
|
converter.clear_excludes();
|
||||||
|
for (si = _excludes.begin(); si != _excludes.end(); ++si) {
|
||||||
|
converter.add_exclude(GlobPattern(*si));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!_ignore_sliders.empty()) {
|
if (!_ignore_sliders.empty()) {
|
||||||
converter.clear_ignore_sliders();
|
converter.clear_ignore_sliders();
|
||||||
for (si = _ignore_sliders.begin(); si != _ignore_sliders.end(); ++si) {
|
for (si = _ignore_sliders.begin(); si != _ignore_sliders.end(); ++si) {
|
||||||
|
@ -42,6 +42,7 @@ protected:
|
|||||||
MayaToEggConverter::TransformType _transform_type;
|
MayaToEggConverter::TransformType _transform_type;
|
||||||
vector_string _subroots;
|
vector_string _subroots;
|
||||||
vector_string _subsets;
|
vector_string _subsets;
|
||||||
|
vector_string _excludes;
|
||||||
vector_string _ignore_sliders;
|
vector_string _ignore_sliders;
|
||||||
vector_string _force_joints;
|
vector_string _force_joints;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user