最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

环球快看:Revit二次开发 知识点总结(表格)

来源:博客园

Revit二次开发 知识点总结(表格)

宏Macro


【资料图】

概述

宏是一种程序,用来实现重复任务的自动化;

宏可以执行一系列预定义的步骤,从而完成特定任务;

模块是对宏的分组;实际上是一个编程项目;

应用程序级的宏:可以在任何文档中使用,可以自行运行;可以独立于Revit运行;

可以向Revit添加工具;可以修改文档;可以批量打开文档;将新设置应用于新文档;

宏支持的语言:C#、VB.NET、Ruby、Python;

水暖电

概述

风管Duct、管道Pipe、管件MechanicalFitting、设备MechanicalEquipment、水暖电系统MEPSystem;

风管Duct、水管Pipe、电线Wire,都是继承自MEPCurve,MEPCurve继承自Element;

风管

MEPCurve.MEPSystem管道对应的系统;

MEPCurve.ConnectorManager电气连接件管理类,可以获取所有连接件;

MEPCurve.Diameter,Height,Width,对于圆形风管,访问宽高会异常,方形风管访问直径会异常;

Duct.DuctType管道类型;Duct.IsPlaceholder是否是管道占位符;

Duct.Location属性可以转型为LocationCurve,再通过LocationCurve.Curve可以获取管道的位置曲线;

创建普通风管:

Duct Duct.Create(Document,ElementId systemTypeId,ElementId ductTypeId,ElementId levelId,XYZ firstPoint,XYZ secondPoint);

Document在哪个文档中创建风管;systemTypeId水暖电系统的族;ductTypeId管道类型;

levelId标高;firstPoint管道起点;secondPoint管道终点;

创建软风管:

FlexDuct FlexDuct.Create(Document,ElementId systemTypeId,ElementId ductTypeId,ElementId levelId,XYZ startTangent,XYZ endTangent,IList points);

FlexDuct FlexDuct.Create(Document,ElementId systemTypeId,ElementId ductTypeId,ElementId levelId,IList points);

创建风管占位符:

风管占位符并不是物理风管,而是表示在响应位置上会放置一段风管;

Duct.CreatePlaceholder();创建一般风管的占位符;

MechanicalUtils.ConvertDuctPlaceholders;可以将风管占位符转换成风管;

管道

管道Pipe:用于连接管件、管路附件、卫浴装置等;

管道也可以分为:一般管道、软管道、管道占位符;

Pipe.Create();FlexPipe.Create();PipePlaceholder.Create();

电气连接件

MEP元素都是通过电气连接件Connector进行连接;

获取连接件1:Duct.ConnectorManager.Connectors;

获取连接件2:FamilyInstance.MEPModel.ConnectorManagers.Connectors;

connector.AllRefs;connector.Owner.Name;connector.ConnectorType;

水暖电模型

水暖电模型MEPModel,是管件MechanicalFitting或者设备MechanicalEquipment的父类;

获取管件或设备的水暖电模型:

1、首先过滤出FamilyInstance;

2、FamilyInstance.MEPModel获取MEPModel;

3、把MEPModel转换成响应的子类;

风管管件ductFitting和管件pipeFitting,用于连接不同的风管或管道;

管件:弯头Elbow、三通Tee、过渡件Transition、管接头Union、四通Cross;

NewElbowFitting(Connector c1,Connector c2);

NewTeeFitting(Connector c1,Connector c2,Connector c3);

NewTransitionFitting(Connector c1,Connector c2);

NewUnionFitting(Connector c1,Connector c2);

NewCrossFitting(Connector c1,c2,c3,c4);

水暖电系统

水暖电系统MEPSystem子类有:MechanicalSystem风管系统、PipeingSystem水管系统、ElectricalSystem电器系统;

风管系统用于计算送风流向和流量,是一个逻辑概念;

水管系统用于计算流量和流速,是一个逻辑概念;

MEPSystem.BaseEquipment系统的设备、BaseEquipmentConnector电器连接件、Elements其他构件;

MEPSystem.Add(ConnectorSet connectors);添加构件;

MEPSystem.Remove(ICollection elementIds);移除构件;

MEPSystem.Remove(ConnectorSet connectors);移除构件;

MechanicalSystem Document.Create. NewMechanicalSystem(Connector baseEquipmentConnector,ConnectorSet connectors,DuctSystemType ductSystemType);

baseEquipmentConnector设备上的电气连接件;

connectors系统构件上的电气连接件;

ductSystemType管道系统类型(送风、回风等);

水暖电设置类

ElectricalSetting电气设置;

DuctSettings,PipeSettings机械设置;

DuctSizeSettings机械尺寸设置;

ElectricalLoadClassification负荷分类;获取所有负荷分类用ElementClassFilter;

ElectricalDemanFactorDefinition需求分析;获取所有需求系数用ElementClassFilter;

通过静态函数获取设置类:

DuctSizeSettings.GetDuctSettings(Document);

用ElementClassFilter过滤出ElectricalLoadClassification和ElectricalDemandFactorDefinition;

空间和分区

空间,用于分析MEP中的容积;可以计算热负荷和冷负荷;

空间可以放到工程中,也可以被取消放置或者删除;

空间可以放到剖面视图中并显示;

空间不能放到正视图或者3D视图,并且也不能显示;

空间应放在未被占用的分区中;

分区由一个或多个空间组成;

只要空间组件未被占用,就可以添加到分区中;

不同层高的控件组件,也可以放到一个分区中;

duct英[dʌkt]美[dʌkt]n. 管,导管;(电线,电缆等的)管道

材料Material

概述

材料控制模型图元在视图和渲染图像中的 显示方式;

材料可以指定以下信息:

图形:控制外观;物理:用于结构分析;热度:用于能量分析;

外观:控制显示方式(渲染视图、真实视图、光追视图);

材料的类:Material图形类、AppearanceAssetElement外观类、PropertySetElement物理类/热度类;

读取

Material.Name名字、MaterialClass类别、Parameters参数列表等;

Material.UseRenderAppearanceForShading使用渲染外观;

Material.Color颜色、SurfacePatternId表面填充图案、SurfacePatternColor表面填充颜色、CutPatternId截面填充图案、CutPatternColor截面填充颜色;

Material.StructuralAssetId物理属性(结构属性),ThermalAssetId热度属性;

SetMaterialAspectByPropertySet();设置物理和热度属性;

StructuralAsset ProperSetElement.GetStructuralAsset();

ThermalAsset ProperSetElement.GetThermalAsset();

设置

设置方式:组类别的预定义材料、系统族的材料设置、构件的材料设置、面的材料设置;

可以通过Category类的Material属性,将材料设置到一个族类别上;

复合结构材料设置:分层设置;firstLayer.MaterialId=newMat.Id;

负载结构材料设置:各个元素分别设置;

面的材料设置:

void Paint(ElementId elementId,Face,ElementId materialId);

void Paint(ElementId elementId,Face,FamilyParameter);

void RemovePaint(ElementId elementId,Face);

结构建模

概述

结构模型元素:只在结构产品中存在的特定元素;

分析模型:分析模型类、集合信息、参数信息、支撑信息、编辑分析模型、分析链接;

结构模型元素

结构柱、结构梁、结构支撑、独立基础,都是FamilyInstance类;

可以通过StructuralType进行区分;

StructuralType.Beam结构梁、Brace结构支撑、Column结构柱、Footing独立基础;

梁系统BeamSystem:BeamSystemType、BeamType、Direction、Level、Profile;

结构桁架Truss:Truss.Create();TrussType;Truss.Truss;

结构基础ContFooting:独立基础(FamilyInstance类)、墙基础(ContFooting类)、基础底板(Floor类);

有些元素既存在于结构模型中,又存在于建筑模型中;

结构墙和建筑墙都是Wall类;

结构楼板、基础底板、建筑楼板都是Floor类;

荷载:点荷载、线荷载、面荷载;

荷载力Forces、弯矩Moments、荷载性质LoadNatures、荷载工况LoadCases、荷载组合LoadCombinations;

NewLoadCase(string name,LoadNature nature,Category category);

NewLoadNature(string name);NewLoadUsage(string name);

NewLoadCombination(string name,int typeId,int stateId,double[] factors,LoadCaseArray cases,LoadCombinationArray combinations,LoadUsageArray usages);

NewPointLoad();NewLineLoad();NewAreaLoad();

边界条件:

NewPointBoundaryConditions();NewLineBoundaryConditions();NewAreaBoundaryConditions();

分析模型

分析模型时对结构物理模型在工程学上的描述;

有分析模型的元素:结构柱、结构框架(结构梁、结构支撑)、结构墙、结构楼板、结构基础(独立基础、条形基础、基础底板);

Element.GetAnalyticalModel();获取分析模型,如果没有返回null;

通过API创建的结构元素没有分析模型AnalyticalModel,如果获取就返回null;

如果创建结构元素后,调用Document.Regenerate(),该结构元素就会有分析模型了;

分析模型包含的信息:

AnalyticalLocation位置信息、AlignmentMethod延伸方法/对齐方法、Projection投影、AnalyzeAs分析为、Approximate近似曲线、AnalyticalModelSupport支撑信息;

分析调整:AlignmentMethod.AutoDetect自动调整、ManuallyAdjust手动调整;

GetPoint();GetCurve();GetCurves(AnalyticalCurveType);获得的线没有几何引用;

if(model.IsSinglePoint()){XYZ point=model.GetPoint();}

if(model.IsDingleCurve()){XYZ point=model.GetCurve();}

truss 英[trʌs]美[trʌs]n. 桁架; (支撑屋顶、桥梁等的)构架;

桁(héng)架(jià)(truss):一种由杆件彼此在两端用铰链连接而成的结构。

combination英[ˌkɒmbɪˈneɪʃn]美[ˌkɑːmbɪˈneɪʃn]n. 结合(体);联合(体)

regenerate英[rɪˈdʒenəreɪt]美[rɪˈdʒɛnəˌret]vt.& vi. 使再生;回收(废热,废料等);革新;使悔悟

边界条件,boundary condition是指在求解区域边界上所求解的变量或其导数随时间和地点的变化规律。边界条件是控制方程有确定解的前提,对于任何问题,都需要给定边界条件。边界条件的处理,直接影响了计算结果的精度。而解微分方程要有定解,就一定要引入条件, 这些附加条件称为定解条件。

