Revit API遍历系统族布置喷头
2023-09-11 14:21:42 时间
系统族可以通过内参遍历,遍历出来是个FamilySymbol
喷头属于系统族,但不能通过NewDuct();类似这样的方法布置。
必须使用NewFamilyInstance()
url:http://greatverve.cnblogs.com/p/api-Sprinklers.html
喷头属于系统族,但不能通过NewDuct();类似这样的方法布置。
必须使用NewFamilyInstance()
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WinForm = System.Windows.Forms;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.DB.ExtensibleStorage;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.DB.Architecture;
using System.Xml;
namespace RevitCodes
{
[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class cmdSprinklers : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
Transaction ts = new Transaction(doc, "http://revit.5d6d.com");
ts.Start();
//从系统族中过滤出喷头,是作为一个FamilySymbol存在的
FilteredElementCollector collector = new FilteredElementCollector(doc);
//此法可以只过滤系统类型
//collector.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_Sprinklers);
collector.OfCategory(BuiltInCategory.OST_Sprinklers);
FamilyInstance fi = null;//如果已经布置了,就是族实例
int iFi = 0;
FamilySymbol symbol = null;//系统族是族符号
int iFs = 0;
foreach (Element el in collector.ToElements())
{
fi = el as FamilyInstance;
if (fi != null)
iFi += 1;
symbol = el as FamilySymbol;
if (symbol != null)
iFs += 1;
}
TaskDialog.Show("count", iFi + "," + iFs);
if (fi != null)
doc.Create.NewFamilyInstance(new XYZ(10, 10, 10), fi.Symbol, StructuralType.Beam);
if (symbol != null)
doc.Create.NewFamilyInstance(new XYZ(10, 10, 10), symbol, StructuralType.Beam);
ts.Commit();
return Result.Succeeded;
}
XYZ PointOnFace(PlanarFace face)
{
XYZ p = new XYZ(0, 0, 0);
Mesh mesh = face.Triangulate();
for (int i = 0; i < mesh.NumTriangles; ++i)
{
MeshTriangle triangle = mesh.get_Triangle(i);
p += triangle.get_Vertex(0);
p += triangle.get_Vertex(1);
p += triangle.get_Vertex(2);
p *= 0.3333333333333333;
break;
}
return p;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using WinForm = System.Windows.Forms;
using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Mechanical;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.DB.ExtensibleStorage;
using Autodesk.Revit.DB.Plumbing;
using Autodesk.Revit.DB.Architecture;
using System.Xml;
namespace RevitCodes
{
[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class cmdSprinklers : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
Document doc = uiApp.ActiveUIDocument.Document;
Selection sel = uiApp.ActiveUIDocument.Selection;
Transaction ts = new Transaction(doc, "http://revit.5d6d.com");
ts.Start();
//从系统族中过滤出喷头,是作为一个FamilySymbol存在的
FilteredElementCollector collector = new FilteredElementCollector(doc);
//此法可以只过滤系统类型
//collector.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_Sprinklers);
collector.OfCategory(BuiltInCategory.OST_Sprinklers);
FamilyInstance fi = null;//如果已经布置了,就是族实例
int iFi = 0;
FamilySymbol symbol = null;//系统族是族符号
int iFs = 0;
foreach (Element el in collector.ToElements())
{
fi = el as FamilyInstance;
if (fi != null)
iFi += 1;
symbol = el as FamilySymbol;
if (symbol != null)
iFs += 1;
}
TaskDialog.Show("count", iFi + "," + iFs);
if (fi != null)
doc.Create.NewFamilyInstance(new XYZ(10, 10, 10), fi.Symbol, StructuralType.Beam);
if (symbol != null)
doc.Create.NewFamilyInstance(new XYZ(10, 10, 10), symbol, StructuralType.Beam);
ts.Commit();
return Result.Succeeded;
}
XYZ PointOnFace(PlanarFace face)
{
XYZ p = new XYZ(0, 0, 0);
Mesh mesh = face.Triangulate();
for (int i = 0; i < mesh.NumTriangles; ++i)
{
MeshTriangle triangle = mesh.get_Triangle(i);
p += triangle.get_Vertex(0);
p += triangle.get_Vertex(1);
p += triangle.get_Vertex(2);
p *= 0.3333333333333333;
break;
}
return p;
}
}
}
相关文章
- C#遍历系统所安装的打印机,使用WMI方式获取打印机的所有属性
- 单链表操作之遍历
- Lintcode---二叉树的层次遍历
- 【二叉树】106. 从中序与后序遍历序列构造二叉树 【中等】
- Atitit 循环(loop), 递归(recursion), 遍历(traversal), 迭代(iterate).
- 2415. 反转二叉树的奇数层-层次遍历
- Kotlin 树状结构的遍历 & 递归构建一棵树源代码实例
- java 遍历arrayList的四种方法
- 图的遍历BFS广度优先搜索
- 行测图形推理笔记-一笔画、翻转旋转、位置移动、元素遍历
- 【Leetcode刷题Python】102. 二叉树的层序遍历
- 【Leetcode刷题Python】144. 二叉树的前序遍历
- java map集合遍历