Browse Source

undoing most recent changes on mayacopy

Asad M. Zaman 19 years ago
parent
commit
ef8c0570c8
2 changed files with 73 additions and 61 deletions
  1. 72 58
      pandatool/src/mayaprogs/mayaCopy.cxx
  2. 1 3
      pandatool/src/mayaprogs/mayaCopy.h

+ 72 - 58
pandatool/src/mayaprogs/mayaCopy.cxx

@@ -62,18 +62,16 @@ MayaCopy() {
      "source filename before it is copied into the tree.",
      &CVSCopy::dispatch_none, &_keep_ver);
 
-  /*
   add_option
     ("rp", "replace_prefix", 80,
      "use these prefixes when replacing reference with the recently copied file from the  "
      "source filename before it is copied into the tree.",
      &CVSCopy::dispatch_vector_string, NULL, &_replace_prefix);
-  */
 
   add_option
     ("omittex", "", 0,
-     "Character animation files do not need to copy the texures nor its references. "
-     "This option omits the textures and references of the models to be re-mayacopied",
+     "Character animation files do not need to copy the texures. This option omits the "
+     "textures of the models to be re-mayacopied",
      &CVSCopy::dispatch_none, &_omit_tex);
 
   add_path_replace_options();
@@ -190,31 +188,33 @@ copy_maya_file(const Filename &source, const Filename &dest,
     return false;
   }
 
-  if (!_omit_tex) {
-    // Get all the shaders so we can determine the set of textures.
-    _shaders.clear();
-    collect_shaders();
-    int num_shaders = _shaders.get_num_shaders();
-    for (int i = 0; i < num_shaders; i++) {
-      MayaShader *shader = _shaders.get_shader(i);
-      for (size_t j = 0; j < shader->_color.size(); j++) {
-        if (!extract_texture(*shader->get_color_def(j), dir)) {
-          return false;
-        }
-      }
-      if (!extract_texture(shader->_transparency, dir)) {
-        return false;
-      }
-    }
-  }
-
   // Finally, copy in any referenced Maya files.
   unsigned int num_refs = refs.length();
 