如果方程要求未知量y(x)及其导数y′(x)在自变量的同一点x=x0取给定的值,即y(x0 )=y0,y′(x0)= y0′,则这种条件就称为初始条件,由方程和初始条件构成的问题就称为初值问题;

而在许多实际问题中,往往要求微分方程的解在某个给定区间a ≤ x ≤b的端点满足一定的条件,如y(a) = A , y(b) = B,则给出的在端点(边界点)的值的条件,称为边界条件,微分方程和边界条件构成数学模型就称为边值问题。

边值问题中的边界条件的形式多种多样,在端点处大体上可以写成这样的形式,Ay+By"=C,若B=0,A≠0,则称为第一类边界条件或狄里克莱(Dirichlet)条件;

B≠0,A=0,称为第二类边界条件或诺依曼(Neumann)条件;

A≠0,B≠0,则称为第三类边界条件或洛平(Robin)条件。

功能扩展区Ribbon UI

概述

Ribbon控件:选项卡页RibbonTab、面板RibbonPanel、命令按钮PushButton、下拉按钮PulldownButton、下拉切换按钮SplitButton、下拉组合框Combobox、单选按钮RadioButtonGroup、多选按钮ToggleButton、文本框TextBox、分隔符Separator;

容器类控件:选项卡页RibbonTab、面板RibbonPanel;

普通控件必须放在RibbonPanel内,而RibbonPanel必须放在RibbonTab内;

除容器控件外,每个控件都有两个类:

RibbonItemData类,用来配置控件参数,可以先创建好配置参数,然后作为入参创建控件;

RibbonItem表示控件本身,拥有RibbonItemData的所有参数,可以在创建控件后,修改RibbonItem的属性,对控件进行配置;

弹出提示:可以通过ToolTip属性设置提示信息,可以通过LongDescription设置更加详细的提示信息,可以通过ToolTipImage设置提示图片;

按钮类可以通过LargeImage和Image设置按钮的图标;

层叠布局的控件和小控件(TextBox等)只有Image属性,没有LargeImage;

LargeImage最合适的尺寸是32*32像素,Image最合适的尺寸是16*16像素;

RibbonItem.Visible用来显示隐藏控件;RibbonItem.Enabled可以让控件可用或者不可用;

创建

创建Tab和Panel:

void UIControlledApplication.CreateRibbonTab(string tabName);

RibbonPanel UIControlledApplication.CreateRibbonPanle(string tabName,string panelName);

RibbonPanel UIControlledApplication.CreateRibbonPanle(string panelName);

不指定tabName时,表示在Add-Ins选项卡页中创建;

RibbonPanel UIControlledApplication.CreateRibbonPanle(Tab tab,string panelName);

在Revit的选项卡页上创建,目前只支持Analyze选项卡页和Add-Ins选项卡页;

获取Panels:

List UIControlledApplication.GetRibbonPanels();在Add-Ins选项卡页中寻找;

UIControlledApplicatoin.GetRibbonPanels(Tab);只支持在Analyze和Add-Ins选项卡页寻找;

UIControlledApplication.GetRibbonPanels(string tabName);在自定义选项卡页中寻找;

只能拿到自定义的Panels,而不能拿到Revit内置的Panels;

添加控件:

RibbonItem RibbonPanel.AddItem(RibbonItemData itemData);

IList RibbonPanel.AddStackedItems(RibbonItemData item1,RibbonItemData item2);

添加2个层叠布局控件,两个控件以小尺寸的方式,层叠在面板的同一列;

IList RibbonPanel.AddStackedItems(RibbonItemData item1,item2,item3);

3个控件,层叠在面板的同一列;

普通样式:所有控件都支持AddItem创建普通样式;

层叠样式:PushButton、ComboxButton、TextBox支持层叠样式,AddStackedItems;

不支持层叠样式:RadioButtonGroup、SplitButton不支持层叠样式;

添加分隔符:void RibbonPanel.AddSeparator();

bool RibbonPanel.Visible控制面板的显示和隐藏;

bool RibbonPanel.Enabled控制面板是否可用;

按钮类

命令按钮:

PushButton命令按钮,对应一个外部命令函数ExternalCommand;

RibbonItem RibbonPanel.AddItem(RibbonItemData data);

PushButtonData data=new PushButtonData(buttonName,string text,assemblyName,className);

buttonName控件的名称,text控件显示的文本;

assemblyName程序集名称,className程序集中的类名;(系统自动绑定到其中的ExternalCommand)

下拉按钮:

RibbonItem RibbonPanel.AddItem(RibbonItemData data);添加下拉;

PushButton PulldownButton.AddPushButton(PushButtonData data);添加按钮;

void PulldownButton.AddSeparator();添加水平分割线;

下拉记忆按钮:

下拉记忆按钮SplitButton是下拉按钮PulldownButton的派生类;

下拉记忆按钮可以关联到其中的一个命令按钮;

关联按钮:PushButton SplitButton.CurrentButton可以设置关联按钮;

bool SplitButton.IsSynchronizedWithCurrentItem是否可以设置当前按钮(关联按钮);

当为true时,被点击的按钮将自动成为当前按钮(关联按钮);

当为false时,当前按钮始终时下拉列表中的第一个按钮,并且CurrentButton不可修改;

下拉组合框:

下拉组合框ComboBox(下拉菜单),只能选择其中一项,而不能多选;

RibbonItem RibbonPanel.AddItem(RibbonItemData data);

ComboBoxMember ComboBox.Current;当前被选中的项;

void ComboBox.AddSeparator();添加分割线;

ComboBox.CurrentChanged;选择项被改变的事件;

ComboBox.DropDownOpened;展开下拉项的事件;

ComboBox.DropDownClosed;折叠下拉项的事件;

ComboBoxMember ComboBox.AddItem(ComboBoxMemberData data);

IList ComboBox.AddItems(IList dataList);

单选类

选择按钮组:

选择按钮组RadioButtonGroup是一组互斥的按钮组,只能选择其中一个;

RadioButtonGroup.Current获取当前选择的按钮;

切换按钮:

切换按钮ToggleButton是选择按钮组中的一个组员;

切换按钮被选中后,无法通过单击取消选择,而只能选择其他项从而取消该项;

切换按钮可以绑定一个ExternalCommand命令,也可以不绑定;

通过RadioButton.Current来改变选中项,不会触发选中项对应的ExternalCommand命令;

文本框

RibbonItem RibbonPanel.AddItem(RibbonItemData data );

bool ShowImageAsButton将上面的图片变成按钮;默认false,图片在左边;

当为true,图片显示在右边,单击该按钮相当于Enter回车键;

string PromptText提示信息;

bool SelectTextOnFocus默认false,为true时,当文本框获取焦点,其中的文本自动选中;

文本框通过Value设置其中的文本内容;

编辑文本框时,必须按下Enter或者ImageButton才行,否则一旦文本框失去焦点,则恢复到原先的值;

EnterPressed按下确认键的事件;

扩展面板:

扩展面板SlideOut可以通过RibbonPanel.AddSlideOut()添加;

扩展面板可以扩展元面板的显示范围,点击向下箭头即可展开扩展面板;

添加扩展面板后,后续添加的控件都显示在扩展面板区;

对于每个面板,最多只能添加一个扩展面板(仅此一次),否则异常;

对话框

任务对话框:

任务对话框TaskDialog,是一种模态对话框;

标题Title是必须的,并且是唯一的,不能重复;

标题应具有描述性意义,遵循(插件名称--短标题)的格式;

插件名称定义在.addin文件里面,如果没有定义插件名称,则不显示;

短标题就是Title属性的值;

主说明MainInstructions:必须的,用大字体显示。不得超过3行;

主要内容MainContent:非必须;扩展内容ExpandedContent扩展内容:非必须,很少用;

命令链接CommandLinks包含2部分:

主要内容MainContent:必须的;补充内容SupportingContent:可以为空;

AddCommandLink(CommandLinkId,string mainContent);

AddCommandLink(CommandLinkId,string mainContent,string supportingContent);

TaskDialogCommandLinkId枚举只有4个值,因此最多只能添加4个命令链接;

按钮:TaskDialogCommandButtons.OK,Cancel,Yes,No,Retry,Close,None;

默认按钮TaskDialog.DefaultButton;

不再提示:TaskDialog.VerificationText如果 不设置值,则没有不再提示的复选框;

TaskDialog.WasVerificationCheked()不再提示的复选框是否被选取;

文字信息:TaskDialog.FooterText一般用来链接到一个网址,提供更多帮助信息;

TaskDialog dialog=new TaskDialog(“版本信息”);dialog.Show();

TaskDialogResult.None,OK,Cancel,Retry,Yes,No,Close,(CommandLink1,2,3,4);

事件Events

概述

分类1:预备事件PreEvent、事后事件PostEvent、单一事件;

分类2:数据库事件DB、界面事件UI;

Application和Document都能访问数据库事件,只有UIApplication能访问UI事件;

ControlledApplication无法访问文档;

ControlledApplication常用来在OnStartup,OnShutdown中注册和注销(取消注册)事件;

Object参数,表示事件的发送者(触发者);

EventArgs参数,表示事件相关的参数;

application.DocumentSavingAs+=new EventHandler(Handler);

不建议在外部命令注册事件;

如果非要在外部命令注册事件,那么注销也应在该外部命令中;

通常在IExternalApplication.OnStartup()中注册事件;

通常在IExternalApplication.OnShutdown()中注销事件;

可以在任何需要的时候注销事件;

注册事件用+=,追销事件用-=;

可取消事件

使用Cancellable属性可以判定一个事件能否被取消;

预备事件被取消后,不能反取消(撤销该取消);

如果预备事件取消了,其他预备事件处理函数不会触发;

预备事件取消了,时候事件依然会触发;

数据库事件

ApplicationInitialized:Revit程序初始化以后,所有外部程序已经启动,Revit已经准备好处理文档时,触发;通常通过ControlledApplication来注册;

DocumentChanged:事务提交、撤销、重做时触发,表示文档已被修改;

可以用来同步外部数据,和文档数据库中数据保持一致;

DocumentChangedEventArgs参数中,可以通过其中的方法获取变化的元素;GetAddElementIds(),获取添加元素集合,支持ElementFilter;

GetModifiedElementIds(),获取所有被修改的元素,支持ElementFilter;

GetDeletedElementIds(),获取所有被删除的元素,不支持ElementFilter;

DocumentClosing,DocumentClosed;关闭文档;

DocumentCreating,DocumentCreated;创建文档;

