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

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

NULL

ad.jpg

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

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

網(wǎng)友投稿

更多

在Revit里可以把一部分構(gòu)件組合起來(lái)創(chuàng)建為一個(gè)部件,


然后可以創(chuàng)建一些針對(duì)這個(gè)部件的視圖


通過(guò)API來(lái)創(chuàng)建主要用到兩個(gè)類


AssemblyInstance 


AssemblyViewUtils 




下面是一個(gè)小例子:




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();

        }

    }


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

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

上一篇:二次開(kāi)發(fā)教程:Revit開(kāi)發(fā)之AddInManager安裝包簡(jiǎn)單制作

下一篇:二次開(kāi)發(fā)教程:Revit開(kāi)發(fā)之警告和錯(cuò)誤處理

60acb4e0ef112.png