-  if (num_refs > 0) {
-    _omit_tex = true;
+  /*
+  if (num_refs != 0) {
+    maya_cat.warning()
+      << "External references are not yet properly supported by mayacopy!\n";
   }
+  */
 
+  if (num_refs != 0) {
+    if (_replace_prefix.empty()) {
+      // try to put the first word of the file name as the replace prefix
+      size_t idx = source.get_basename().find("_",0);
+      if (idx != string::npos) {
+        string st = source.get_basename().substr(0, idx);
+        _replace_prefix.push_back(st);
+        maya_cat.info() << "replace_prefix = " << st << endl;
+      }
+      else {
+        maya_cat.error()
+          << "External references exist: " 
+          << "please make sure to specify a _replace_prefix with -rp option\n";
+        exit(1);
+      }
+    }
+  }
   unsigned int ref_index;
   maya_cat.info() << "num_refs = " << num_refs << endl;
   for (ref_index = 0; ref_index < num_refs; ref_index++) {
@@ -227,35 +227,34 @@ copy_maya_file(const Filename &source, const Filename &dest,
     // file -loadReference "mtpRN" -type "mayaBinary" -options "v=0"
     // "m_t_pear_zero.mb";
     string lookup = refs[ref_index].asChar();
-
-    string blah = "file -q -referenceNode \"" + lookup + "\";";
-    //maya_cat.info() << blah << endl;
-    MString result;
-    status = MGlobal::executeCommand(MString(blah.c_str()), result);
-    //maya_cat.info() << "result = " << result.asChar() << endl;
-
-    // for multiple reference of the same model. maya throws in a {#} at the end, ignore that
-    size_t dup = lookup.find('{');
-    if (dup != string::npos){
-      lookup.erase(dup);
-    }
-
     Filename filename = 
-      _path_replace->convert_path(Filename::from_os_specific(lookup));
+      _path_replace->convert_path(Filename::from_os_specific(refs[ref_index].asChar()));
 
     CVSSourceTree::FilePath path =
       _tree.choose_directory(filename.get_basename(), dir, _force, _interactive);
     Filename new_filename = path.get_rel_from(dir);
-
-    //maya_cat.info() << "curr_idx " << _curr_idx << endl;
-    _exec_string.push_back("file -loadReference \"" + string(result.asChar()) + "\" -type \"mayaBinary\" -options \"v=0\" \"" + new_filename.to_os_generic() + "\";");
-    maya_cat.info() << "executing command: " << _exec_string[_curr_idx] << "\n";
+    _exec_string = "file -loadReference \"" + _replace_prefix[_curr_idx++] + "RN\" -type \"mayaBinary\" -options \"v=0\" \"" + new_filename.to_os_generic() + "\";";
+    maya_cat.info() << "executing command: " << _exec_string << "\n";
     //MGlobal::executeCommand("file -loadReference \"mtpRN\" -type \"mayaBinary\" -options \"v=0\" \"m_t_pear_zero.mb\";");
-    status  = MGlobal::executeCommand(MString(_exec_string[ref_index].c_str()));
-    if (!status) {
-      status.perror("loadReference failed");
+    status  = MGlobal::executeCommand(MString(_exec_string.c_str()));
+  }
+
+  if (!_omit_tex) {
+    // Get all the shaders so we can determine the set of textures.
+    _shaders.clear();
+    collect_shaders();
+    int num_shaders = _shaders.get_num_shaders();
+    for (int i = 0; i < num_shaders; i++) {
+      MayaShader *shader = _shaders.get_shader(i);
+      for (size_t j = 0; j < shader->_color.size(); j++) {
+        if (!extract_texture(*shader->get_color_def(j), dir)) {
+          return false;
+        }
+      }
+      if (!extract_texture(shader->_transparency, dir)) {
+        return false;
+      }
     }
-    _curr_idx++;
   }
 
   // Now write out the Maya file.
@@ -266,33 +265,48 @@ copy_maya_file(const Filename &source, const Filename &dest,
   }
   
   for (ref_index = 0; ref_index < num_refs; ref_index++) {
-    if (1) { // we may want an option later to pull in all the referenced files
-      continue;
-    }
+    //maya_cat.info() << "refs filename: " << refs[ref_index].asChar() << "\n";
+    //maya_cat.info() << "os_specific filename: " << Filename::from_os_specific(refs[ref_index].asChar()) << "\n";
 
-    string lookup = refs[ref_index].asChar();
-    // for multiple reference of the same model. maya throws in a {#} at the end, ignore that
-    size_t dup = lookup.find('{');
-    if (dup != string::npos){
-      lookup.erase(dup);
-    }
+    //maya_cat.info() << "-----------exec_string = " << _exec_string << endl;
+    string original("loadReference");
+    string replace("unloadReference");
+    size_t index = _exec_string.find("loadReference");
+    _exec_string.replace(index, original.length(), replace, 0, replace.length());
+    maya_cat.info() << "executing command: " << _exec_string << "\n";
+    status  = MGlobal::executeCommand(MString(_exec_string.c_str()));
 
     Filename filename = 
-      _path_replace->convert_path(Filename::from_os_specific(lookup));
+      _path_replace->convert_path(Filename::from_os_specific(refs[ref_index].asChar()));
 
     maya_cat.info()
       << "External ref: " << filename << "\n";
-    
+
     // Now import the file
     ExtraData ed;
     ed._type = FT_maya;
-    
+
     CVSSourceTree::FilePath path = import(filename, &ed, _model_dir);
     if (!path.is_valid()) {
       exit(1);
     }
   }
 
+  /*
+  for (unsigned int ref_index = 0; ref_index < num_refs; ref_index++) {
+    Filename filename = 
+      _path_replace->convert_path(Filename::from_os_specific(refs[ref_index].asChar()));
+    status = MFileIO::reference(MString(filename.get_basename().c_str()));
+    if (!status) {
+      status.perror("MFileIO reference");
+    }
+    status = MFileIO::removeReference(refs[ref_index].asChar());
+    if (!status) {
+      status.perror("MFileIO removeReference");
+    }
+  }
+  */
+
   return true;
 }
 

+ 1 - 3
pandatool/src/mayaprogs/mayaCopy.h

@@ -74,11 +74,9 @@ private:
   bool _keep_ver;
   bool _omit_tex;
   int _curr_idx;
-  /*
   vector_string _replace_prefix;
-  */
 
-  vector_string _exec_string;
+  string _exec_string;
 
   PT(MayaApi) _maya;
   MayaShaders _shaders;