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 交点立柱
{
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
FilteredElementCollector collector = new FilteredElementCollector(doc);
IList<Element> grids = collector.OfClass(typeof(Grid)).ToElements().ToList();
List<Line> gridLines = new List<Line>();
List<XYZ> intpos = new List<XYZ>();
//找到轴网的交点
foreach (Grid gri in grids)
{
gridLines.Add(gri.Curve as Line);
}
foreach (Line ln1 in gridLines)
{
foreach (Line ln2 in gridLines)
{
XYZ normal = ln1.Direction;
XYZ normal2 = ln2.Direction;
if (normal.IsAlmostEqualTo(normal2)) continue;
IntersectionResultArray results;
SetComparisonResult intRst = ln1.Intersect(ln2, out results);
if (intRst == SetComparisonResult.Overlap && results.Size == 1)
{
XYZ tp = results.get_Item(0).XYZPoint;
if (intpos.Where(m => m.IsAlmostEqualTo(tp)).Count() == 0)
intpos.Add(tp);
}
}
}
Level level = uiDoc.ActiveView.GenLevel;//当前视图标高
FamilySymbol familysymbol =FindSymbol(doc, "矩形柱", "457 x 475mm");
using (Transaction trans = new Transaction(doc))
{
trans.Start("dfs");
if (!familysymbol.IsActive)
familysymbol.Activate();//设为Activate状态
foreach (XYZ p in intpos)
{
//创建柱子
FamilyInstance familyInstance = doc.Create.NewFamilyInstance(p, familysymbol, level, StructuralType.Column);
}
trans.Commit();
}
return Result.Succeeded;
}
public FamilySymbol FindSymbol(Document doc, string familyName, string symbolName)
{
//声明变量
Family family = null;
FamilySymbol familySymbol = null;
//用类型过滤器查找所有族
FilteredElementCollector familycol = new FilteredElementCollector(doc);
familycol.OfClass(typeof(Family));
//按族名称查找族
foreach (Family f in familycol)
{
if (f.Name == familyName)
{
family = f;
break;
}
}
//如果没有该族,直接返回
if (family == null)
return null;
//用family.GetFamilySymbolids()取得该类型所有类型的id,在遍历
foreach (ElementId fsid in family.GetFamilySymbolIds())
{
//将id转换回familysymbols,再按照名称查找
FamilySymbol fs = doc.GetElement(fsid) as FamilySymbol;
if (fs.Name == symbolName)
{
familySymbol = fs;
break;
}
}
return familySymbol;
}
}
}
轴网立柱
猜你喜欢
转载自blog.csdn.net/waiting233/article/details/116664518
今日推荐
周排行