完善主體資料,免費(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)建部件和部件視圖

    主站蜘蛛池模板: 精品少妇人妻AV一区二区| 2018高清国产一区二区三区| 日本一区二区三区精品中文字幕| 日韩精品区一区二区三VR| eeuss鲁片一区二区三区| 蜜桃视频一区二区三区在线观看| 无码人妻一区二区三区免费视频| 精品乱码一区二区三区四区| 日本中文字幕一区二区有码在线| 无遮挡免费一区二区三区| 午夜性色一区二区三区免费不卡视频| 无码日韩精品一区二区三区免费| 久久99国产一区二区三区| 亚洲福利视频一区二区| 国产免费私拍一区二区三区| 国产成人精品一区二三区熟女| 国产一区二区三区乱码网站| 少妇无码一区二区二三区| 久久99精品国产一区二区三区| 日韩精品无码一区二区三区四区| 人成精品视频三区二区一区| 国产suv精品一区二区6| 福利在线一区二区| 日本精品视频一区二区| 国产精品成人一区无码| 日韩动漫av在线播放一区| 精品一区二区三区视频在线观看 | 中文字幕一区二区三区日韩精品| 天堂一区二区三区精品| 无码av中文一区二区三区桃花岛| 亚洲av乱码中文一区二区三区| 中文字幕乱码人妻一区二区三区 | 国产精品免费视频一区| 日韩在线视频一区二区三区| 福利一区在线视频| 丰满人妻一区二区三区免费视频| 国模私拍一区二区三区| 亚洲狠狠狠一区二区三区| 亚洲av乱码一区二区三区按摩| 国产在线一区观看| 亚洲av无码一区二区三区不卡|