Revit二次开发之“族”操作
风管 - 类别Category
圆形风管 - 族Family
T形三通 - 族型号FamilySymbol
画出来 - 族实例FamilyInstance
http://revit.5d6d.com
加载族
public class LoadFamily : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
{
Document doc = commandData.Application.ActiveUIDocument.Document;
doc.LoadFamily(@"C:\Documents and Settings\All Users\Application Data\Autodesk\RME 2011\Metric Library\窗\M_带贴面窗.rfa");
return Result.Succeeded;
}
}
end
public class LoadFamily : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
{
Document doc = commandData.Application.ActiveUIDocument.Document;
//加载族
//doc.LoadFamily(@"C:\Documents and Settings\All Users\Application Data\Autodesk\RME 2011\Metric Library\窗\M_带贴面窗.rfa");
//加载族中的一个Symbol
//doc.LoadFamilySymbol(@"C:\Documents and Settings\All Users\Application Data\Autodesk\RME 2011\Metric Library\窗\M_带贴面窗.rfa"
//, "0406 x 0610 mm");
//遍历族
TraversqlFamily(doc);
return Result.Succeeded;
}
public Result TraversqlFamily(Document doc)
{
Family family = null;
FilteredElementCollector collector = new FilteredElementCollector(doc);
ICollection<Element> collection = collector.OfClass(typeof(Family)).ToElements();
string sMsg = "Standard families already loaded in this model:";
foreach (Element e in collection)
{
family = e as Family;
if (null != family)
{
/*
//获得族的类别名称
string famCatName = (null == family.FamilyCategory) ? "?" : family.FamilyCategory.Name;
sMsg += "\r\n Name=" + family.Name + ";Category=" + famCatName;
if (family.Name == "M_圆形四通")//M_风管尺寸标记//M_圆形软风管标记
MessageBox.Show(family.Name);
if (family.Name == "风管")
MessageBox.Show(family.Name);
if (family.Name == "圆形风管")
MessageBox.Show(family.Name);
if (family.Name == "接头")
MessageBox.Show(family.Name);
if (family.Name.Contains("风管"))
MessageBox.Show(family.Name);*/
if (family.FamilyCategory.Name == "圆形风管")
//if (family.FamilyCategory.Name == "风管")
sMsg += "\r\n Name=" + family.Name + ";Category=" + family.FamilyCategory.Name;
}
}
MessageBox.Show(sMsg);
return Result.Succeeded;
}
end
创建族实例
public class CreateFamilyInstance : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
FamilySymbol familySymbol = null;
FilteredElementCollector collector = new FilteredElementCollector(doc);//过滤元素
ICollection<Element> collection = collector.OfClass(typeof(FamilySymbol)).ToElements();
foreach (Element e in collection)
{
familySymbol = e as FamilySymbol;
if (null != familySymbol.Category)
{
if ("风管管件" == familySymbol.Category.Name)//这里不知道怎样用内参BuiltInCategory.o
{
if (familySymbol.Family.Name == "矩形弯头 - 法兰")
{
//遍历族符号的方法
FamilySymbolSetIterator symbolItor = familySymbol.Family.Symbols.ForwardIterator();
FamilySymbol fs = null;
while (symbolItor.MoveNext())
{
fs = symbolItor.Current as FamilySymbol;
}
break;
}
}
}
}
XYZ point = new XYZ(10, 10, 10);
//创建族实例
FamilyInstance fi = doc.Create.NewFamilyInstance(point, familySymbol, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);
//修改族实例
FamilySymbol newFamilySymbol = null;
foreach (Element e in collection)
{
newFamilySymbol = e as FamilySymbol;
if (null != newFamilySymbol.Category)
{
if ("风管管件" == newFamilySymbol.Category.Name)
{
if (newFamilySymbol.Family.Name == "矩形弯头 - 平滑半径 - 法兰")
{
FamilySymbolSetIterator symbolItor = newFamilySymbol.Family.Symbols.ForwardIterator();
FamilySymbol fs = null;
while (symbolItor.MoveNext())
{
fs = symbolItor.Current as FamilySymbol;
//MessageBox.Show(fs.Name);
}
break;
}
}
}
}
fi.Symbol = newFamilySymbol;
return Result.Succeeded;
}
}
路过!!!
不发表意见……
路过!!!
不发表意见……
不懂
页:
[1]