效果
思路描述:
- 创建窗口,并在command程序段中实例化窗口。注:1、按键通过改变实例化的窗口中的参数,并通过循环判断实例化窗口的参数从而进行不同处理,来实现按键功能 2、通过判定window1.ShowDialog() == true来使窗口停留,从而来输入参数
- 选择一条模型线作为平曲线,选择另一条作为纵曲线。(在这里要做一个判断,判断曲线类型是ModelLine还是ModelNurbSpline)
- 通过自行创建curve同原有的curve做一个intersect来获取交点,并将平曲线的交点和纵曲线交点的坐标进行组合,得到三维曲线点的坐标(平曲线的X,Y坐标作为三维曲线X,Y坐标,总曲线Y坐标作为三维曲线Z坐标),通过PolyLine.Create()生成多段线给后续使用。
- Revit中创建模型线uiDoc.Document.Create.NewModelCurve(normal, sketchPlane),需要直线和直线所在平面,每一条直线通过和单位Z向量做一个叉乘获取到直线和单位Z向量共面的法向量。
主要代码:
Command;
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
Document revitDoc = commandData.Application.ActiveUIDocument.Document; //取得文档
Autodesk.Revit.ApplicationServices.Application revitApp = commandData.Application.Application; //取得应用程序
UIDocument uiDoc = commandData.Application.ActiveUIDocument; //取得当前活动文档
//新建一个窗口
Window1 window1 = new Window1();
if (window1.ShowDialog() == true)
{
//窗口打开并停留,只有点击按键之后,窗口关闭并返回true
}
//通过按键来选择一条
while (!window1.Done)
{
//选择平曲线
if (window1.FlatCurve)
{
//因为要对原有模型线进行一个删除是对文件进行一个删除,故要创建一个事件
using(Transaction transaction = new Transaction(uiDoc.Document))
{
transaction.Start("删除平曲线");
Selection sel = uiDoc.Selection;
Reference ref1 = sel.PickObject(ObjectType.Element, "选择一条模型线作为平曲线");
Element elem = revitDoc.GetElement(ref1);
ModelLine modelLine = elem as ModelLine;
//做一个判断,判断其是否为ModelNurbSpline
if (modelLine == null)
{
ModelNurbSpline modelNurbSpline = elem as ModelNurbSpline;
FlatModelLine = modelNurbSpline.GeometryCurve;
}
else
{
FlatModelLine = modelLine.GeometryCurve;
}
//1、清除平曲线 2、重置window1.FlatCurve
uiDoc.Document.Delete(elem.Id)