private static ToolResult ConvertWrlToObj(string wrlFile, string objOutput, ObjOptions objOptions) { bool success = false; string message = ""; WrlData wrlData = WrlParser.TryParseWrl(wrlFile); if (wrlData != null) { if (objOptions.HasFlag(ObjOptions.ReverseVertex)) { WrlModifier.ReverseVertexOrder(wrlData); } success = WrlExporter.WriteObj(wrlData, objOutput); message = MessageBoxConstants.GetMessageExecutionCreation(success, objOutput); } else { message = MessageBoxConstants.GetMessageExecutionErrorParse(wrlFile); } return(new ToolResult(message, success)); }
public static ToolResult ToolObj(ActionN64 action, Dictionary <string, string> inputs, ObjOptions objOptions) { string outputFile = null; switch (action) { case ActionN64.WrlConversion: // Convert Wrl to Obj if (inputs.TryGetValue(DictConstants.WrlFile, out string wrlFile)) { if (inputs.TryGetValue(DictConstants.ObjOutput, out outputFile)) { return(ConvertWrlToObj(wrlFile, outputFile, objOptions)); } } break; case ActionN64.WrlsConversion: // Convert Wrl files to Obj if (inputs.TryGetValue(DictConstants.WrlDirectory, out string wrlDirectory)) { return(ConvertWrlsToObj(wrlDirectory, objOptions)); } break; case ActionN64.DeleteMaterials: // Delete Obj Materials if (inputs.TryGetValue(DictConstants.ObjFile, out string objFile)) { if (inputs.TryGetValue(DictConstants.ObjOutput, out outputFile)) { return(DeleteMaterialsObj(objFile, outputFile)); } } break; case ActionN64.DeleteUnusedMaterials: // Delete Unused Obj Materials if (inputs.TryGetValue(DictConstants.ObjFile, out objFile)) { if (inputs.TryGetValue(DictConstants.ObjOutput, out outputFile)) { return(DeleteUnusedMaterialsObj(objFile, outputFile)); } } break; case ActionN64.AddMaterials: // Add Obj Materials if (inputs.TryGetValue(DictConstants.ObjFile, out objFile)) { if (inputs.TryGetValue(DictConstants.ObjOutput, out outputFile)) { return(AddMaterialsObj(objFile, outputFile)); } } break; case ActionN64.ModifyObj: // Modify Obj if (inputs.TryGetValue(DictConstants.ObjFile, out objFile)) { if (inputs.TryGetValue(DictConstants.ObjOutput, out outputFile)) { return(ModifyObj(objFile, outputFile, objOptions, inputs)); } } break; case ActionN64.ObjToSmd: // Obj to Smd if (inputs.TryGetValue(DictConstants.ObjFile, out objFile)) { if (inputs.TryGetValue(DictConstants.SmdOutput, out outputFile)) { bool useTextureName = objOptions.HasFlag(ObjOptions.SmdUseTextureName); return(ConvertObjToSmd(objFile, outputFile, useTextureName)); } } break; case ActionN64.RefModelSmd: // Reference Model if (inputs.TryGetValue(DictConstants.ObjFile, out objFile)) { if (inputs.TryGetValue(DictConstants.SmdOutput, out outputFile)) { return(ConvertRefModelSmd(objFile, outputFile, inputs)); } } break; case ActionN64.MergeObjFilesDirectory: // Merge Obj Files in a Directory if (inputs.TryGetValue(DictConstants.ObjDirectory, out string objDirectory)) { if (inputs.TryGetValue(DictConstants.ObjOutput, out outputFile)) { return(MergeObjFiles(objDirectory, outputFile)); } } break; case ActionN64.MergeObjFilesList: // Merge Obj Files in a List if (inputs.TryGetValue(DictConstants.ObjOutput, out outputFile)) { return(MergeObjFiles(objFileList, outputFile)); } break; } return(new ToolResult(ToolResultEnum.DefaultError)); }
private static ToolResult ModifyObj(string objFile, string objOutput, ObjOptions objOptions, Dictionary <string, string> inputs) { bool success = false; bool warn = false; StringBuilder sb = new StringBuilder(); ObjData objData = ObjParser.TryParseObj(objFile); if (objData != null) { objData.UpdateMtlData(); MtlData mtlData = objData.Mtl; if (objOptions.HasFlag(ObjOptions.BlackList)) { // Delete Blacklisted Objects first if (mtlData != null) { if (!ObjModifier.TryDeleteMatchingGroups(objData, mtlData, texturesList)) { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorDeleteBlackList + MessageBoxConstants.MessageErrorExecution); } } else { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorDeleteBlackList + MessageBoxConstants.MessageMtlNotFound); } } ObjModifier.CalculateNormal(objData); if (objOptions.HasFlag(ObjOptions.UniformScale)) { if (inputs.TryGetValue(DictConstants.ScaleValue, out string scaleStr)) { if (Double.TryParse(scaleStr, out double scaleValue)) { ObjModifier.UniformScale(objData, scaleValue); // Scale Model } else { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorScale + MessageBoxConstants.MessageInvalidScaleValue); } } } if (objOptions.HasFlag(ObjOptions.NonUniformScale)) { bool isScaleValueX = false; bool isScaleValueY = false; bool isScaleValueZ = false; double scaleValueX = 0.0; double scaleValueY = 0.0; double scaleValueZ = 0.0; if (inputs.TryGetValue(DictConstants.ScaleValueX, out string scaleStr)) { isScaleValueX = Double.TryParse(scaleStr, out scaleValueX); } if (inputs.TryGetValue(DictConstants.ScaleValueY, out scaleStr)) { isScaleValueY = Double.TryParse(scaleStr, out scaleValueY); } if (inputs.TryGetValue(DictConstants.ScaleValueZ, out scaleStr)) { isScaleValueZ = Double.TryParse(scaleStr, out scaleValueZ); } if (isScaleValueX && isScaleValueY && isScaleValueZ) { // Scale Model ObjModifier.NonUniformScale(objData, scaleValueX, scaleValueY, scaleValueZ); } else { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorScale + MessageBoxConstants.MessageInvalidScaleValues); } } if (objOptions.HasFlag(ObjOptions.Rotate)) { bool isRotateValueX = false; bool isRotateValueY = false; bool isRotateValueZ = false; double rotateValueX = 0.0; double rotateValueY = 0.0; double rotateValueZ = 0.0; if (inputs.TryGetValue(DictConstants.RotateValueX, out string rotationStr)) { isRotateValueX = Double.TryParse(rotationStr, out rotateValueX); } if (inputs.TryGetValue(DictConstants.RotateValueY, out rotationStr)) { isRotateValueY = Double.TryParse(rotationStr, out rotateValueY); } if (inputs.TryGetValue(DictConstants.RotateValueZ, out rotationStr)) { isRotateValueZ = Double.TryParse(rotationStr, out rotateValueZ); } if (isRotateValueX && isRotateValueY && isRotateValueZ) { // Rotate Model ObjModifier.RotateModel(objData, rotateValueX, rotateValueY, rotateValueZ); } else { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorRotate + MessageBoxConstants.MessageInvalidRotateValues); } } if (objOptions.HasFlag(ObjOptions.ReverseVertex)) { // Reverse Vertex Order ObjModifier.ReverseVertexOrder(objData); } if (objOptions.HasFlag(ObjOptions.Merge)) { if (mtlData != null) { // Merge groups and materials ObjModifier.MergeGroups(objData, mtlData); } else { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorMergeGroups + MessageBoxConstants.MessageMtlNotFound); } } if (objOptions.HasFlag(ObjOptions.Sort)) { // Sort groups if (!ObjModifier.SortGroups(objData)) { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorSortGroups + MessageBoxConstants.MessageInvalidGroupName); } if (mtlData != null) { // Sort materials if (!ObjModifier.SortMaterials(mtlData)) { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorSortMaterials + MessageBoxConstants.MessageInvalidMaterialName); } } else { warn = true; sb.AppendLine(MessageBoxConstants.MessageErrorSortMaterials + MessageBoxConstants.MessageMtlNotFound); } } success = ObjExporter.WriteObj(objData, mtlData, objOutput, makeMtl: true, useExistingMtl: true); sb.Append(MessageBoxConstants.GetMessageExecutionCreation(success, objOutput)); } else { sb.Append(MessageBoxConstants.GetMessageExecutionErrorParse(objFile)); } return(new ToolResult(sb.ToString(), success, warn)); }