DocumentOpening,DocumentOpened;打开文档;

DocumentPrinting,DocumentPrinted;打印文档;

DocumentSaving,DocumentSaved;保存文档;

DocumentSavingAs,DocumentSavedAs;文档另存为;

FileExporting,FileExported;导出文件;

FileImporting,FileImported;导入文件;

ViewPrinting,ViewPrinted;打印视图;

DocumentSynchronizingWithCentral;要同步中心模型时;

DocumentSynchronizedWithCentral;同步完中心模型时;

FailuresProcessing;一个事务结束处理失败时触发;

ProgressChanged;一个操作有进度条时触发;

界面事件

ApplicationClosing;Revit程序即将关闭时;

DialogBoxShowing;对话框即将显示时;

DIsplayingOptionsDialog;属性对话框即将显示时;

DockableFrameFocusChange;DockableFrame焦点改变后;

DockableFrameVisibilityChanged;DockableFrame可见性改变后;

Idling;Revit程序空闲时;

ViewActivating,ViewActivated;激活视图;

闲置事件

public EventHandler UIApplication.Idling;

触发1:Revit闲置时(用户不对Revit进行操作)时触发;

触发2:外部程序可以安全访问当前文档(没有进行中的事务);

闲置事件,允许处理函数开启事务,对文档进行修改;

闲置事件,函数计算量不宜过大,否则界面卡顿;

默认模式:要求用户处于活动状态,当鼠标停止移动或者完成一个命令后,会一直触发;用户离开电脑一段时间后,用户处于非活动状态,不会触发;

非默认模式:即时用户处于非活动状态(离开电脑一段时间),也会持续触发,可以利用空闲时间执行大量计算工作;

使用IdlingEventArgs.SetRaiseWithoutDelay()设置成非默认模式,在每次触发时都要进行设置,否则下次触发就会自动切换到默认模式;

闲置事件无法取消;

外部事件

可以用于非模态对话框,可以接受异步处理;

继承并实现外部事件处理接口IExternalEventHandler;

使用流程:

1、用静态方法ExternalEvent.Create()创建一个外部事件ExternalEvent;

2、当非模态对话框某个时候需要调用Revit方法时,调用ExternalEvent.Raise();

3、Revit会在下个闲置时间时调用IExternalEventHandler.Execute();

ExternalEvent.Raise()不会立即触发,而是要等到下一个闲置时间才触发;

IExternalEventHandler的实例会被注册到Revit中,每次触发时,Execute函数被调用;

视图View

概述

视图是 通过Revit模型创建的图像;是对Revit文档中的数据进行的图像化展示;

每个文档可以有多个视图,当前获得焦点的视图称为活动视图ActiveView;

视图生成过程,就是将三维物体投射到二维平面的过程;

2种类型的投影:透视投影、正交投影;

2种坐标系:世界/模型坐标系、观察坐标系;

观察坐标系是用来将模型呈现在观察者眼中的;

观察坐标系的原点就是观察者的眼睛,用View.Origin获取;

View.RightDirection右,UpDirection上,ViewDirection屏幕向外,分别表示XYZ轴;

视图分类

裁剪盒外的元素不会显示在视图中;

View.CropBox获取裁剪盒,是一个BoundingBoxXYZ类型;

裁剪后的模型会被投影到投影平面;

投影的内容被映射到屏幕的可见区域来显示;

投影内容会被缩放以正确显示在屏幕上;

View.Scale可以获取实际模型和视图模型的比例;

视图的边界是裁剪盒在投影平面上的投影;

View.OutLine可以获取裁剪区域的尺寸;

View.ViewType(枚举)可以获取视图的类型;

按照ViewType枚举分类:

AreaPlan面积平面视图;CeilingPlan天花板投影平面视图;ColumnSchedule柱子明细表视图;

CostReport成本报告视图;Detail详图视图;DraftingView绘图视图;

DrawingSheet图纸;Elevation里面视图;EngineeringPlan结构平面视图、建造视图;

FloorPlan楼层平面视图;

Internal内部视图;Legend图例视图;LoadsReport负荷报告视图;

PanelSchedule配电盘明细表视图;

PressureLossReport压力损失报告;

ProjectBrowser项目浏览器视图;Rendering渲染视图;

Report报告视图;Schedule明细表视图;Section截断面视图(剖面图);

SystemBrowser系统浏览器视图;

ThreeD三维视图;Undefined未定义视图;Walkthrough漫游视图;

按照视图类的类型:

父类View,子类有ViewPlan、View3D、ViewDrafting、ViewSection、ViewSheet;

创建、删除

View3D.CreateIsometric();创建正交三维视图;

View3D.CreatePerspective();创建透视三维视图;

Creation.Document.NewViewDrafting();

ViewPlan.Create();创建平面视图;

ViewPlan.CreateAreaPlan();创建面积平面视图;

ViewSchedule.CreateViewList();创建视图列表;

ViewSchedule.CreateKeynoteLegend();创建注释记号图例;

ViewSchedule.CreateKeySchedule();创建关键字明细表;

ViewSchedule.CreateMaterialTakeoff();创建材质提取明细表;

ViewSchedule.CreateNoteBlock();创建注释块;

ViewSchedule.CreateRevision();创建修订明细表;

ViewSchedule.CreateSchedule();创建明细表;

ViewSchedule.CreateSheetList();创建图纸明细表;

View.CreateCallout();创建详图索引视图;

ViewSection.CreateDtail();创建详图视图;

ViewSheet.Create();创建图纸视图;

PanelScheduleView.CreateInstanceView();创建配电盘明细表;

创建成功,会返回视图引用,否则会返回null或者抛出异常;

Document.Delete(viewId);

三维视图

View3D

透视三维视图、正交三维视图;

View3D.IsPerpective;表示是透视视图(true)还是正交视图(false);

透视三维视图:

View.Origin;表示投影的原点,总是和View3D.EyePosition相同;

X=View.RightDirection;Y=View.UpDirection;Z=View.ViewDirection(指向观察者);

View.CropBox;获取裁剪盒,是一个BoundingBoxXYZ对象;

Crop.Min表示远裁剪面的左下角的坐标(个人理解);

Crop.Max表示近裁剪面右上角的坐标;

Transform.OfPoint()可以将Min和Max转换到世界坐标;

View.Outline.Max,Min分别表示右上角的点和左下角的点;

裁剪区域的坐标使用的是视图坐标系;

由于近大远小,每个物体的比例不同,所以透视图的Scale值总是返回0;

正交三维视图:

Scale表示模型实际尺寸与现实尺寸的比值;

View3D.CreateIsometric(Document,ElementId viewFamilyTypeId);

创建正交三维视图:Document表示在哪个文档中创建,viewFamilyTypeId视图族类型;

View3D.SetOrientation();可改变视图坐标系、裁剪盒大小,从而查看模型不同部分;

剖面框:

剖面框用来裁剪三维模型的可见部分,剖面框外面的部分,即使在裁剪盒中,也不可见;

剖面框可以随模型一起移动和旋转,而裁剪盒不行;

view3D.IsSectionBoxActive=true;可以显示剖面框;

三维视图旋转:

View3D.SetOrientation(ViewOrientation3D );

ViewOrientation3D 参数包含以下信息:

EyePosition观察者所在位置(原点位置);

ForwardDirection观察者需要观察的方向;

UpDirection观察者向上的方向;

这只是临时改变赛维视图的观察坐标,而不会写入Revit文件中;

平面视图

ViewPlan

平面视图都是基于标高创建的,分为楼层平面视图,天花板平面视图;

通常,楼层平面视图是新建工程时的默认打开的视图;

大多工程至少包含一个楼层平面视图和一个天花板视图;

ViewPlan.Create(Document,ElementId viewFamilyTypeId,ElementId levelId);

viewFamilyTypeId视图类型,只能是FloorPlan、CeilingPlan、AreaPlan、StructuralPlan中的一种;

levelId表示在哪个标高上创建视图;

绘图视图

ViewDrafting

绘图视图是与模型没有直接关联的详图;

Autodesk.Revit.Creation.NewViewDrafting();

可以使用不同的详细程度;

绘图视图不显示任何模型元素;

可使用二维详图工具:详图线、详图区域、详图构件、隔热层、参照平面、尺寸标注、符号、文字;

剖面视图

ViewSection

ViewSection.CreateSection(Document,ElementId viewFamilyTypeId,BoundingBoxXYZ sectionBox);

sectionBox是剖面视图的裁剪盒,决定了视图的方向和范围;

可以使用另一个视图的裁剪盒,也可以自定义裁剪盒;

参照详图索引视图

详图视图

详图索引视图以比较大的比例显示另一个视图的一部分;

ViewSection.CreateCallout(Document,ElementId parentViewId,ElementId viewFamilyTypeId,XYZ point1,XYZ point2);

point1、point2用来在父视图中圈定一部分范围;

详图视图在一个其他视图中显示为详图索引或剖面模型视图;

详图视图用来添加模型局部更加详细的信息;

ViewSection.CreateDetail(Document,ElementId viewFamilyTypeId,BoundingBoxXYZ sectionBox);

sectionBox是裁剪盒;sectionBox.Transform.BasisY决定向上的方向;

裁剪区域通过BoundingBox.Min/Max决定;

裁剪距离=BoundingBoxXYZ.Max.Z-BoundingBoxXYZ.Z;

图纸视图

ViewSheet

图纸视图是施工图文档集的一个独立页面;

Revit为每个图纸创建一个图纸视图,然后在上面放置多个图形或明细表;

ViewSheet.Create(Document,ElementId viewSheetId,ElementId viewId,XYZ point);

viewSheetId表示放置视图的图纸,viewId表示被放置的视图,point表示放置位置;

每个图纸都要一个唯一的图纸号,可以用ViewSheet.SheetNumber获取或修改图纸号;

不能将一个图纸视图加入另一个图纸视图(图纸视图不能嵌套);

不能将一个视图同时加入多个图纸视图(子视图不能重复);

明细表

ViewSchedule

明细表以表格形式显示信息,这些信息都是从图元 属性中提取出来的;

可以通过API创建的明细表有:明细表(数量)、关键字明细表、材质提取、注释明细表(注释块)、修订明细表、视图列表、图纸列表、配电盘明细表(MEP);

ViewSchedule.CreateSchedule(Document,ElementId categoryId);普通明细表;

categoryId指明哪类元素统计到表里面;

