internal static async Task CreateAssemblyTranslation(CommandExecutionContext context, Dictionary<string, List<string>> options, List<string> values)
 {
     OnshapeTranslationParameters translationParameters = new OnshapeTranslationParameters()
     {
         formatName = options.GetOptionValue(Constants.FORMAT),
         versionString = options.GetOptionValue(Constants.FORMAT_VERSION)
     };
     string storeInDocumentStr = options.GetOptionValue(Constants.STORE_IN_DOCUMENT);
     if (!String.IsNullOrEmpty(storeInDocumentStr))
     {
         translationParameters.storeInDocument = Boolean.Parse(storeInDocumentStr);
     }
     OnshapeTranslationStatus status = await context.Client.CreateAssemblyTranslation(options[Constants.DOCUMENT_ID][0], options[Constants.WORKSPACE_ID][0], options[Constants.ELEMENT_ID][0], translationParameters);
     Console.WriteLine(JsonConvert.SerializeObject(status, Formatting.Indented));
 }
 internal static async Task ExportPartstudio(CommandExecutionContext context, Dictionary<string, List<string>> options, List<string> values)
 {
     string documentId = options[Constants.DOCUMENT_ID][0];
     string wvmSelector = (options.ContainsKey(Constants.WORKSPACE_ID)) ? "w" : "v";
     string selectorId = (options.ContainsKey(Constants.WORKSPACE_ID)) ? options[Constants.WORKSPACE_ID][0] : options[Constants.VERSION_ID][0];
     string elementId = options[Constants.ELEMENT_ID][0];
     string format = options[Constants.FORMAT][0];
     switch (format.ToUpperInvariant())
     {
         case "STL":
             using (Stream contentStream = await context.Client.ExportPartstudioToStl(documentId, wvmSelector, selectorId, elementId,
                 Utils.createStlExportParams(options), values != null ? values.ToArray() : null))
             {
                 await Utils.ProcessContentStream(contentStream, options);
             }
             break;
         case "PARASOLID":
             string formatVersion = options.GetOptionValue(Constants.FORMAT_VERSION);
             using (Stream contentStream = await context.Client.ExportPartstudioToParasolid(documentId, wvmSelector, selectorId, elementId, formatVersion, values != null?values.ToArray():null))
             {
                 await Utils.ProcessContentStream(contentStream, options);
             }
             break;
         default:
             Console.WriteLine("Invalid format");
             break;
     }
 }
 internal static async Task UploadBlobelement(CommandExecutionContext context, Dictionary<string, List<string>> options, List<string> values)
 {
     string flattenAssembliesStr = options.GetOptionValue(Constants.FLATTEN_ASSEMBLIES);
     string yAxisIsUpStr = options.GetOptionValue(Constants.Y_AXIS_IS_UP);
     Dictionary<String, String> formFields = new Dictionary<String, String> {
         {"encodedFileName", HttpUtility.UrlEncode(System.IO.Path.GetFileName(options[Constants.FILE][0]))}
     };
     if (flattenAssembliesStr != null)
     {
         formFields["flattenAssemblies"] = flattenAssembliesStr;
     }
     if (yAxisIsUpStr != null)
     {
         formFields["yAxisIsUp"] = yAxisIsUpStr;
     }
     var response = await context.Client.CreateBlobelement(options[Constants.DOCUMENT_ID][0], options[Constants.WORKSPACE_ID][0], formFields, options[Constants.FILE][0]);
     Console.WriteLine(JsonConvert.SerializeObject(response, Formatting.Indented));
 }
 internal static async Task CreateTranslation(CommandExecutionContext context, Dictionary<string, List<string>> options, List<string> values)
 {
     Dictionary<String, String> formFields = new Dictionary<String, String> {
         {"encodedFileName", HttpUtility.UrlEncode(System.IO.Path.GetFileName(options[Constants.FILE][0]))},
         {"formatName", options[Constants.FORMAT][0].ToUpperInvariant()},
         {"name", HttpUtility.UrlEncode(System.IO.Path.GetFileNameWithoutExtension(options[Constants.FILE][0]))}
     };
     string flattenAssembliesStr = options.GetOptionValue(Constants.FLATTEN_ASSEMBLIES);
     string yAxisIsUpStr = options.GetOptionValue(Constants.Y_AXIS_IS_UP);
     string fileExtension = System.IO.Path.GetExtension(options[Constants.FILE][0]);
     if (flattenAssembliesStr != null)
     {
         formFields["flattenAssemblies"] = flattenAssembliesStr;
     }
     if (yAxisIsUpStr != null)
     {
         formFields["yAxisIsUp"] = yAxisIsUpStr;
     }
     OnshapeTranslationStatus status = await context.Client.CreateTranslation(options[Constants.DOCUMENT_ID][0], options[Constants.WORKSPACE_ID][0], formFields, options[Constants.FILE][0]);
     Console.WriteLine(JsonConvert.SerializeObject(status, Formatting.Indented));
 }
 internal static async Task CreateBlobElementTranslation(CommandExecutionContext context, Dictionary<string, List<string>> options, List<string> values)
 {
     OnshapeBlobTranslationParameters translationParameters = new OnshapeBlobTranslationParameters()
     {
         formatName = options.ContainsKey(Constants.FORMAT) ? options[Constants.FORMAT][0] : null,
         versionString = options.ContainsKey(Constants.FORMAT_VERSION) ? options[Constants.FORMAT_VERSION][0] : null
     };
     string flattenAssembliesStr = options.GetOptionValue(Constants.FLATTEN_ASSEMBLIES);
     string storeInDocumentStr = options.GetOptionValue(Constants.STORE_IN_DOCUMENT);
     string yAxisIsUpStr = options.GetOptionValue(Constants.Y_AXIS_IS_UP);
     if (!String.IsNullOrEmpty(flattenAssembliesStr))
     {
         translationParameters.flattenAssemblies = Boolean.Parse(flattenAssembliesStr);
     }
     if (!String.IsNullOrEmpty(storeInDocumentStr))
     {
         translationParameters.storeInDocument = Boolean.Parse(storeInDocumentStr);
     }
     if (!String.IsNullOrEmpty(yAxisIsUpStr))
     {
         translationParameters.yAxisIsUp = Boolean.Parse(yAxisIsUpStr);
     }
     OnshapeTranslationStatus status = await context.Client.CreateBlobelementTranslation(options[Constants.DOCUMENT_ID][0], options[Constants.WORKSPACE_ID][0], options[Constants.ELEMENT_ID][0], translationParameters);
     Console.WriteLine(JsonConvert.SerializeObject(status, Formatting.Indented));
 }
 internal static OnshapeStlExportParameters createStlExportParams(Dictionary<string, List<string>> options)
 {
     string angleToleranceStr = options.GetOptionValue(Constants.ANGLE_TOLERANCE);
     string chordToleranceStr = options.GetOptionValue(Constants.CHORD_TOLERANCE);
     string groupingStr = options.GetOptionValue(Constants.GROUPING);
     string maxFacetWidthStr = options.GetOptionValue(Constants.MAX_FACET_WIDTH);
     string minFacetWidthStr = options.GetOptionValue(Constants.MIN_FACET_WIDTH);
     string modeStr = options.GetOptionValue(Constants.MODE);
     string scaleStr = options.GetOptionValue(Constants.SCALE);
     string unitsStr = options.GetOptionValue(Constants.UNITS);
     OnshapeStlExportParameters result = new OnshapeStlExportParameters
     {
         mode = modeStr,
         units = unitsStr
     };
     if (angleToleranceStr != null)
     {
         result.angleTolerance = Double.Parse(angleToleranceStr);
     }
     if (chordToleranceStr != null)
     {
         result.chordTolerance = Double.Parse(chordToleranceStr);
     }
     if (groupingStr != null)
     {
         result.grouping = Boolean.Parse(groupingStr);
     }
     if (maxFacetWidthStr != null)
     {
         result.maxFacetWidth = Double.Parse(maxFacetWidthStr);
     }
     if (minFacetWidthStr != null)
     {
         result.minFacetWidth = Double.Parse(minFacetWidthStr);
     }
     if (scaleStr != null)
     {
         result.scale = Double.Parse(scaleStr);
     }
     return result;
 }