revit在桥梁中的应用二次开发(1)——族

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Revit在桥梁中的应用二次开发篇(1)——族

建模篇简单讲了怎么在revit软件中手动建桥梁模型,更多的基础操作的内容可以直接看revit在建筑中应用的相关教程,其实也是相通的,没必要多讲。

这次诚意满满,花了两天时间专门研究二次开发中族的应用。以下代码亲测可试,结合《AUTODESK REVIT二次开发基础教程》可以获得更好的效果。因为书本上都是一些代码片段,而且是基于2015版的,在2016版的revit上部分代码跑不了。我也尝试了很久,终于基本上搞通了族相关的语法。

基础知识直接看书,这里直接上代码。书里的代码片段可以想办法插到完整代码中运行。

1、找到族实例

//用id找到族实例

2、拿到族文档

//拿到族文档

Document familyDoc=

revitDoc.EditFamily(familyInstance.Symbol.Family);

if(!familyDoc.IsFamilyDocument)

{

TaskDialog.Show("错误3","familyDoc不是族文档!");

}

else

{

TaskDialog.Show("revit","familyDoc是族文档!");

}

3、修改族类型名称(完整代码)

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Autodesk.Revit.UI;

using Autodesk.Revit.DB;

using Autodesk.Revit.UI.Selection;

using Autodesk.Revit.ApplicationServices;

namespace修改族类型名称

{

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manu al)]

[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoComm andData)]

[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption. Manual)]

public class Class1:IExternalCommand

{

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

{

Document revitDoc=

commandData.Application.ActiveUIDocument.Document; //取得文档

Application revitApp=

commandData.Application.Application; //取得应用程序

Selection sel=commandData.Application.ActiveUIDocument.Selection;

Reference ref1=sel.PickObject(ObjectType.Element,"选择一个族实例");

//得到当前选择的文档

Document doc=commandData.Application.ActiveUIDocument.Document;

//族实例

FamilyInstance familyIns=doc.GetElement(ref1)as FamilyInstance;

FamilySymbol symbol=familyIns.Symbol;

Transaction transaction=new Transaction(doc);

//打开关闭子程序

transaction.Start("改变族类型名称");

="new"+;

mit();

return Result.Succeeded;

}

}

}

4、删除一个族参数

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual )]

[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoComm andData)]

[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption. Manual)]

public class Class1:IExternalCommand

{

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

{

Document revitDoc=

commandData.Application.ActiveUIDocument.Document; //取得文档

Application revitApp=

commandData.Application.Application; //取得应用程序

//选择一个族实例

Selection sel=commandData.Application.ActiveUIDocument.Selection;

Reference ref1=sel.PickObject(ObjectType.Element,"选择一个族实例");

FamilyInstance familyIns=revitDoc.GetElement(ref1)as FamilyInstance;

FamilySymbol symbol=familyIns.Symbol;

//得到族文档

Document familyDoc=revitDoc.EditFamily(symbol.Family);

//取得FamilyManager,注意这里只能从族文档中取得FamilyManager,然后修改参数

FamilyManager familyManager=familyDoc.FamilyManager;

IListfaparms=familyManager.GetParameters();

TaskDialog.Show("FamilyParameter",faparms.First());

Transaction trans=new Transaction(familyDoc,"Remove Parameter");

trans.Start();

familyManager.RemoveParameter(faparms.First());

mit();

familyDoc.LoadFamily(revitDoc,new Opt());

return Result.Succeeded;

}

}

}

//族载入时覆盖并修改族参数

public class Opt:IFamilyLoadOptions

{

public bool OnFamilyFound(bool familyInUse,out bool overwriteParameterValues)

{

overwriteParameterValues=true;

return true;

}

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

{

source=FamilySource.Project;

overwriteParameterValues=true;

return true;

}

}

4、遍历族参数

相关文档
最新文档