可以通过ElementId.InvalidElementId指定多个统计类别;

ViewSchedule.CreateSchedule(Document,ElementId categoryId,ElementId areaSchemeId);

面积类明细表,需要指定面积结构AreaScheme元素的Id,即areaSchemeId;

ViewSchedule.CreateKeySchedule(Document,ElementId categoryId);关键字明细表;

categoryId指定元素 类别;

ViewSchedule.CreateMaterialTakeoff(Document,ElmentId categoryId);材质明细表;

ViewSchedule.CreateNoteBlock(Document,ElmentId familyId);注释明细表;

familyId用来指定哪个族的图元应该统计到明细表中;

ViewSchedule.CreateRevisionSchedule(Document);修订明细表;

ViewSchedule.CreateViewList(Document);视图列表;

试图明细表/视图列表,可以按照类型、标高、图纸、或其他参数坠视图进行排序分组;

视图列表可以管理项目中的视图、跟踪视图状态、确保重要视图显示在图纸上(避免遗漏)、企鹅包视图使用一致、确保视图在合适的位置;

ViewSchedule.CreateSheetList(Document);图纸列表/图纸明细表;

图纸列表=图纸明细表=图形索引=图纸索引;

可以将图纸列表当做施工图文档集的目录;

通常将图纸列表放在标题图纸上;

PanelScheduleView.CreateInstanceView(Document,ElementId,panelId);

PanelScheduleView.CreateInstanceView(Document,ElementId templateId,ElementId panelId);

panelId表示配电盘元素;templateId表示配电盘模板元素;

配电盘明细表:用来显示配电盘、线路、负荷等信息;

PanelScheduleView表示配电盘明细表;

orientation英[ˌɔːriənˈteɪʃn]美[ˌɔːriənˈteɪʃn]n. 方向,定位,取向,排列方向;

plumbing英[ˈplʌmɪŋ]美[ˈplʌmɪŋ]n. 水管装置;水暖工的工作;管道工程

建设工程中机电设备(machine、electric、plumbing)安装工程。

建筑工程建筑图中所标的MEP:是指风水暖等设备层,即通常所说的设备层。

族Family

概述

族是一个包含通用属性集/参数集合相关图形表示的图元组;

同一个族的参数值可能不同,但是参数集合是相同的;

族中的变体称为族类型或类型Type;

族API

FamilyManager族管理;FamilyType族类型;FamilyParameter族参数;

FamilyTypeFactory用于创建族;

FamilyElementVisibility编辑图元的可见性;

FamilyManager

族类型的创建、修改;族参数的创建、修改;族参数的关联约束等;

//通过族文件路径打开族文档

Document fDoc = doc.Application.OpenDocumentFile(string familyFile);

//直接从项目打开族文档

Document fDoc = doc.EditFamily(family);

if(fDoc.IsFamilyDocument){FamilyManager fManager=fDoc.FamilyManager}

FamilyManager.CurrentType;

FamilyManager.NewType(string name);

FamilyManager.DeleteCurrentType();

FamilyManager.RenameCurrentType(string newName);

族参数

族参数FamilyParameter是族文档的核心,也是Revit参数化驱动的表现;

按照族参数类型:

共享族参数FamilyManager.AddParameter(ExternalDefinition familyDeifinition,BuiltInParameterGroup parameterGroup,bool isInstance);

一般族参数:FamilyManager.AddParameter(string parameterName,ExternalDefinition familyDefinition,BuiltInParameter parameterGroup,ParameterType parameterType,bool isInstance);这类参数有一个预定义的参数类型;

族类型参数:FamilyManager.AddParameter(string parameterName,BuiltInParameterGroup parameterGroup,Category familyCategory,bool isInstance);这类参数使用Category定义类型;

ExternalDefinition 共享参数的定义;

BuiltInParameterGroup 参数的分组方式;

ParameterType 参数类型(族类型除外);

Category 族类型(改参数就是一个族,用于族文档的嵌套);

按照参数的作用范围:

类型参数:绑定到一个族类型;实例参数:绑定到一个族实例;

族类型对应FamilySymbol类,族实例对应FamilyInstance类;

获取族参数FamilyManager.Parameters→FamilyParameter(所有属性均为只读);

重命名FamilyManager.RenameParameter(FamilyParameter fp,string name);

修改作用范围(变成类型参数):FamilyManager.MakeType(FamilyParameter p);

修改作用范围(变成实例参数):FamilyManager.MakeInstance(FamilyParameter p);

报告参数:由尺寸标注确定的参数;

可以向公式报告参数,可以用作明细表参数;

长度、半径、角度、弧长可以用作报告参数,其他的基本不行;

变成非报告参数FamilyManager.MakeNonReporting(FamilyParameter p);

变成报告参数FamilyManager.MakeReporting(FamilyParameter p);

如果设置失败,则抛出异常;

公式

使用公式,实现族参数之间的关联约束;

公式要能计算出结果;

公式中的所有参数都要存在;

不能将自己作为公式的参数;

往往需要为数字加上单位;

公式中没有其他参数,那么这个参数是只读的;

公式中有一个其他参数,如果其他参数只读,那么该参数也只读;

公式中有多个其他参数,那么改参数一定只读;

FamilyManager.SetFormula(FamilyParameter p,string formula);

编辑族参数

读取族参数Autodesk.Revit.DB.FamilyType类:

double? AsDouble(FamilyParameter p);

int? AsInteger(FamilyParameter p);

string AsString(FamilyParameter p);

string AsValueString(FamilyParameter p);将参数转化为字符串;

ElementId AsElementId(FamilyParameter p);

设置参数值Autodesk.Revit.DB.FamilyManager类:

void Set(FamilyParameter p,double value);

void Set(FamilyParameter p,int value);

void Set(FamilyParameter p,string value);

void Set(FamilyParameter p,ElementId value);

在设置族参数之前,要确保族类型是存在的,否则异常;

删除族参数FamilyManager.RemoveParameter(FamilyParameter p);

关联族参数:

FamilyManager.AssociateElementParameterToFamilyParameter(Parameter elementParameter,FamilyParameter familyParameter);

FamilyManager.CanElementParameterBeAssociated(Parameter elementParameter);

关联族参数和尺寸标注:

dimension.FamilyLabel=familyParameter;添加关联;

dimension.FamilyLabel=null;清除关联;

几何图元管理

实体几何图元(实心),剪切几何图元(空心);

5种创建方式:拉伸、融合、旋转、放样、放样融合;

拉伸:

Autodesk.Revit.Creation.FamilyItemFactory类;

Extrusion NewExtrusion(bool isSolid,CurArrArray profile,SketchPlane,double)

isSolid创建空心的还是实心的(实体几何图元、剪切几何图元);

profile平面上的二维轮廓;

SketchPlane草图平面/工作平面,以该平面为起点,按照法线方向拉伸;

double是拉伸的长度;

拉伸方向由SketchPlane的法线方向决定;

profile可以不在SketchPlane上,但是二者的平面必须平行;

拉伸体的属性:

Extrusion.isSolid是否实心;Sketch获取轮廓线profile和工作平面SketchPlane;

Extrusion.StartOffset,EndOffset拉伸相对于工作平面的起始偏移量和终止偏移量;

Sketch类有2个属性Profile、SketchPlane,都是只读的;

融合:

Blend NewBlend(bool isSolid,CurveArray topProfile,CurveArray bottomProfile,SketchPlane);topProfile顶部轮廓线,bottomProfile底部轮廓线;

融合体属性:

轮廓输入是CurveArray,而属性类型时CurveArrArray;

输入时,系统将CurveArray拆分成多个闭合轮廓线;

读取属性时,系统返回拆分后的多个闭合轮廓线的集合;

topProfile和bottomProfile定点存在映射关系;

VertexIndexPairArray GetVertexConnectionMap();读取映射关系;

void SetVertexConnectionMap(VertexIndexPairArray vertexMap);设置映射关系;

旋转:

Revolution NewRevolution(bool isSolid,CurveArrArray profile,SketchPlane,Line axis,double startAngle,double endAngle);

isSolid实心还是空心(实体几何图元、剪切几何图元);

profile被旋转的轮廓线(必须闭合);

SketchPlane工作平面、草图平面,轮廓线profile可以不在该平面上;

axis旋转轴,必须和轮廓线profile在同一平面;

startAngle起始角度;endAngle结束角度;

旋转方向由工作平面的的法向量确定;

放样:

放样需要两个数据:用于拉伸的轮廓和拉伸的路径;

放样就是让轮廓沿着路径行走,所扫过的立体空间;

Sweep NewSweep(bool isSolid,ReferenceArray path,SweepProfile profile,int profileLocationCurveIndex,ProfilePlaneLocation profilePlaneLocation);

Sweep NewSweep(bool isSolid,CurveArray path,SketchPlane pathPlane,SweepProfile profile,int profileLocationCurveIndex,ProfilePlaneLocation profilePlaneLocation);

isSolid是空心还是实心;

path放样的路径;该路径可以是绘制的也可以是拾取的;

拾取路径ReferenceArray,代表拾取的边缘或者线的集合;

绘制路径CurveArray,可以通过pathPlane指定该路径所在的平面;

profile可以是绘制的轮廓线,也可以是载入的轮廓族;SweepProfile有两个子类;

CurveLoopsProfile:由轮廓线组成的轮廓,可以用NewCurveLoopsProfile()把线段集合转换成放样轮廓线;

FamilySymbolProfile:由轮廓族类型定义的轮廓,可以用NewFamilySymbolProfile(FamilySymbol)将轮廓族转换成放样轮廓线;

profileLocationCurveIndex用来指明轮廓线放置的位置,可以放到拉伸的起点、终点或者其他位置;profilePlaneLocation将放样轮廓线放在哪个平面上;

放样融合:

放样融合是放样和融合两种方式的综合体;

一个轮廓沿着路径走到另一个轮廓,并且形状逐渐变化为另一个轮廓;

轮廓可以是绘制的,也可以是轮廓族定义的;

路径可以是拾取的,也可以是绘制的;

必须有两个轮廓(顶部轮廓、底部轮廓),并且分别位于路径的两端;

可以修改两个轮廓顶点映射关系,就像融合(Blend)那样;

SweptBlend NewSweptBlend(bool isSolid,Reference path,SweepProfile bottomProfile,SweepProfile topProfile);

SweptBlend NewSweptBlend(bool isSolid,Reference path,SketchPlane sketchPlane,SweepProfile bottomProfile,SweepProfile topProfile);

