Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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));
        }