SwitchAttachment(string cloneName, string revitYear)
        {
            var clone = PyRevit.GetRegisteredClone(cloneName);

            if (revitYear != null)
            {
                int revitYearNumber = 0;
                if (int.TryParse(revitYear, out revitYearNumber))
                {
                    var attachment = PyRevit.GetAttached(revitYearNumber);
                    if (attachment != null)
                    {
                        if (attachment.Engine != null)
                        {
                            PyRevit.Attach(attachment.Product.ProductYear,
                                           clone,
                                           engineVer: attachment.Engine.Version,
                                           allUsers: attachment.AllUsers);
                        }
                        else
                        {
                            throw new pyRevitException(
                                      string.Format("Can not determine attachment engine for Revit \"{0}\"",
                                                    revitYear)
                                      );
                        }
                    }
                    else
                    {
                        throw new pyRevitException(
                                  string.Format("Can not determine existing attachment for Revit \"{0}\"",
                                                revitYear)
                                  );
                    }
                }
                else
                {
                    throw new pyRevitException(string.Format("Invalid Revit year \"{0}\"", revitYear));
                }
            }
            else
            {
                // read current attachments and reattach using the same config with the new clone
                foreach (var attachment in PyRevit.GetAttachments())
                {
                    if (attachment.Engine != null)
                    {
                        PyRevit.Attach(
                            attachment.Product.ProductYear,
                            clone,
                            engineVer: attachment.Engine.Version,
                            allUsers: attachment.AllUsers);
                    }
                    else
                    {
                        throw new pyRevitException("Can not determine attachment engine.");
                    }
                }
            }
        }
예제 #2
0
        AttachClone(string cloneName,
                    bool latest, bool dynamoSafe, string engineVersion,
                    string revitYear, bool installed, bool attached,
                    bool allUsers)
        {
            var clone = PyRevit.GetRegisteredClone(cloneName);

            // grab engine version
            int engineVer = 0;

            int.TryParse(engineVersion, out engineVer);

            if (latest)
            {
                logger.Debug("Attaching on latest engine...");
                var latestCloneEngine =
                    clone.GetEngines().Where(x => x.Runtime).OrderByDescending(x => x.Version).First();
                logger.Debug(string.Format("Latest engine: {0}", latestCloneEngine));
                if (latestCloneEngine != null)
                {
                    engineVer = latestCloneEngine.Version;
                }
                else
                {
                    throw new pyRevitException("Can not determine latest runtime engine for this clone.");
                }
            }
            else if (dynamoSafe)
            {
                logger.Debug("Attaching on dynamo-safe engine");
                engineVer = PyRevitConsts.ConfigsDynamoCompatibleEnginerVer;
            }

            // decide targets revits to attach to
            int revitYearNumber = 0;

            if (installed)
            {
                foreach (var revit in RevitProduct.ListInstalledProducts())
                {
                    PyRevit.Attach(revit.ProductYear, clone, engineVer: engineVer, allUsers: allUsers);
                }
            }
            else if (attached)
            {
                foreach (var attachment in PyRevit.GetAttachments())
                {
                    PyRevit.Attach(attachment.Product.ProductYear, clone, engineVer: engineVer, allUsers: allUsers);
                }
            }
            else if (int.TryParse(revitYear, out revitYearNumber))
            {
                PyRevit.Attach(revitYearNumber, clone, engineVer: engineVer, allUsers: allUsers);
            }
        }
        AttachClone(string cloneName,
                    bool latest, bool dynamoSafe, string engineVersion,
                    string revitYear, bool installed, bool attached,
                    bool allUsers)
        {
            var clone = PyRevit.GetRegisteredClone(cloneName);
            // grab engine version
            int engineVer = 0;

            int.TryParse(engineVersion, out engineVer);

            if (latest)
            {
                engineVer = 0;
            }
            else if (dynamoSafe)
            {
                engineVer = PyRevitConsts.ConfigsDynamoCompatibleEnginerVer;
            }

            // decide targets revits to attach to
            int revitYearNumber = 0;

            if (installed)
            {
                foreach (var revit in RevitProduct.ListInstalledProducts())
                {
                    PyRevit.Attach(revit.ProductYear, clone, engineVer: engineVer, allUsers: allUsers);
                }
            }
            else if (attached)
            {
                foreach (var attachment in PyRevit.GetAttachments())
                {
                    PyRevit.Attach(attachment.Product.ProductYear, clone, engineVer: engineVer, allUsers: allUsers);
                }
            }
            else if (int.TryParse(revitYear, out revitYearNumber))
            {
                PyRevit.Attach(revitYearNumber, clone, engineVer: engineVer, allUsers: allUsers);
            }
        }