图元连接:Autodesk.Revit.DB.Document类

GeomCombination CombineElements(CombinableElementArray members);

void SeparateElements(CombinableElementArray members);

几何图元可见性

在不同的视图中,希望查看不同的内容,就要用FamilyElementVisibility类进行管理;

5类图元:Extrusion、Rotation、Blend、Sweep、SweptBlend;

Extrusion.GetVisibility();获取FamilyElementVisibility类;

Extrusion.SetVisibility(FamilyElementVisibility);设置;

FamilyElementVisibility.IsShownInCoarse;粗略显示;

FamilyElementVisibility.IsShownInMedium;中等显示;

FamilyElementVisibility.IsShownInFine;精细显示;

获取FamilyElementVisibility,然后修改其属性,再设置回去就可以起作用了;

编辑族、载入族

编辑族、载入族Autodesk.Revit.DB.Document类;

Document EditFamily(Family loadedFamily);

Family LoadFamily(Document targetDocument);

Family LoadFamily(Document targetDocument,IFamilyLoadOptions familyLoadOptions);

Autodesk.Revit.UI.UIDocument类:IFamilyLoadOptions GetRevitUIFamilyLoadOptions();

获取族文档Document.OwnedFamily;

获取族类别Family.FamilyCategory;

获取族参数Family.Parameters;

extrusion英[ɪkˈstruːʒn]美[ɪkˈstruːʒn]n. 挤出/拉伸;推出;喷出;赶出

blend英[blend]美[blend]n. 融合;混合(物)

几何Geometry

概述

Autodesk.Revit.Geometry命名空间;

几何基元类GeometryObject;几何辅助类APIObject;几何集合类IEnumerable、IEnumerator;

几何基元类

GeometryObject的派生类有:

轮廓Profile:可以是单条线、多条连接的非闭合线或者闭合线;

面Face:PlanarFace平面、RuledFace规则曲面、RevolvedFace旋转面、ConicalFace圆锥面、CylindricalFace圆柱面、Hermite曲面(HermiteFace);

边Edge;点Point;

线Curve:Line直线、Arc圆弧线、Ellipse椭圆线、CylindricalHelix螺旋线、Hermite样条曲线(HermiteSpline)、NURBS样条曲线(NurbSpline);

几何元素GeometryElement;

几何实例GeometryInstance、网格Mesh、三维实体Solid;

实体Solid是包含了面和边的三维几何实体,可以获取表面积和体积;

Solid.Edges获取所有边、Faces获取所有面;SurfaceArea表面积;Volume体积;

几何辅助类

BoundingBoxXYZ三维长方体;Transform坐标变换;

Reference一个几何对象的引用;Plane几何平面;

Options解析几何的用户参数选择;

XYZ三维坐标点;UV二维坐标点;

BoundingBoxUV二维长方形;

几何变换

Transform

Transform.OfPoint(XYZ);坐标系的 变换;

Transform.Identity恒等变换,也就是不变换;

Transform.CreateReflection()镜面反射;

Transform.CreateRotation();旋转

Transform.CreateTranslation();平移

Transform.Determinant变换矩阵对应的行列式(相当于体积缩放因子)

Transform.HasReflection是否有镜面反射;

Transform.Scale 缩放系数;

Transform.Inverse逆向变换,也就是获取变换矩阵的逆矩阵;

Transform.IsIdentity是否恒等变换;

Transform.IsTranslation是否平移;

Transform.Multiply()本变换矩阵乘以目标矩阵;

Transform.ScaleBasis()对基向量进行缩放;

Transform.ScaleBasisAndOrigin()对基向量和原点进行缩放;

OfPoint()对一个点进行变换;

OfVector()对一个向量进行变换;

AlmostEqual()是否近似等于另一个变换(1e-9);

获取实例的变换矩阵:

Instance.GetTransform();

创建变换后的实例:

Curve.CreateTransformed(Transform);

Profile.get_Transformed(Transform);创建变换后的实例;

Mesh.get_Transformed(Transform);创建变换后的实例;

几何引用

Reference

创建元素时,返回该元素的引用;

Curve.GetEndPointReference();获取起点、终点的引用;

Curve.Reference;Face.Reference;Edge.Reference;获取对象引用;

几何选项Options

Options.ComputeReference是否计算几何引用;

Options.Detail获取信息的详细程度;Fine、Medium、Coarse;

Options.View不同的视图中,获取到的集合信息也不同;

Options.IncludeNonVisibleObjects获取不可见元素,默认false;

Creation.Application.NewGoemetryOptions();

Element.BoundingBox获取元素的包围盒(平行于坐标轴);

BoundingBoxXYZ.GetSectionBox()获取剖面矩形SectionBox;

BoundingBoxUV不能是倾斜的长方形;

BoundingBoxUV有两个参数(最大点、最小点)

几何集合类

线:CurveArray、CurveArrayIterator;CurveArrArray;

边:EdgeArray、EdgeArrayIterator、EdgeArrayArray、EdgeArrayArrayIterator;

面:FaceArray、FaceArrayIterator;

几何对象:GeometryArray、GeometryArrayIterator;

实例:InstanceArray、InstanceArrayIterator;

网格:MeshArray、MeshArrayIterator;

引用:ReferenceArray、ReferenceArrayIterator;

实体:SolidArray、SolidArrayIterator;

Double:DoubleArray、DoubleArrayIterator;

coarse英[kɔːs]美[kɔːrs]adj. (质地)粗糙的;(言行)粗俗的;DetailLevel.Coarse;

Revit 提供了Transform类来做二次开发时的坐标转换。 你可以给Transform对象进行赋值,构造一个变换矩阵。然后使用这个变化矩阵把给定的坐标点的坐标转成目标坐标系。

初始化Transform,设置其目标坐标系的三个方向向量BasisX,BasisY,BasisZ的值。

获得转换矩阵后,可以用Transform.OfPOint(XYZ pt) 把目标点坐标转换到新坐标系的坐标。也可以用Transform.OfVector(XYZ vector) 对向量进行坐标转换。

注:这里转换后点坐标或向量的单位与输入点或向量的单位相同。默认Revit API所使用的坐标单位都是英尺。

注释Documentation

注释包括:尺寸标注Dimension、文字注释、注释记号、标记、符号;

尺寸标注

Dimension分为3种:临时性尺寸标注Temporary Dimensions、永久性尺寸标注Permanent Dimensions、高程点标注Spot Dimensions;

选择或创建几何图形时,会显示临时尺寸标注,这有利于在适当位置放置构件;

高程点标注用来显示选定点的高程;

API只能访问和创建永久性尺寸标注和高程点标注,而不能访问临时尺寸标注;

永久性尺寸标注:对齐尺寸标注、线性尺寸标注Linear、角度标注Angular、径向尺寸标注Radial、直径尺寸标注Diameter、弧长标注ArcLength;

标注类型Dimension.DimensionShape获取;

Dimension.Above高于、Below低于、Prefix前缀、Suffix后缀、ValueString值、ValueOverride替换实际尺寸值得任意文本内容;

锁定的,不能修改,不会变化;解锁的,可以修改,可以移动;

获取参照Dimension.References;

基线标注BaseLine:从同一根基线开始的多个尺寸标注;

同基准尺寸Ordinate,用于测量从基准原点到某个图元的垂直距离;

Dimension.NumberOfSegments获取尺寸标注的段数;

每个段DimensionSegment和参照Reference一一对应;

第1个段在第1个参照和第2个参照之间,第N段在第N个参照和第N+1个参照之间;

Dimension.Segments获取所有段的集合;

DimensionSegment.Above高于、Below低于、Prefix前缀、Suffix后缀、ValueString值、ValueOverride替换真值的其他文本、IsLocked是否锁定、Origin标注段的原点;

创建尺寸标注

创建线性尺寸标注:

Autodesk.Revit.Creation.Document.NewDimension(View,Line,ReferenceArray );

NewDimension(View ,Line,ReferenceArray ,DimensionType);

创建对齐尺寸标注:

NewAlignment(View,Reference r1,Reference r2);

创建角度尺寸标注:

NewAngularDimension(View,Arc ,Reference r1,Reference r2);

NewAngularDimension(View,Arc,Reference r1,Reference r2,DimensionType);

创建弧长尺寸标注:

NewArcLengthDimension(View,Arc,Reference rArc,Reference r1,Reference r2,DimensionType);

创建直径尺寸标注:

NewDiameterDimension(View,Reference arc,XYZ origin);

创建线性尺寸标注:

NewLinearDimension(View,Line,ReferenceArray);

NewLinearDimension(View,LIne,ReferenceArray,DimensionType);

创建径向尺寸标注:

NewRadialDimension(View,Reference,XYZ origin,DimensionType);

高程点标注

SpotDimension

SpotDimension.Location访问标注所在位置;

NewSpotElevation(View,Reference,XYZ origin,XYZ bend,XYZ end,XYZ refPt,bool hasLeader);

view在哪个视图中创建标注;reference几何参照;origin标注的起点,bend弯曲点,end终点,refPt标注要测量的点;hasLeader是否有箭头;

文字注释

TextNote

TextNote表示文字注释元素;

TextNote.Align文字对齐方式;

TextAlignFlags.TEF_ALIGN_CENTER,TEF_ALIGN_LEFT,TEF_ALIGN_RIGHT;

TextNode.Height高度,Width宽度,LineWidth边框引线宽度,Text文字,BaseDirection水平方向,UpDirection垂直方向,Symbol族类型,Coord坐标,Leaders箭头集合,TextNoteType类型,Parameter参数;

创建文字注释:

NewTextNote(View,XYZ origin,XYZ baseVec,XYZ upVec,double lineWidth,TextAlignFlags,TextNoteLeaderTypes,TextNoteLeaderStyles,XYZ leaderEnd,XYZ leaderElbow,string text);

View注释所在视图,origin原点,baseVec和upVec决定了水平和垂直方向,lineWidth线宽,TextAlignFlags文字对齐方式,TextNoteLeaderTypes箭头类型(直线型或弧形),TextNoteLeaderStyles箭头样式(一段直线型,一段弧线型,两端直线型),leaderEnd箭头端点,leaderElbow箭头弯曲点,text文字内容;

详图Detail

详图线和其他注释一样,也是基于视图的;

Autodesk.Revit.DB.DetailLine详图线;

DetailLine.GeometryCurve几何线;

