通过轴网交点创建柱
代码如下:
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Structure;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CreatePost
{
#region
[TransactionAttribute(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uIDocument = uiApp.ActiveUIDocument;
Application application = uiApp.Application;
Document document = uIDocument.Document;
//过滤轴网
FilteredElementCollector collector = new FilteredElementCollector(document);
ElementClassFilter filter = new ElementClassFilter(typeof(Grid));
List<Element> grids = collector.WherePasses(filter).ToElements().ToList();
//创建相交线
List<Line> gridLines = new List<Line>();
//创建点
List<XYZ> point = new List<XYZ>();
//遍历轴网转线
foreach (Grid item in grids)
{
Line line = item.Curve as Line;
gridLines.Add(line);
}
//获得线
foreach (Line item1 in gridLines)
{
foreach (Line item2 in gridLines)
{
XYZ vec1 = item1.Direction;
XYZ vec2 = item2.Direction;
//如果线方向相同则遍历下一组
if (vec1.IsAlmostEqualTo(vec2))
continue;
IntersectionResultArray results;
SetComparisonResult rst = item1.Intersect(item2,out results);//输出相交的
//判断点是否重复
if (rst == SetComparisonResult.Overlap && results.Size == 1)
{
IntersectionResult rst2 = results.get_Item(0);
XYZ xyz = rst2.XYZPoint;
//获取不重复点.
if (point.Where(m => m.IsAlmostEqualTo(xyz)).Count() == 0)
{
point.Add(xyz);
}
}
}
}
//通过当前活跃视图获得一个标高
View view = uIDocument.ActiveView;
Level level = view.GenLevel;
TaskDialog.Show("level", level.Name);
//得到一个柱的族类型
ElementId id = new ElementId(52557); //注意是FamilySymbol的Id
FamilySymbol familySymbol = document.GetElement(id) as FamilySymbol;
using (Transaction transaction = new Transaction(document, "创建柱子"))
{
transaction.Start();
foreach (XYZ item3 in point)
{
FamilyInstance familyInstance = document.Create.NewFamilyInstance(item3, familySymbol, level, StructuralType.NonStructural);
}
transaction.Commit();
TransactionStatus status = transaction.GetStatus();
if (status==TransactionStatus.Committed)
{
TaskDialog.Show("提示", "创建成功!");
}
}
return Result.Succeeded;
}
}
#endregion
}