下面两个方法用来创建基于面的族实例:
public FamilyInstance NewFamilyInstance(Reference reference, DB.XYZ location, DB.XYZ referenceDirection, DB.FamilySymbol symbol);
public FamilyInstance NewFamilyInstance(Face face, DB.XYZ location, DB.XYZ referenceDirection, DB.FamilySymbol symbol);
代码演示了创建一个基于墙的灯具。
private void CreatInstance(FamilySymbol arrowSymbol,Document RevitDoc,Autodesk.Revit.Creation.Document createDoc)
{
// 找到墙的一个面
var walls = new FilteredElementCollector(RevitDoc).OfClass(typeof(Wall)).OfType<Wall>();
var wall = walls.FirstOrDefault();
var faceReferences = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Exterior);
// 创建实例
using (Transaction transaction = new Transaction(RevitDoc,"Create Instance"))
{
var familyInstance = createDoc.NewFamilyInstance(faceReferences[0], new XYZ(-51.659444225, 5.702513250, 10), new XYZ(0, 1, 1), arrowSymbol);
transaction.Commit();
}
}
注意: referenceDirection必须和面平行。
创建基于面的线形族实例
下面两个方法用来创建基于面的线形族实例:
public FamilyInstance NewFamilyInstance(Reference reference, Line position, DB.FamilySymbol symbol);
public FamilyInstance NewFamilyInstance(Face face, Line position, DB.FamilySymbol symbol);
代码演示了创建一个基于楼板的线性加强板。
private void CreatInstance(FamilySymbol stiffenerSymbol, Document RevitDoc, Autodesk.Revit.Creation.Document createDoc)
{
// 找到楼板的一个面
var floors = new FilteredElementCollector(RevitDoc).OfClass(typeof(Floor)).OfType<Floor>();
var floor = floors.FirstOrDefault();
var faceReferences = HostObjectUtils.GetTopFaces(floor);
// 创建实例
using (Transaction transaction = new Transaction(RevitDoc, "Create Instance"))
{
transaction.Start();
var familyInstance = createDoc.NewFamilyInstance(faceReferences[0], Line.CreateBound(new XYZ(36, -40, 0), new XYZ(36, -20, 0)), stiffenerSymbol);
transaction.Commit();
}
}
public FamilyInstance NewFamilyInstance(Reference reference, DB.XYZ location, DB.XYZ referenceDirection, DB.FamilySymbol symbol);
public FamilyInstance NewFamilyInstance(Face face, DB.XYZ location, DB.XYZ referenceDirection, DB.FamilySymbol symbol);
代码演示了创建一个基于墙的灯具。
private void CreatInstance(FamilySymbol arrowSymbol,Document RevitDoc,Autodesk.Revit.Creation.Document createDoc)
{
// 找到墙的一个面
var walls = new FilteredElementCollector(RevitDoc).OfClass(typeof(Wall)).OfType<Wall>();
var wall = walls.FirstOrDefault();
var faceReferences = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Exterior);
// 创建实例
using (Transaction transaction = new Transaction(RevitDoc,"Create Instance"))
{
var familyInstance = createDoc.NewFamilyInstance(faceReferences[0], new XYZ(-51.659444225, 5.702513250, 10), new XYZ(0, 1, 1), arrowSymbol);
transaction.Commit();
}
}
注意: referenceDirection必须和面平行。
创建基于面的线形族实例
下面两个方法用来创建基于面的线形族实例:
public FamilyInstance NewFamilyInstance(Reference reference, Line position, DB.FamilySymbol symbol);
public FamilyInstance NewFamilyInstance(Face face, Line position, DB.FamilySymbol symbol);
代码演示了创建一个基于楼板的线性加强板。
private void CreatInstance(FamilySymbol stiffenerSymbol, Document RevitDoc, Autodesk.Revit.Creation.Document createDoc)
{
// 找到楼板的一个面
var floors = new FilteredElementCollector(RevitDoc).OfClass(typeof(Floor)).OfType<Floor>();
var floor = floors.FirstOrDefault();
var faceReferences = HostObjectUtils.GetTopFaces(floor);
// 创建实例
using (Transaction transaction = new Transaction(RevitDoc, "Create Instance"))
{
transaction.Start();
var familyInstance = createDoc.NewFamilyInstance(faceReferences[0], Line.CreateBound(new XYZ(36, -40, 0), new XYZ(36, -20, 0)), stiffenerSymbol);
transaction.Commit();
}
}
注意:参数Line position必须在面上,否则会有异常抛出。
=========【更多高级应用请关注公众号】========
===================================