Revit提供了一个PostableCommand指令集,通过该指令集可以创建很多Revit支持的默认指令。
using Autodesk.Revit.DB;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.UI;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
namespace Create3DView
{
/// <summary>
/// 创建3d视图
/// </summary>
/// <creator>marc</creator>
[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
[Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)]
[Autodesk.Revit.Attributes.Journaling(Autodesk.Revit.Attributes.JournalingMode.NoCommandData)]
public class DefaultCommand : IExternalCommand
{
/// <summary>
/// 执行指令
/// </summary>
/// <param name="commandData"></param>
/// <param name="message"></param>
/// <param name="elements"></param>
/// <returns></returns>
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
var document = commandData.Application.ActiveUIDocument.Document;
using (var transaction = new Transaction(document))
{
transaction.Start(Guid.NewGuid().ToString());
//3d视图通过指令创建,该方式可以创建Revit提供的非常多种指令,如创建Revit文件等,都是一样的方式。
RevitCommandId commandId = RevitCommandId.LookupPostableCommandId(PostableCommand.Default3DView);
if (commandData.Application.CanPostCommand(commandId))
{
commandData.Application.PostCommand(commandId);
}
transaction.Commit();
}
return Result.Succeeded;
}
}
}
通过外部工具加载到Revit测试后,将产生下面的效果:
将如上图所示,自动生成一个名叫“{三维}”的视图,并自动激活为当前视图。
源码中,还有另外一个创建3d视图的指令,可以创建如下的3d盒子效果:
他是使用View3D.CreateIsometric()方法来实现的。
通过这个方法,还可以在winform中创建自己想要的3d预览效果,下图先给出一张效果图,过几天,我会把完整的3d预览效果以工程项目的方式提供一个实际可用的版本给大家下载,下面就先看一下3d预览图吧:
该3d预览是在Winform窗体中进行的,他不是将Revit的内容预览到Winform中,而是在Revit绘制之前,在Winform中先根据界面参数设置一定条件后,先生成预览图。最后再将这些参数整合,绘制到Revit中。
说明这个先后顺序的原因是,也许有读者以为,这个预览仅仅只是将Revit事先绘制好的模型预览到Winform中。实际不是的,是反过来的,事先在Winform预览生成效果,然后才到Revit生成真正的绘制效果。
当然,这个预览图,不论是Revit->Winform,还是Winform->Revit,两种方向都可以的。
过些天,会把这个预览项目开放给大家下载。这将是工程生产中实际可用的项目。
下载地址:https://download.csdn.net/download/mazhiyuan1981/12878854