DetailLine.LineStyle线型;

Autodesk.Revit.Creation.ItemFactoryBase.NewDetailCurve(View,Curve);

区域Region

区域分类:填充区域Filled Region和遮罩区域Masking Region;

填充区域由边界线封闭起来,内部填充某个样式;

遮罩区域,用来在视图中隐藏图元;

可以创建二维遮罩区域或者三维遮罩区域;

两种区域都由同一个类表示Autodesk.Revit.DB.FilledRegion;

如果FilledRegion的属性IsMasking属性为true则表示遮罩区域;

FilledRegion.GetValidLineStyleForFilledRegion(Document)获取填充线样式;

FilledRegion.SetLineStyleId(ElementId)修改填充线样式;

FilledRegion.GetBoundaries()获取边界线集合;

FilledRegion.Create(Document,ElementId typeId,ElementId viewId,IListboundaries);Document是在哪个文档中创建;typeId是填充样式类型;viewId是在哪个视图中创建;boundaries是区域边界线的集合;

FilledRegion.IsValidFilledRegionTypeId(Document,ElementId typeId)是否是填充样式Id;

标记Tag

标记是用来识别图纸元素的注释;

标记相关属性会显示在明细表中;

族库中每个类别都有一个标记,有的标记可以自动载入有的需要手动载入;

分类:按类别标记(按照元素类别)、多类别标记(按照共享参数);

标记类Autodesk.Revit.DB.IndependentTag;

IndependentTag.IsMulticategoryTag是否是多类别标记;

IndependentTag.IsMaterialTag是否是材质标记;

IndependentTag.HasLeader是否有箭头,LeaderElbow箭头拐点位置;LeaderEnd箭头终点位置;LeaderEndCondition箭头终点属性(紧贴标记物、自由放置);

TaggedElementId被标记元素的Id;IsOrphaned被标记元素是否失效(被删除);

TaggedLocalElementId被标记的本地元素Id;TagOrientation标记的朝向(Horizontal、Vertical);TagText标记的文字;

Autodesk.Revit.Creation.Document.NewTag(View,Element elmentToTag,bool addLeader,TagMode,TagOrientation,XYZ point);View在哪个视图创建;elementToTag被标记的元素;addLeader是否添加箭头;

TagMode标记类型(TM_ADDBY_MULTICATEGORY多类别标记、TM_ADDBY_CATEGORY类别标记、TM_ADDBY_MATERIAL材质标记);

TagOrientation标记方向(Horizontal、Vertical);

Autodesk.Revit.DB.RoomTag房间标记、SpaceTag空间标记、AreaTag面积标记;

三者都继承自SpatialElementTag,有共同属性HasLeader、Location、View;

RoomTag.Room,RoomTagType;

SpaceTag.Space,SpaceTagType;

AreaTag.Area,AreaTagType;

符号Symbol

符号是注释元素或其他对象的图形表示,也叫作标记;

Annotation.addLeader添加箭头;removeLeader删除箭头;duplicate复制符号;

建筑建模

标高

Level标高是有限水平平面;

Level.Elevation表示标高的高度;

轴网

Grid继承自Element,Grid.Curve可以获取轴网的曲线;

Grid.IsCurved,如果true就是圆弧曲线Arc,如果false就是直线Line;

Document.Create.NewGrid(Arc);

Document.Create.NewGrid(Line);

宿主元素

宿主元素指可以被某些元素附着的元素(墙上面可以放门窗,墙就是宿主);

天花板、地板、屋顶等都是宿主元素;

宿主元素HostObject继承自Element;

宿主元素的派生类包括Wall、RoofBase(ExtrusionRoof,FootPrintRoof),CeilingAndFloor(Ceiling,Floor);

HostObjAttributes继承自ElementType;

HostObjAttributes派生类有WallType,RoofType,CeilingType,FloorType;

HostObjAttributes.GetCompoundStructure()可以获取符合结构CompoundStructure;

CompoundStructure.GetLayers()可以获取CompoundStructureLayer(每一层);

获取宿主上的元素:

HostObject.FindInserts()可以获取宿主上插入的元素集合;

IListFindInserts(bool addRectOpenings,bool includeShadows,bool includeEmbeddedWalls,bool includeSharedEmbededInserts);

addRectOpenings,true则包含洞口;

includeShadows,true则包含阴影;

inclueEmbeddedWalls,true则包含嵌入的墙;

includeSharedEmbeddedInserts,true则包含共享的嵌入墙;

获取宿主上的面(用以插入元素):

HostObjectUtils.GetBottomFaces(HostObject);底面

HostObjectUtils.GetSideFaces(HostObject);侧面

HostObjectUtils.GetTopFaces(HostObject);顶面

创建墙

Create(Document,Curve ,levelId,bool structural);

Create(Document,IList profile,bool structural);

Create(Document,IList profile,ElementId wallTypeId,levelId,bool structural);

Create(Document,IList profile,ElementId wallTypeId,levelId,bool structural,XYZ normal);normal指定墙的朝向;

Create(Document,Curve ,ElementId wallTypeId,levelId,double height,double offset,bool flip,bool structural);height墙体高度,offset底部偏移,flip是否翻转;

profile是墙的正面轮廓;profile必须是闭合的,否则异常;

创建楼板

NewFloor(CurveArray profile,bool structural);

NewFloor(CurveArray profile,floorType,level,bool structural);

NewFloor(CurveArray profile,floorType,level,bool structural,XYZ normal);

NewFoundationSlab(CurveArray profile,floorType,level,bool structural,XYZ normal);

创建屋顶

拉升屋顶:ExtrusionRoof NewExtrusionRoof(CurveArray profile,ReferencePlane refPlane,Level level,RoofType roofType,double extrusionStart,double extrusionEnd);

迹线屋顶:FootPritRoof NewFootPrintRoof(CurveArray footPrint,Level level,RoofType roofType,out ModelCurveArray footPrintToModelCurvesMapping);

profile屋顶的侧面形状,不是封闭曲线;

refPlane参照平面;level标高;roofType屋顶类型;

extrusionStart 拉升起点,相对于屋顶侧面的位移,负值表示反向拉升;

extrusionEnd拉升终点,相对于屋顶侧面的位移,负值表示反向拉升;

footPrint屋顶的形状,一个或者多个闭合换线;

footPrintToModelMapping获取输入屋顶曲线对应的模型线;

模型线可以进一步对屋顶进行控制,比如通过模型线设置对应的屋顶坡度或者偏移;

创建天花板

尚无API创建天花板;

族实例

FamilyInstance继承自Instance→Element;

获取宿主FamilyInstance.Host();

旋转:FamilyInstance.rotate();旋转180度;

门窗 FromRoom、ToRoom属性,获取门窗和房间的关系;

翻转:FamilyInstance.flipFacing(),CanFilpFacing能否翻转,FacingFlipped是否翻转过;

FamilyInstance.GetSubComponentIds()获取族实例的子构件;

Component.SuperComponent可以获取父构件;

创建族实例:

Autodesk.Revit.Creation.Document.CreateFamilyInstance();

Autodesk.Revit.DB.Document.Create.CreateFamilyInstance();

创建基于宿主的族实例:

NewFamilyInstance(XYZ location,FamilySymbol symbol,Element host,Level level ,StructuralType structuralType);level标高;

NewFamilyInstance(XYZ location,FamilySymbol symbol,Element host,StructuralType structuralType);无标高;

NewFamilyInstance(XYZ location,FamilySymbol symbol,XYZ referenceDirection,Element host,StructuralType structuralType);

location位置;host宿主元素;structuralType结构类型;

如果location超过了宿主的范围,创建可能会失败;

基于视图的二维族NewFamilyInstance(XYZ origin,FamilySymbol symbol,Viedw specView);

基于视图的二维线形族NewFamilyInstance(Line line,FamilySymbol symbol,View specView);

创建基于面的族:

NewFamilyInstance(Reference reference,XYZ location,XYZ referenceDirection,FamilySymbol symbol);

NewFamilyInstance(Face face,XYZ location,XYZ referenceDirection,FamilySymbol symbol);

创建基于面的线形族:

NewFamilyInstance(Face face,Line position,FamilySymbol symbol);

NewFamilyInstance(Reference reference,Line position,FamilySymbol symbol);

批量创建族:

ICollectionNewFamilyInstance2(ListdataList);

房间和面积

房间Room,面积Area,空间Space都继承自SpatialElement;

Room.Name是名称和编号拼接起来的,分别对应BuiltInParameter中的ROOM_NAME,ROOM_NUMBER;

RoomTag房间标记,AreaTag面积标记,SpaceTag空间标记都继承自SpatialElementTag;

RoomTag和AreaTag都是标记元素Annotation;

可以通过RoomTag.Room获取Room,反过来无法通过Room获取RoomTag;

可以获取所有RoomTag,然后筛选出属性Room是指定Room的对象即可;

创建房间

创建Room(Document.Create.NewRoom):

Room NewRoom(Pahse phase);创建一个未放置的房间;

NewRooms2(Phase phase,int count);创建多个房间;

Room NewRoom(Level level,UV point);level标高,放置点由UV参数指定;

如果放置点由闭合回路Plan Circuit,创建的房间会自动绑定该回路;

如果放置点没有房间边界可以绑定,则警告框;

如果放置点已经有房间,则警告框;

Room NewRoom(Room room,PlanCircuit circuit);

在给定的闭合回路创建房间;

如果room为空,则创建一个新房间;

如果room房间未放置,则首先检查该房间的Phase是否和PlanCircuit一致,如果一致则在PlanCircuit放置,否则警告框;

如果room已经放置,则警告框;

NewRooms2(Level);指定标高,Phase为当前默认Phase;等价于NewRooms2(Level,defaultPhase);defaultPhase就是当前默认的Phase;

NewRooms2(Level,Phase);

ModelCurveArray NewRoomBoundaryLines(SketchPlane sketchPlane,CurveArray curves,View view);给定一个草图视图、一个曲线列表、一个平面视图,创建一组房间边界曲线;

创建闭合区域后,取该区域的一个点,再调用NewRoom就可以创建房间了;

创建面积

Document.Create.NewArea();

Area NewArea(ViewPlan areaView,UV point);ViewPlan面积平面视图,UV放置点;

如果该 放置点有闭合回路,则自动绑定该回路;

如果该放置点没有房间边界可以绑定,则警告框;

如果该放置点已有房间,则警告框;

NewAreas(ListdataList);

