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

    下載app免費領取會員

    NULL

    ad.jpg

    二次開發教程:Revit開發創建部件和部件視圖

    發布于:2019-08-26 16:21:21

    網友投稿

    更多

    在Revit里可以把一部分構件組合起來創建為一個部件,


    然后可以創建一些針對這個部件的視圖


    通過API來創建主要用到兩個類


    AssemblyInstance 


    AssemblyViewUtils 




    下面是一個小例子:




    Command:


            public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

            {

                UIDocument uidoc = commandData.Application.ActiveUIDocument;

                Document doc = uidoc.Document;

                IList<Reference> refs = uidoc.Selection.PickObjects(ObjectType.Element);

                List<Element> elems = new List<Element>();

                List<ElementId> ids = new List<ElementId>();

                foreach (Reference r in refs)

                {

                    Element e = doc.GetElement(r);

                    elems.Add(e);

                    ids.Add(e.Id);

                }

                ViewModel myViewModel = new ViewModel(elems);

                AssemblyViewWindow myWin = new AssemblyViewWindow(myViewModel);

                if(myWin.ShowDialog()??false)

                {

                    TransactionGroup transGrop = new TransactionGroup(doc, "transGroup");

                    transGrop.Start();

                    Transaction trans = new Transaction(doc, "trans");

                    trans.Start();

                    AssemblyInstance assemblyInstance =  AssemblyInstance.Create(doc, ids, myViewModel.Category.Id);                

                    trans.Commit();

                    trans = new Transaction(doc, "rename");// 

                    trans.Start();

                    ElementId typeId = assemblyInstance.GetTypeId();

                    Element type = doc.GetElement(typeId);

                    type.Name = myViewModel.AssemblyInstanceName;

                    View3D view3d = AssemblyViewUtils.Create3DOrthographic(doc, assemblyInstance.Id);

                    trans.Commit();

                    transGrop.Assimilate();                

                }

                return Result.Succeeded;

            }




    Window:


    <Window x:Class="AssemblyView.AssemblyViewWindow"

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

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

            Title="新建部件" SizeToContent="WidthAndHeight">

        <Window.Resources>

            <Style TargetType="Label">

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

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

            </Style>

            <Style TargetType="TextBox">

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

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

            </Style>

            <Style TargetType="ComboBox">

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

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

            </Style>

            <Style TargetType="Button">

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

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

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

            </Style>

        </Window.Resources>

        <Grid>

            <Grid.ColumnDefinitions>

                <ColumnDefinition/>

                <ColumnDefinition/>

            </Grid.ColumnDefinitions>

            <Grid.RowDefinitions>

                <RowDefinition/>

                <RowDefinition/>

                <RowDefinition/>

            </Grid.RowDefinitions>

            <Label Content="類型名稱:" Grid.Column="0" Grid.Row="0"/>

            <TextBox Grid.Column="1" Grid.Row="0" Text="{Binding Path=AssemblyInstanceName, UpdateSourceTrigger=PropertyChanged}"/>

            <Label Content="命名類別:" Grid.Column="0" Grid.Row="1"/>

            <ComboBox  Grid.Column="1" Grid.Row="1" ItemsSource="{Binding Path=Categories, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding Path=Category, UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Name"/>

            <StackPanel Orientation="Horizontal" Grid.Column="0" Grid.Row="2" Grid.ColumnSpan="2" HorizontalAlignment="Right">

                <Button Content="確定" IsEnabled="{Binding Path=IsEnabled, UpdateSourceTrigger=PropertyChanged}" Command="{Binding Path=OK_Command}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType=Window}}"/>

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

            </StackPanel>

        </Grid>

    </Window>




        public partial class AssemblyViewWindow : Window

        {

            public AssemblyViewWindow()

            {

                InitializeComponent();

            }

            public AssemblyViewWindow(ViewModel viewModel)

            {

                InitializeComponent();

                this.DataContext = viewModel;

            }

        }




    ViewModel:


       public class ViewModel:INotifyPropertyChanged

        {

            private string assemblyInstanceName = string.Empty;

            public string AssemblyInstanceName

            {

                get 

                { 

                    return assemblyInstanceName;

                }

                set 

                { 

                    assemblyInstanceName = value;

                    NotifyPropertyChanged("AssemblyInstanceName");

                    CheckOkBtn();

                }

            }

            private List<Category> categories = new List<Category>();

            public List<Category> Categories

            {

                get

                {

                    return categories;

                }

            }

            private Category category = null;

            public Category Category

            {

                get 

                { 

                    return category;

                }

                set 

                { 

                    category = value;

                    NotifyPropertyChanged("Category");

                    CheckOkBtn();

                }

            }

            private bool isEnabled = false;

            public bool IsEnabled

            {

                get { return isEnabled; }

                set

                {

                    isEnabled = value;

                }

            }

            private OK_Command ok_Command = null;

            public OK_Command OK_Command 

            {

                get { return ok_Command; }

            }

            private Cancel_Command cancel_Command = null;

            public Cancel_Command Cancel_Command

            {

                get { return cancel_Command; }

            }

            public ViewModel(List<Element> elems)

            { 

                foreach(Element elm in elems)

                {

                    if (categories.Where(m=>m.Name==elm.Category.Name).Count()==0)

                        categories.Add(elm.Category);

                }

                this.cancel_Command = new Cancel_Command();

                this.ok_Command = new OK_Command();

            }

            public event PropertyChangedEventHandler PropertyChanged;

            public void NotifyPropertyChanged(string name)

            {

                if (PropertyChanged != null)

                {

                    PropertyChanged(this, new PropertyChangedEventArgs(name));

                }

            }

            private void CheckOkBtn()

            {

                if (assemblyInstanceName == string.Empty || category == null)

                    IsEnabled = false;

                else

                    IsEnabled = true;

                NotifyPropertyChanged("IsEnabled");

            }

            

        }




    ICommand:


        public class OK_Command : ICommand

        {

            public bool CanExecute(object parameter)

            {

                return true;

            }

            public event EventHandler CanExecuteChanged;

            public void Execute(object parameter)

            {

                AssemblyViewWindow myWin = parameter as AssemblyViewWindow;

                myWin.DialogResult = true;

                myWin.Close();

            }

        }

        public class Cancel_Command : ICommand

        {

            public bool CanExecute(object parameter)

            {

                return true;

            }

            public event EventHandler CanExecuteChanged;

            public void Execute(object parameter)

            {

                AssemblyViewWindow myWin = parameter as AssemblyViewWindow;

                myWin.DialogResult = false;

                myWin.Close();

            }

        }


    本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

    未標題-1.jpg

    上一篇:二次開發教程:Revit開發之AddInManager安裝包簡單制作

    下一篇:二次開發教程:Revit開發之警告和錯誤處理

    主站蜘蛛池模板: 一区二区在线播放视频| 偷拍精品视频一区二区三区| 日韩一区二区三区视频久久| 久久久无码精品国产一区| 亚洲AV成人精品日韩一区| 亚洲AV无码一区二区二三区入口 | 色妞AV永久一区二区国产AV| 午夜影院一区二区| 色噜噜狠狠一区二区三区果冻| 国产一区二区三区在线| 国产精品av一区二区三区不卡蜜 | 亚洲乱码一区二区三区在线观看 | 久久精品动漫一区二区三区| 三级韩国一区久久二区综合| 风间由美在线亚洲一区| eeuss鲁片一区二区三区| 在线精品亚洲一区二区| 亚洲一区二区三区在线网站| 中文字幕在线观看一区二区三区 | 国产一区二区在线视频| 夜夜爽一区二区三区精品| 国产伦精品一区二区| 国产精品va一区二区三区| 国产福利无码一区在线| 午夜爽爽性刺激一区二区视频| 人妻在线无码一区二区三区| 国内自拍视频一区二区三区 | 国产乱码精品一区二区三区中文 | 日本在线视频一区二区三区| 精品国产免费观看一区 | 久久99国产精一区二区三区| 中文字幕在线观看一区二区三区| 中文无码AV一区二区三区| 久久4k岛国高清一区二区| 无码人妻精品一区二区三区东京热| 久久国产午夜精品一区二区三区 | 国产丝袜一区二区三区在线观看| 3D动漫精品啪啪一区二区下载| 亚洲欧美一区二区三区日产| 精品免费国产一区二区| 又紧又大又爽精品一区二区|