using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using CoreDB.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SelectModelCreateRebar
{
[Transaction(TransactionMode.Manual)]
[Journaling(JournalingMode.NoCommandData)]
[Regeneration(RegenerationOption.Manual)]
public class CreateRebar : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = commandData.Application.ActiveUIDocument.Document;
UIApplication uiApp = commandData.Application;
Application app = uiApp.Application;
List<Reference> refs = uiDoc.Selection.PickObjects(ObjectType.Element, "ref").ToList();
List<Element> eles = new List<Element>();
foreach (var refer in refs)
{
DirectShape directShape = doc.GetElement(refer) as DirectShape;
eles.Add(directShape);
}
//TaskDialog.Show("DirectShape", eles.Count().ToString());
Options opt = new Options();
opt.ComputeReferences = true;
opt.DetailLevel = ViewDetailLevel.Fine;
List<Curve> curves = new List<Curve>();
foreach (var ele in eles)
{
GeometryElement geometryElement = ele.get_Geometry(opt);//转化为几何元素
foreach (GeometryObject geomObj in geometryElement)//获取几何元素的边和面
{
Solid geomSolid = geomObj as Solid;
if (null != geomSolid)
{
List<XYZ> points = new List<XYZ>();
foreach (Face geoFace in geomSolid.Faces)
{
if (geoFace is PlanarFace)
{
PlanarFace planarFace = geoFace as PlanarFace;
points.Add(planarFace.Origin);
}
}
Curve curve = Line.CreateBound(points[0], points[1]);
curves.Add(curve);
}
}
}
//TaskDialog.Show("Curve", curves.Count().ToString());
//测试线是否拿到
Transaction transaction = new Transaction(doc, "CreateCurve");
transaction.Start();
foreach (var item in curves)
{
item.Draw(doc, false);
}
transaction.Commit();
return Result.Succeeded;
}
}
}
06-14
03-28
1484