static BVHExporter CreateBVHExporter() { BVHExporter exporter = new BVHExporter(); exporter.ExcludeFingers = false; exporter.ExcludeToes = false; exporter.HandsDownward = false; exporter.MotionBuilderNames = true; exporter.SingleJointTorso = false; exporter.Units = LengthUnits.Units_Centimeters; return exporter; }
static bool ExportBVHs(Take pTake, IEnumerable<TakeProcessor> pTakeProcessors, BVHExporter pExporter, StreamWriter pLoger, ref int pNbErrors) { pNbErrors = 0; IEnumerable<Node> activeSkels = pTake.Scene.AllSkeletons().Where(skel => skel.Active); if (activeSkels.Count() > 0) { Log(pLoger, "==> Exporting BVH files (1 per skeleton)... !"); // We will export BVHs only if all processors succeed. bool allProcessesSucceeded = true; foreach (TakeProcessor processor in pTakeProcessors) { try { Result processResult = processor.Process(pTake); if (!processResult.Success) { Log(pLoger, String.Format("\tError : process {0} failed : {1}", processor.Name, processResult.Message)); allProcessesSucceeded = false; ++pNbErrors; break; } } catch (Exception e) { Log(pLoger, String.Format("\tError : process {0} failed : {1}", processor.Name, e.Message)); allProcessesSucceeded = false; ++pNbErrors; break; } } if (allProcessesSucceeded) { string takeDir = Path.GetDirectoryName(pTake.FileName); // Exporting all active skeletons to a bvh file. for (int i = 0; i < activeSkels.Count(); ++i) { Node skeleton = activeSkels.ElementAt(i); string bvhFilePath = Path.GetFileNameWithoutExtension(pTake.FileName) + "_" + skeleton.Name + "." + pExporter.Extension; bvhFilePath = Path.GetFullPath(Path.Combine(takeDir, bvhFilePath)); try { pExporter.SkeletonName = skeleton.Name; pExporter.Scale = 1.0f; pExporter.StartFrame = pTake.FullFrameRange.Start; pExporter.EndFrame = pTake.FullFrameRange.End; pExporter.FrameRate = (float)pTake.FrameRate; Result exportResult = pExporter.Export(pTake, bvhFilePath, true); if (exportResult.Success) { Log(pLoger, String.Format("\t==> BVH {0}/{1} exported successfully to file {2}", i+1, activeSkels.Count(), bvhFilePath)); } else { Log(pLoger, String.Format("\tError : cannot export BVH {0}/{1} : {2} => {3}", i+1, activeSkels.Count(), bvhFilePath, exportResult.Message)); ++pNbErrors; } } catch (Exception e) { Log(pLoger, String.Format("\tError : cannot export BVH {0}/{1} : {2} => {3}", i+1, activeSkels.Count(), bvhFilePath, e.Message)); ++pNbErrors; } } } } else { Log(pLoger, "\t==> No active skeleton found !"); return false; } return pNbErrors == 0; }