public void Run(Document doc)
        {
            LogTrace($"Run called with {doc.DisplayName}");

            try
            {
                using (new HeartBeat())
                {
                    Parameters parameters;
                    switch (doc.DocumentType)
                    {
                    case DocumentTypeEnum.kPartDocumentObject:
                        parameters = ((PartDocument)doc).ComponentDefinition.Parameters;
                        break;

                    case DocumentTypeEnum.kAssemblyDocumentObject:
                        parameters = ((AssemblyDocument)doc).ComponentDefinition.Parameters;
                        break;

                    default:
                        LogError($"Unsupported document type: {doc.DocumentType}");
                        return;
                    }

                    var paramsExtractor = new ParametersExtractor();
                    paramsExtractor.Extract(doc, parameters);
                }
            }
            catch (Exception e)
            {
                LogError("Processing failed. " + e.ToString());
            }
        }
Exemple #2
0
        public void RunWithArguments(Document doc, NameValueMap map)
        {
            LogTrace($"RunWithArguments called with {doc.DisplayName} with {map.Count} arguments");

            using (new HeartBeat())
            {
                Parameters parameters;
                switch (doc.DocumentType)
                {
                case DocumentTypeEnum.kPartDocumentObject:
                    parameters = ((PartDocument)doc).ComponentDefinition.Parameters;
                    break;

                case DocumentTypeEnum.kAssemblyDocumentObject:
                    parameters = ((AssemblyDocument)doc).ComponentDefinition.Parameters;
                    break;

                default:
                    LogError($"Unsupported document type: {doc.DocumentType}");
                    return;
                }

                LogTrace("Read parameters");

                string paramFile = (string)map.Value["_1"];
                string json      = System.IO.File.ReadAllText(paramFile);
                LogTrace(json);

                var incomingParams = JsonConvert.DeserializeObject <InventorParameters>(json);

                bool changed = false;

                foreach (var pair in incomingParams)
                {
                    string            paramName = pair.Key;
                    InventorParameter paramData = pair.Value;

                    try
                    {
                        var userParameter = parameters[paramName];

                        string expression = userParameter.Expression;
                        if (!paramData.Value.Equals(expression))
                        {
                            LogTrace($"Applying '{paramData.Value}' to '{paramName}'");
                            SetExpression(userParameter, paramData, doc);
                            changed = true;
                            if (paramData.ErrorMessage != null)
                            {
                                // there was an invalid expression the UI will prompt the user to fix, so don't bother changing the rest of the parameters
                                LogTrace("Skip update for the remaining parameters");
                                break;
                            }
                        }
                        else
                        {
                            LogTrace($"Skipping '{paramName}'");
                        }
                    }
                    catch (Exception e)
                    {
                        // some parameters (maybe when parameter gets driven by iLogic rule) are throwing error on change.
                        // so swallow the thrown error, log about it and continue
                        LogError($"Failed to set '{paramName}' parameter. Error is {e}.");
                    }
                }

                var paramsExtractor = new ParametersExtractor();
                paramsExtractor.Extract(doc, parameters, incomingParams);
            }
        }