revit在桥梁中的应用二次开发(1)——族
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;
IList
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、遍历族参数