Exemplo n.º 1
0
        public static DynamoProducts FindDynamoInstallations(string debugPath = null, IProductLookUp lookUp = null)
        {
            var products = new DynamoProducts(debugPath);

            products.LookUpAndInitProducts(lookUp ?? new InstalledProductLookUp("Dynamo", "*DynamoCore.dll"));
            return(products);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates DynamoAddinData to generate addin for given Revit product
        /// based on latest Dynamo installed on the system.
        /// </summary>
        /// <param name="revit">Revit Product for which addin to be generated </param>
        /// <param name="dynamos">Dynamo products installed on the system</param>
        /// <param name="dynamoUninstallPath">dynamo path being uninstalled, can be
        /// null or empty string</param>
        /// <returns>DynamoAddinData</returns>
        public static DynamoAddinData Create(IRevitProduct revit, DynamoProducts dynamos, string dynamoUninstallPath)
        {
            //Iterate in reverse order to find the first dynamo that is supported for
            //this revit product
            var products = dynamos.Products.Reverse();

            foreach (var p in products)
            {
                //If the current product is being uninstalled, don't generate addin data
                if (DynamoInstall.PathEquals(p.InstallLocation, dynamoUninstallPath))
                {
                    continue;
                }

                var path = Path.Combine(p.InstallLocation, "DynamoRevit.dll");
                //Should be 0.6.3 only supported for Revit2014
                if (File.Exists(path) && revit.VersionString == "Revit2014")
                {
                    return(new DynamoAddinData(revit, new DynamoInstall(p.InstallLocation)));
                }

                var subfolder = revit.VersionString.Insert(5, "_");
                path = Path.Combine(p.InstallLocation, subfolder, "DynamoRevitVersionSelector.dll");
                if (File.Exists(path))
                {
                    return(new DynamoAddinData(revit, new DynamoInstall(p.InstallLocation)));
                }
            }

            return(null);
        }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            bool uninstall = false;

            foreach (string s in args)
            {
                if (s == @"/uninstall")
                {
                    uninstall = true;
                }
                else if (Directory.Exists(s))
                {
                    debugPath = s;
                }
            }

            if (uninstall && string.IsNullOrEmpty(debugPath))
            {
                //just use the executing assembly location
                var assemblyPath = Assembly.GetExecutingAssembly().Location;
                debugPath = Path.GetDirectoryName(assemblyPath);
            }

            var allProducts    = RevitProductUtility.GetAllInstalledRevitProducts();
            var prodCollection = new RevitProductCollection(allProducts.Select(x => new DynamoRevitProduct(x)));

            if (!prodCollection.Products.Any())
            {
                Console.WriteLine("There were no Revit products found.");
                return;
            }

            var dynamos = DynamoProducts.FindDynamoInstallations(debugPath);

            if (!dynamos.Products.Any())
            {
                Console.WriteLine("No Dynamo installation found at {0}.", debugPath);
                DeleteExistingAddins(prodCollection);
                return;
            }

            DeleteExistingAddins(prodCollection);

            if (uninstall)
            {
                GenerateAddins(prodCollection, debugPath);
            }
            else
            {
                GenerateAddins(prodCollection);
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// Generate new addin files for all applicable
        /// versions of Revit.
        /// </summary>
        /// <param name="products">A collection of revit installs.</param>
        /// <param name="dynamos">DynamoProducts, a collection of installed Dynamo
        /// on this system.</param>
        /// <param name="dynamoUninstallPath">Path of Dynamo being uninstalled</param>
        internal static void GenerateAddins(IRevitProductCollection products, DynamoProducts dynamos, string dynamoUninstallPath = "")
        {
            foreach (var prod in products.Products)
            {
                Console.WriteLine("Generating addins in {0}", prod.AddinsFolder);

                var addinData = DynamoAddinData.Create(prod, dynamos, dynamoUninstallPath);
                if (null != addinData)
                {
                    GenerateDynamoAddin(addinData);
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Finds all Dynamo installations on the system by looking at registry
        /// and install directories, and ensuring that it contains DynamoCore.
        /// </summary>
        /// <returns>List of IDynamoInstall</returns>
        public static IEnumerable <IDynamoInstall> FindDynamoInstalls(string debugPath)
        {
            var dynamos = DynamoProducts.FindDynamoInstallations(debugPath);

            foreach (IInstalledProduct product in dynamos.Products)
            {
                string[] files = Directory.GetFiles(product.InstallLocation, "DynamoRevit*.dll");
                string[] dirs  = Directory.GetDirectories(product.InstallLocation, "Revit*");
                if (dirs.Any() || files.Any())
                {
                    yield return(new DynamoInstall(product.InstallLocation));
                }
            }
        }
Exemplo n.º 6
0
        public void DynamoProductsOverrideWithDebugPath()
        {
            const string myPath   = @"C:\MyXYZ\";
            const string dyn063   = @"C:\Autodesk\Dynamo\Core";
            var          products = new Dictionary <string, Tuple <int, int, int, int> >
            {
                { "A", Tuple.Create(0, 1, 2, 3) },
                { "B", Tuple.Create(0, 1, 3, 4) },
                { "C", Tuple.Create(0, 8, 2, 4) },
                { "D", Tuple.Create(1, 0, 3, 4) },
                { "E", null }
            };
            var locations = new Dictionary <string, Tuple <int, int, int, int> >
            {
                { myPath, Tuple.Create(0, 8, 2, 3) },
                { dyn063, Tuple.Create(0, 6, 3, 4242) },
            };
            var lookUp = SetUpProductLookUp(products, locations);

            var p = DynamoProducts.FindDynamoInstallations(myPath, lookUp);

            Assert.AreEqual("D", p.GetLatestProduct().ProductName);
            Assert.AreEqual("1.0.3.4", p.GetLatestProduct().VersionString);
            Assert.AreEqual(5, p.Products.Count());

            //Product C is dropped because myPath with same version is provided.
            Assert.IsFalse(p.Products.Any(x => x.ProductName == "C"));

            //Find product name starting with "XYZ", name given for lookup
            var prods   = p.Products.Where(x => x.ProductName.StartsWith("XYZ"));
            var prod063 = prods.First();
            var prod082 = prods.Last();

            Assert.AreEqual(2, prods.Count());

            Assert.AreEqual(dyn063, prod063.InstallLocation);
            Assert.AreEqual("XYZ 0.6", prod063.ProductName);
            Assert.AreEqual("0.6.3.4242", prod063.VersionString);

            Assert.AreEqual(myPath, prod082.InstallLocation);
            Assert.AreEqual("XYZ 0.8", prod082.ProductName);
            Assert.AreEqual("0.8.2.3", prod082.VersionString);
        }