ModelCurve NewAreaBoundaryLine(SketchPlane sketchPlane,Curve geometryCurve,ViewPlan areaView);给定一个草图视图、一条曲线、一个面积视图,创建一条面积边界曲线ModelCurve;

创建边界曲线后,再取区域内一个点,则可以调用NewArea创建面积了;

ModelCurve区域必须闭合或者接近闭合(误差不超过1英寸);

房间边界

房间边界是一个闭合区间,房间边界可以是:墙、房间分隔、建筑柱、屋顶、楼板、天花板;

房间边界元素需要满足的条件:

对于模型曲线,类别必须是BuiltIndCategory.OST_AreaSeparationalLines;

对于墙、柱、屋顶,参数BuiltInParameter.WALL_ATTR_ROOM_BOUNDING参数必须为true;

面积的边界只能是模型曲线ModelCurve,房间的边界可以是墙等元素;

获取边界Room.GetBoundarySegments(SpatialElementBoundaryOptions options);

返回值是BoundarySegment的集合的集合IList>;

SpatialElementBoundaryOptions 的属性SpatialElementBoundaryLocation指定边界的计算方式;属性StoreFreeBoundaryFaces表示是否计算自由边界面;

平面拓扑

PlanTopology房间依赖于拓扑结构,拓扑结构是由一系列元素形成;

Document.get_PlanTopoligies();

Ducument.get_PlanTopoligies(Phase);

Document.get_PlanTopoligies(Level);

Document.get_PlanTopoligies(Level ,Phase);

只有房间分隔或者房间边界属性为true的元素才能称为拓扑结构的边界;

PlanCircuit.SideNum获取回路的边数;

调用Document.PlanTopologies属性是,需要使用事务Transaction;

房间和实例

族实例和房间的两种关系:

在房间里(桌子、床等);介于两个房间之间(门窗);

实例的房间属性Room、FromRoom、ToRoom;

获取项目某个阶段Phase的相关房间,可以使用get_Room(phase),get_FromRoom(Phase),get_ToRoom(Phase);

所有的族实例都有Room属性,表示在最后一个设计阶段(Phase)该实例被放置的房间;

只有门窗的FromRoom和ToRoom属性不为空,其他族实例的该属性都为空;

门窗可以通过翻转Flip改变其Room;

线元素

CurveElement继承自Element,会被序列化到Revit文件中;Curve不是元素;

CurveElement的派生类有SymbolicCurve符号线、ModelCurve模型线、DetailCurve详图线、CurveByPoints;

其中ModelCurve的派生类有ModelArc、ModelLine、ModelHermiteSpline、ModelEllipse、ModelNerbSpline;

建筑→模型→模型线;注释→详图→详图线;注释→详图→符号线;

获取模型线Curve curve=modelCurve.GeometryCurve;

获取工作平面 SketchPlane plane=modelCurve.SketchPlane;

模型线样式GraphicsStyle lineStyle=modelCurve.LineStyle;

创建模型线Document.Create.NewModelCurve(Curve,SketchPlane);

批量创建Document.Create.NewModelCurveArray(CurveArray,SketchPlane);

Application.Create.NewCurveArray();CurveArray.Insert();

洞口

Opening洞口类,继承自Element;

获取洞口边界,长方形边界用BoundaryRect属性,其他边界用BoundaryCurves属性;

获取宿主用Host属性;IsTransparentIn3D是否在三维视图中透明;

IsTransparentInElevation是否在里面的视图透明;

创建洞口Document.Create.NewOpening(Wall,XYZ startPoint,XYZ endPoint);

元素Element的子类;()中是Element子类的子类;

族相关

FamilyBase(Family);ElementType(FamilySymbol,WallType);Instance(FamilyInstance)

模型元素

SpacialElements(Room,Space);ModelCurve(ModelLine,ModelArc);

HostObject(Wall,RoofBase,CeilingAndFloor);

MEPCurve(Pipe,Duct);Opening;Dimension;

设置相关

PrintSetting;ProjectInfo;SunAndShadowSettings;WorksharingDisplaySettings;

二维元素

CurveElement(DetailCurve(DetailLine,DetailArc,DetialEllipse,DetailNurbSpline));

FilledRegion;TextElement(TextNote);Dimension(SpotDimension);

SpacialElementTag(RoomTag,AreaTag,SpaceTag);IndependentTag;

其他元素

Grid;DesignOption;Phase;Group;Level;View;Material;

元素操作

获取元素

ElementId、过滤器、Selection

获取元素参数

Element.Parameters获取所有参数,然后通过条件找到所需参数;

获取元素参数2Element.get_Parameter(参数),有4中参数:string参数名称、BuiltInParameter枚举、Definition参数定义、Guid参数的guid;

修改元素参数

Element.Set()传入参数类型要匹配,否则异常;只读参数无法修改;

元素参数分类

内建参数BuiltInParameter;

自定义参数(共享参数、项目参数);

共享参数在一个txt共享文件中;

共享参数绑定到Category后,对应元素才会出现新参数;

绑定后的共享参数实际上变成了项目参数;

元素位置

Element.Location,Location可以转型为LocationPoint或者LocationCurve,因为二者都继承自Location;

如果元素是点则转型为LocationPoint,如果元素是线,则转型为LocationCurve;

元素材质

Element.GetMaterial(bool)参数为true时表示获取油漆材质(Painted Material);

分析模型

Element.GetAnalyticalModel();

然后可以调用GetCurve,GetCurves,GetPoint来获取几何信息;

可以通过IsSingleCurve(),IsSinglePoint来确定调用哪个函数;

创建元素

document实例方法:Document.Creat.NewFamilyInstance;Document.Create.NewGrid;

Element子类的静态方法:Material.Create;Wall.Create;

编辑元素

Autodesk.Revit.DB.ElementTransformUtils中支持元素的移动、旋转、镜像;

移动元素

MoveElement(Document,ElementId,XYZ);

MoveElements(Document,ICollection,XYZ);

如果元素是基于标高的,则不能移动Z值(高度值);

移动元素时,其他元素可能会跟着一起动;(墙→墙上的窗户)

被钉住(Pinned=true)的元素无法移动,否则异常;

如果Location可以转换为LocationPoint或者LocationCurve,则可以直接移动转换后的点或线;

参数XYZ并不是移动的目标坐标,而是一个移动的偏移向量;

旋转元素

RotateElement(Document,ElementId,Line,double);

RotateElements(Document,ICollection,Line,double);

旋转角度以弧度为单位,正表示逆时针旋转,负表示顺时针旋转;

旋转轴必须是有限长度的线段,不能是无限长的直线或射线;

旋转轴必须与元素所在平面垂直,否则可能失败;

如果元素的Location可以转型为LocationCurve或者LocationPoint,那么就可以直接旋转元素对应的曲线或者点;

镜像元素

MirrorElement(Document,ElementId,Plane);

MirrorElements(Document,ICollectionelements,Plane plane);

CanMirrorElement(Document,ElementId);

CanMirrorElements(Document,ICollection);

镜像操作需要一个平面作为镜像轴,如果平面为null则异常;

一般应选择与Z平面垂直的平面作为镜像平面;

删除元素

Delete(ElementId);

Delete(IColleciton);

不仅可以删除指定元素,完全依赖该元素的的元素也会被一并删除;

被删除成功的元素被放在一个集合里,作为返回值返回;

删除后,元素的引用失效,如果继续访问这些失效的引用,会异常;

元素的组合

命名空间Autodesk.Revit.Creation;

ItemFactoryBase.NewGroup(ICollection);

可以对组合进行进一步组合;

组合里面的元素可以方便统一修改;

两种组合:模型组合、详图组合;

如果传入NewGoup的元素中只有详图元素,就创建一个详图组合;

如果传入NewGoup的元素中只有模型元素,就创建一个模型组合;

如果传入NewGoup的元素中有详图元素和模型元素,就创建一个详图组合和一个模型组合;

组合中的某个元素被删除后,该元素在界面上仍然可见;

组合中的元素被删除后,不能再次被选中或访问;

如果组合中的所有元素都删除了,那么这个组合也会被删除;

组合内的元素不能单独移动或旋转;

试图移动或旋转元素时,虽然会返回true,但是不会有效果;

元素阵列

LinearArray.Create(Document,View,ElementId,int,XYZ,ArrayAnchorMember);

LinearArray.Create(Document,View,ICollection,int,XYZ,ArrayAnchorMember);

RadioArray.Create(Document,View,ElementId,int,Line,,double,ArrayAnchorMember);

RadioArray.Create(Document,View,ICollection,Line,double,ArrayAnchorMember);

不仅创建阵列元素,还会同时创建一个阵列组;

线型阵列个数2-200,圆弧阵列个数3-200;

元素的依赖元素会一并被阵列;

有的元素不能组合,所以不能阵列,例如section;

大多数的Annotation symbols不能阵列;

创建不组合/无关联阵列,使用ArrayElementWithoutAssotiate,ArrayElementsWithoutAssotiate;

族操作

族Family,包括系统族、内建族、构建族;

系统组是内置的族,不可编辑;

内建族和构建族允许编辑;

内建族只能存储在当前项目文档里,不能被其他文档使用;

使用族实例调用EditFamily函数,编辑族的一个副本;

如果要应用这个编辑后的族副本,使用LoadFamily函数;

EditFamily(Family loadedFamily);

LoadFamily(Document targetDocument,IFamilyLoadOptions familyLoadOptions);

OnFamilyFound(bool familyInUse,out bool overwriteParameterValues);

OnSharedFamilyFound(Family sharedFamily,bool familyInUse,out FamilySource source,out bool overwriteParameterValues);

文档正在被修改中(有打开的事务未关闭)或者只读,则不能调用EditFamily;

可以先使用IsModifiable和IsReadOnly进行判断,再调用;

EditFamily方法不能在动态更新机制(Dynamic Updates)中使用;

LoadFamily中,可以使用RevitUIFamilyLoadOptions弹出提示框进行交互;

参照平面、

参照线

Referenceplane参照平面、ReferenceLine参照线;

NewReferencePlane(XYZ bubbleEnd,XYZ freeEnd,XYZ cutVec,View pView);

NewReferencePlane2(XYZ bubbleEnd,XYZ freeEnd,XYZ thirdPnt,View pView);

参照平面的名字不能重复,并且可以修改;

草图平面

草图平面Sketch Plane和草图Sketch;

