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

    下載app免費領(lǐng)取會員

    NULL

    ad.jpg

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

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

    網(wǎng)友投稿

    更多

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


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


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




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


    1.獲取當前安裝了的Revit版本


    這個可以通過


        RevitProductUtility.GetAllInstalledRevitProducts();


    來獲取


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


    這個可以通過


    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)載。

    未標題-1.jpg

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

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

    主站蜘蛛池模板: 熟女少妇丰满一区二区| 美女AV一区二区三区| 中文字幕无线码一区二区| 精品在线一区二区三区| 精品无码人妻一区二区免费蜜桃| 国产精品久久久久久一区二区三区 | 国产一区二区在线视频播放| 久久精品无码一区二区无码| 国产激情视频一区二区三区| 国产一区二区三区视频在线观看| 国产精品揄拍一区二区久久| 日韩AV无码久久一区二区| 三上悠亚精品一区二区久久| 精品一区二区三区在线播放| 国产精品亚洲专一区二区三区| 在线观看中文字幕一区| 成人一区二区三区视频在线观看| 文中字幕一区二区三区视频播放 | 国产一区二区三区内射高清| 欧美日韩综合一区二区三区| 无码一区二区三区AV免费| 无码国产精品一区二区免费虚拟VR | 国产一区二区精品久久岳√| 国产萌白酱在线一区二区| 尤物精品视频一区二区三区| 欧美一区内射最近更新| 国产成人av一区二区三区在线| 在线观看中文字幕一区| 日韩在线一区二区三区免费视频| 日本免费精品一区二区三区| 一区二区三区美女视频| 国产福利电影一区二区三区,免费久久久久久久精 | 国产亚洲日韩一区二区三区| 国产成人片视频一区二区| 国产熟女一区二区三区四区五区 | 日韩精品国产一区| 高清一区二区三区| 精品少妇一区二区三区视频 | 精品无码国产AV一区二区三区 | 少妇人妻精品一区二区三区| 成人中文字幕一区二区三区|