完善主體資料,免費(fèi)贈(zèng)送VIP會(huì)員!
    * 主體類型
    * 企業(yè)名稱
    * 信用代碼
    * 所在行業(yè)
    * 企業(yè)規(guī)模
    * 所在職位
    * 姓名
    * 所在行業(yè)
    * 學(xué)歷
    * 工作性質(zhì)
    請先選擇行業(yè)
    您還可以選擇以下福利:
    行業(yè)福利,領(lǐng)完即止!

    下載app免費(fèi)領(lǐng)取會(huì)員

    NULL

    ad.jpg

    二次開發(fā)教程:Revit開發(fā)之AddInManager安裝包簡單制作

    發(fā)布于:2019-08-26 16:08:18

    網(wǎng)友投稿

    更多

    Revit的AddinManager在2014以后就不提供安裝包了,而是要用戶自己手動(dòng)去配置,對(duì)于有Revit開發(fā)經(jīng)驗(yàn)的人來說是比較


    簡單的,但是新手總是會(huì)遇到這樣或那樣的問題,在我的博客前面已經(jīng)有講過怎么手動(dòng)配置,


    這篇博客主要是探索一下,能不能也做一個(gè)像2014一樣的安裝包呢?




    想一下,大概應(yīng)該包括下面幾個(gè)過程


    1.獲取當(dāng)前安裝了的Revit版本


    這個(gè)可以通過


        RevitProductUtility.GetAllInstalledRevitProducts();


    來獲取


    2.獲取放置addin文件的位置


    這個(gè)可以通過


    RevitProduct.AllUsersAddInFolder 


    來獲取,也可以在程序中寫死


    3.復(fù)制addin文件到放置addin文件的位置


    4.替換dll路徑




    下面是代碼編譯的安裝包下載


    //從資源文件加載RevitAddInUtility.dll


        public partial class App : Application

        {

            public App()

            {

                AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

            }


            private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)

            {

                string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", "");

                dllName = dllName.Replace(".", "_");

                if (dllName.EndsWith("_resources")) return null;

                System.Resources.ResourceManager rm = new System.Resources.ResourceManager(GetType().Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly());

                byte[] bytes = (byte[])rm.GetObject(dllName);

                return System.Reflection.Assembly.Load(bytes); 

            }

        }


    //主界面


    <Window x:Class="AddinInstall.MainWindow"

            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

            xmlns:Convertor="clr-namespace:AddinInstall"

            Title="Addin Manager Install" SizeToContent="WidthAndHeight">

        <Window.Resources>

            <Convertor:BtnIsEnabledConvert x:Key="Convertor" />

            <Style TargetType="Label">

                <Setter Property="Margin" Value="5"/>

            </Style>

            <Style TargetType="ComboBox">

                <Setter Property="Margin" Value=" 5"/>

                <Setter Property="Height" Value="23"/>

                <Setter Property="Width" Value="200"/>

            </Style>

            <Style TargetType="Button">

                <Setter Property="Margin" Value="5"/>

                <Setter Property="Height" Value="23"/>

                <Setter Property="Width" Value="75"/>

            </Style>

            <Style TargetType="StackPanel">

                <Setter Property="Orientation" Value="Horizontal"/>

                <Setter Property="HorizontalAlignment" Value="Right"/>

                <Setter Property="VerticalAlignment" Value="Center"/>

            </Style>

            <Style TargetType="TextBox">

                <Setter Property="Width" Value="120"/>

                <Setter Property="Height" Value="23"/>

            </Style>

        </Window.Resources>

       

        <Grid>        

            <Grid.RowDefinitions>

                <RowDefinition/>

                <RowDefinition/>

                <RowDefinition/>

            </Grid.RowDefinitions>

            <Grid.ColumnDefinitions>

                <ColumnDefinition/>

                <ColumnDefinition/>

            </Grid.ColumnDefinitions>

            <Label Content="選擇Revit版本" Grid.Column="0" Grid.Row="0"/>

            <ComboBox Grid.Column="1" Grid.Row="0" ItemsSource="{Binding Path=RvtProducts, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Name" SelectedValue="{Binding Path= RvtProduct, UpdateSourceTrigger=PropertyChanged}"/>

            <Label Content="安裝路徑" Grid.Column="0" Grid.Row="1"/>

            <StackPanel  Grid.Column="1" Grid.Row="1">

                <TextBox Text="{Binding Path=Path, UpdateSourceTrigger=PropertyChanged}"/>

                <Button Content="選擇路徑" Command="{Binding Path=PathCommand}" />

            </StackPanel>

            <StackPanel  Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2">

                <Button Content="確定" Command="{Binding Path=OK_Command}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor , AncestorType={x:Type Window}}}">

                    <Button.IsEnabled>

                        <MultiBinding Converter="{StaticResource Convertor}">

                            <Binding Path="Path"/>

                            <Binding Path="RvtProduct"/>

                        </MultiBinding>

                    </Button.IsEnabled>

                </Button>

                <Button Content="取消" Command="{Binding Path=Cancel_Command}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>

            </StackPanel>

        </Grid>

    </Window>


        public partial class MainWindow : Window

        {

            public ViewModel ViewModel = new ViewModel();

            public MainWindow()

            {

                InitializeComponent();            

                this.DataContext = ViewModel;

            }

        }




    // ViewModele


        public class ViewModel:INotifyPropertyChanged

        {

            private string path = string.Empty;

            public string Path

            {

                get 

                {

                    return path;

                }

                set 

                {

                    path = value;

                    NotifyPropertyChanged("Path");

                }

            }

            private RevitProduct rvtProduct = null;

            public RevitProduct RvtProduct

            {

                get { return rvtProduct; }

                set { rvtProduct = value; NotifyPropertyChanged("RvtProduct"); }

            }

            private List<RevitProduct> rvtProducts = new List<RevitProduct>();

            public List<RevitProduct> RvtProducts 

            {

                get 

                {

                    return rvtProducts;

                }

            }

            

            public BtnIsEnabledConvert Convertor

            {

                get { return new BtnIsEnabledConvert(); }

            }

            public event PropertyChangedEventHandler PropertyChanged;

            private void NotifyPropertyChanged(string name)

            { 

                if(PropertyChanged!=null)

                {

                    PropertyChanged(this, new PropertyChangedEventArgs(name));

                }

            }

            public  ViewModel()

            {

                rvtProducts = RevitProductUtility.GetAllInstalledRevitProducts();

            }        

            public ICommand OK_Command

            {

                get 

                {

                    return new OK_Command(this);

                }

            }

            public ICommand Cancel_Command

            {

                get

                {

                    return new Cancel_Command();

                }

            }

            public ICommand PathCommand

            {

                get 

                {

                    return new PathCommand(this);

                }

            }

        }

        public class OK_Command : ICommand

        {

            ViewModel viewModel = null;

            public bool CanExecute(object parameter)

            {

                return true;

            }

            public event EventHandler CanExecuteChanged;

            public void Execute(object parameter)

            {

                string fullPath = viewModel.Path + "\\AddInManager.dll";

                MainWindow myWin = parameter as MainWindow;

                myWin.Close();

                Install(viewModel.RvtProduct, fullPath);        

            }

            private void Install(RevitProduct rvtProduct,string path)

            {

                byte[] dll = null;

                switch(rvtProduct.Version)

                {

                    case RevitVersion.Revit2015:

                        dll = Res.AddInManager2015;

                        break;

                    case RevitVersion.Revit2016:

                        dll = Res.AddInManager2016;

                        break;

                    case RevitVersion.Revit2017:

                        dll = Res.AddInManager2017;

                        break;

                }

                using (FileStream fs = File.Create(path))

                {

                    fs.Write(dll, 0, dll.Length);

                    fs.Close();

                }

                string addinPath = rvtProduct.AllUsersAddInFolder+"\\Autodesk_AddInManager.addin";

                using(FileStream fs = File.Create(addinPath))

                {

                    byte[] addin = Res.Autodesk_AddInManager;

                    fs.Write(addin, 0, addin.Length);

                    fs.Close();

                }

                string str = File.ReadAllText(addinPath, Encoding.UTF8);

                str = str.Replace("[TARGETDIR]AddInManager.dll", path);

                File.WriteAllText(addinPath, str, Encoding.UTF8);

            }

            

            public OK_Command(ViewModel vm)

            {

                this.viewModel = vm;

            }

        }

        public class Cancel_Command : ICommand

        {

            public bool CanExecute(object parameter)

            {

                return true;

            }

            public event EventHandler CanExecuteChanged;

            public void Execute(object parameter)

            {

                MainWindow myWin = parameter as MainWindow;

                //myWin.DialogResult = false;

                myWin.Close();

            }

        }

        public class PathCommand : ICommand

        {

            ViewModel viewModel = null;

            public bool CanExecute(object parameter)

            {

                return true;

            }

            public event EventHandler CanExecuteChanged;

            public void Execute(object parameter)

            {

                FolderBrowserDialog dialog = new FolderBrowserDialog();

                DialogResult dr = dialog.ShowDialog();

                if(dr==DialogResult.OK)

                {

                    viewModel.Path = dialog.SelectedPath;

                }

            }

            public PathCommand(ViewModel vm)

            {

                this.viewModel = vm;

            }

        }



        public class BtnIsEnabledConvert : IMultiValueConverter

        {

            public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)

            {

                foreach (object value in values)

                {

                    if (value == null)

                        return false;

                    else

                    {

                        if(value is string)

                        {

                            if (value as string == string.Empty)

                                return false;

                        }

                    }

                }

                return true;

            }

            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)

            {

                throw new NotImplementedException();

            }

        }

    本文版權(quán)歸腿腿教學(xué)網(wǎng)及原創(chuàng)作者所有,未經(jīng)授權(quán),謝絕轉(zhuǎn)載。

    未標(biāo)題-1.jpg

    上一篇:二次開發(fā)教程:Revit開發(fā)AddinManager原理探索

    下一篇:二次開發(fā)教程:Revit開發(fā)創(chuàng)建部件和部件視圖

    主站蜘蛛池模板: 无码人妻精品一区二区三区66| 国产精品被窝福利一区 | 国产成人无码AV一区二区在线观看 | 精品91一区二区三区| 亚洲色偷精品一区二区三区| 久久精品道一区二区三区| 一区二区三区中文| 国产在线观看一区二区三区四区| 99热门精品一区二区三区无码| 国产一区二区三区在线看| 黄桃AV无码免费一区二区三区 | 亚洲国产一区在线观看| 清纯唯美经典一区二区| 国产福利电影一区二区三区,日韩伦理电影在线福 | 亚洲一区精品中文字幕| 中文字幕久久亚洲一区| 国产精品无码一区二区在线观一 | 成人H动漫精品一区二区| 无码中文字幕一区二区三区 | 国产福利91精品一区二区| 亚洲一区中文字幕在线电影网 | 精品一区二区三区在线播放| 国产在线精品观看一区| 日本精品一区二区三区在线视频一| 午夜爽爽性刺激一区二区视频| 亚洲熟女综合色一区二区三区 | 亚洲熟妇av一区| 成人国产精品一区二区网站公司| 无码国产精品一区二区免费式影视| 国产香蕉一区二区精品视频| 日韩中文字幕精品免费一区| 蜜桃传媒一区二区亚洲AV| 日韩一区二区三区免费体验| 一区二区三区免费电影| 国产在线无码一区二区三区视频| 日韩人妻精品无码一区二区三区| 91国偷自产一区二区三区| 精品国产一区二区三区免费看| 日韩有码一区二区| 亚洲国产精品第一区二区| 中文精品一区二区三区四区|