草图编辑用来创建各种元素,包括绘制和修改模型的形状;

草图工具1:绘制形状(直线、曲线、圆、多边形、样条线等);

草图工具2:拾取已有几何图形来创建形状(线拾取、面拾取);

Autodesk.Revit.DB.SketchPlane;

Create(Document,ElementId);从几何元素创建草图平面;

Create(Document,Plane);从平面创建草图平面;

Create(Document,Reference);从平面引用创建草图平面;

草图Sketch=草图平面Sketch Plane+轮廓Profile;

元素收集器

FilteredElementCollector(Document);

FilteredElementCollector(Document,ICollection);

FilteredElementCOllector(Document,ElementId);

通用过滤 WherePasses(),可以重复使用实现多次过滤;

快捷过滤OfClass(),OfCategoryId(),OwnedByView();

并集交集UnionWith(),IntersectWith();

FilteredElementCollector对象在过滤后才可以遍历,只创建未过滤的不能遍历;

FilteredElementCollector支持LINQ查询;

元素过滤器

快速过滤器:只检查记录的元素而不展开元素,效率高;

慢速过滤器:获取并展开元素,效率低,内存占用大;

逻辑过滤器:上述过滤器的组合;

Revit会对使用的过滤器进行排序,以减少元素展开,提高效率;

快速过滤器:ElementCategoryFilter,ElementClassFilter,

ElementIsElementTypeFilter,FamilySymbolFilter,ExclusionFilter;

慢速过滤器:ElementLevelFilter使用关联的标高Level进行过滤;

ElementPrameterFilter使用元素的若干个参数进行过滤;

FamilyInstaceFilter使用族类型进行过滤;

CurveElementFilter使用线型进行过滤;

逻辑过滤器:LogicalOrFilter,LogicalAndFilter,

ceiling英[ˈsiːlɪŋ]美[ˈsiːlɪŋ]n. 天花板,顶棚;上限;

roof 英[ruːf]美[ruːf]n. 屋顶;顶部; 车顶

MEP,建设工程中机电设备(machine、electric、plumbing)安装工程。建筑工程建筑图中所标的MEP:是指风水暖等设备层,即通常所说的设备层。

事务Transaction

事务用来将修改提交至文档;

任何文档修改都必须在事务中,否则异常;

任何修改都在事务提交后写入文档;

事务中的所有修改均可撤销;

一个文档只能打开一个事务;

一个事务中可以有多个修改;

TransactionMode会影响事务的处理;

只有Transaction是必须的,另外两个事务是可选的;

跨线程启动事务会异常;

模态对话框之外启动事务会异常;

事务只能从API支持的环境中启动;

事务分类*3

Transaction

事务-必选

不可嵌套

Transaction要放在using中创建,从而自动销毁;

Transaction内不能嵌套Transaction;

Transaction不能从主线程之外调用;

Transaction必须指定名字,从而显示在Undo菜单里;

SubTransaction

子事务-可选

可以嵌套

将一个复杂任务分解为许多小任务;

SubTransaction必须在Transaction内创建;

SubTransaction必须在Transaction关闭(提交/撤销)前关闭(提交/撤销);

SubTransaction可以嵌套SubTransaction;

子SubTransaction必须在父SubTransaction关闭前关闭;

SubTransaction不会显示在Undo菜单里;

TransactionGroup

事务组-可选

可以嵌套

TransactionGroup用来将事务分组,一个组可以处理许多事务;

TransactionGroup撤销时,组内的所有事务都会被撤销(提交成功的也撤销);

TransactionGroup提交时,组内事务状态不变;

TransactionGroup被吸收(Assimilate)时,组内所有事务被合并成一个成功提交的事务;并使用组的名字显示在Undo菜单里;

TransactionGroup必须在所有组内事务启动前启动;

TransactionGroup必须在所有组内事务关闭后关闭;

TransactionGroup可以嵌套TransactionGroup;

子TransactionGroup必须在父TransactionGroup关闭前关闭;

事务方法:Start启动事务;Commit提交事务;RollBack回滚事务;GetStatus获取事务状态;

事务状态TransactionStatus:Uninitialized是否初始化;Started是否启动;RolledBack是否回滚;Commited是否提交;Pending事务被提交或撤销,但是由于出错,处理还未结束,还在等待用户响应;

类别Category

概述

所有继承自Element的类都有Category属性;

Document.Settings.Categories可以获取全部类别;

Categories分类

模型类别Model Categories:包括梁门柱窗墙等;

标注类别Annotation Categories:包括尺寸、网格、标高、文本标注等;

Categories准则

每个族对象属于一个类别;

非族对象,不属于任何类别;(例如材质、视图)

ProjectInfo属于Project Information类别;

一个元素和他的类型通常属于同一个类别;

同一个元素可以拥有不同类别;

不同元素可以属于同一类别;

Document类

位置SiteLocation

Elevation海拔高度;

Latitude维度;

Longitude经度;

PlaceName位置名称;

TimeZone所在时区;

WeatherLocationName气象站名称;

场地ProjectLocations

场地集合ProjectLocationSet ;

ProjectLocation项目场地;

SitePosition相对于地理位置的偏移和旋转;

SiteLocation场地的地理信息;

只有Architecture工程可以有命名场地;

视图View

Document.ActiveView可以获取活动视图;

可以通过过滤器获取素有视图;

元素Element

通过ElementId获取元素;

通过引用reference获取元素;

通过UniqueId获取元素;

获取多个元素可以使用过滤器;

完整路径Path

返回文档的完整路径名称;

如果当前文档未保存,则返回null;

工程名称Title

返回带后缀的工程名称,和不带后缀的工程名称;

打开文档

用Application类的打开文档方法;

Document OpenDocumentFile(string fileName)

Document OpenDocumentFile(ModelPath modelPath,OpenOptions openOptions)

创建文档

用Application类的创建文档方法;

DocumentNewFamilyDocument(string templateFileName)新建族文档;

DocumentNewProjectDocument(string templateFileName)新建工程文档;

DocumentNewTemplateDocument(string templateFileName)新建模板文档;

保存文档

用Document类的保存文档方法;

Save()如果文档从来没有保存过,则使用SaveAs代替Save;

Save(SaveOptions options)指定是否删除源文档的无效数据;

SaveAs(string fileName)如果同名文件已存在,则异常;

SaveAs(string fileName,SaveAsOptions options)options用来指明,如果同名文件已存在是覆盖原文件还是重命名新文件;也可以指明是否删除原文档的无效数据;

SaveAs(ModelPath path,SaveAsOptions options)另存为ModelPath指定的文件位置和名称;

关闭文档

用Document类的关闭文档方法;

Close()如果修改未保存,则会弹出对话框;

如果没有指定路径名称,会异常;

如果目标文件已存在且只读,则异常;

不能关闭活动文档ActiveDocument,只能关闭非活动文档;

UIDocument类

选择Selection

获取多个选中的对象集合;

显示元素

ShowElements()方法

活动视图

UIDocument.ActiveView

刷新视图

UIDocument.RefreshActiveView()

改变当前文档的活动视图

UIDocument.RequestViewChange()异步请求

获取全部视图

GetOpenUIViews()

获取文档

活动文档

UIApplication.ActiveUIDocument获取当前活动文档;

UIDocument activeDoc=commandData.Application.ActiveDocument;

所有文档

Application.Documents获取所有打开的文档;

DocumentSet documents=commandData.Applicaton.Application.Documents;

外部命令

public interface IExternalCommand

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

commandData 入参

包含了Application和Document的引用;

可以获取所有Revit数据(直接/间接);

UIApplication uiApplication=commandData.Application;

Application application=uiApplication.Applicaton;

UIDocument uiDocument=uiApplication.ActiveDocument;

Document document=uiDocument.Document;

message 出参

这是一个出参,用来返回错误信息;

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

{message=”message fail”;return Result.Failed;}

elements 出参

可以高亮显示相关的元素;

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

{

message=”请注意高亮显示的墙体”;

ElementSet elems=commandData.Application.ActiveDocument.Selection.Elements;

foreach(Element e in elems)

{

Wall wall=e as Wall;

if(null==wall)continue;

elements.Insert(e);

}

}

应用类

一个应用对象,对应一个独立会话;

可以通过应用对象访问文档、选项、数据、设置;

UIApplication

访问UI级别接口;

可以访问RibbonPanels;

可以获得用户界面活动文档;

Application

访问其他应用级别内容接口;

文档类

一个文档对象对应一个工程文件;

可以同时打开多个工程,每个工程可以有多个视图;

多文档打开时,处于最顶层/活动的视图,所在的工程或者文档就是活动文档;ActiveDocument;

UIDocument

访问UI级别接口的文档类;

可以用Selection表示选择集;

Document

访问文档内容的文档类;

UIControlledApplication

是对UIApplication的进一步封装;

不能访问Revit文档,只能实现UI定制和事件处理;

ControlledApplication

是对Application的进一步封装;

不能访问Revit文档,只能实现UI定制和事件处理;

[Journaling(JournalingMode.NoCommandData)]

public class MyClass:IExternalCommand{}

Journaling特性模式JournalingMode

NoCommandData

不会把ExternalCommandData.JournalData写入到Revit Journal中;

UsingCommandData

该模式是默认模式

以IDictionary的格式,

把ExternalCommandData.JournalData写入到Revit Journal中;

[Transaction(TransactionMode.Automatic)]

public class MyClass:IExternalCommand{}

Transaction特性模式TransactionMode

TransactionMode没有默认值,必须手动显式指定;

Automatic

系统自动创建Transaction,

不能自己创建Transaction

可以自己创建SubTransaction

Manual

系统不创建Transaction;

自己创建Transaction;

ReadOnly

不能使用Transaction,否则异常;

不能对Revit模型进行修改;

外部命令触发方式:1、外部工具菜单;2、自定义菜单;

RevitAPI.dll

包含了访问Revit中DB级别的Application、Document、Element、Parameter的方法;

也包含IExternalDBApplication接口和其他接口;

RevitAPIUI.dll

包含了所有操作和定制RevitUI的接口;

IExternalCommand相关接口;

IExternalApplication相关接口;

Selection选择;

菜单类RibbonPanel,RibbonItem及其子类;

TaskDialogs任务对话框;

想通过RevitAPI来访问和扩展Revit,需要在用户自己的插件中实现特殊接口;

这些接口包括IExternalCOmmand、IExternalApplication和IExternalDBApplication;

关键词: