前段时间碰到一个很奇怪的问题,用户发给我一个rte文件,Revit 2015里面用它创建出来的文档里面没有任何PipeScheduleType,
换句话说,所有的PipeType.Class都是null,即便文档里面有很多的管段和管道类型:
经过和开发人员沟通,这种情况应该是在文件升级的过程中产生的问题。
解决方法只有再手工创建管段,这样就会自动创建PipeScheduleType,无法使用API,因为PipeSegment.Create方法需要传入一个PipeScheduleTypeId。
创建完之后,要使它生效,必须把管道类型的管段设置为新的管段,就像下面这样:
修改之后,奇怪的是,PipeType.Class依然是null,到底怎么回事?
询问过开发人员之后,发现,PipeType.Class即将移除,取而代之的是它将在Pipe中以参数得以体现,具体做法如下:
Autodesk.Revit.DB.Plumbing.Pipe pipe = null;
var pipeClass = pipe.get_Parameter(BuiltInParameter.RBS_PIPE_CLASS_PARAM);
var pipeScheduleTypeId = pipeClass.AsElementId();
那么如何用API来修改管段呢?请看代码:
ElementId theSegmentId = new ElementId(1803995);
PipeType pipeType = doc.GetElement(new ElementId(1660690)) as PipeType;
var rpm = pipeType.RoutingPreferenceManager;
var groupType = RoutingPreferenceRuleGroupType.Segments;
RoutingPreferenceRule rule = new RoutingPreferenceRule(theSegmentId, "some description");
using (Transaction transaction = new Transaction(RevitDoc))
{
transaction.Start("Change pipe segment");
rpm.AddRule(groupType, rule);
transaction.Commit();
}
来看几个关键点:
- 首先通过PipeType.RoutingPreferenceManager属性获取RoutingPreferenceManager
- 然后创建一个RoutingPreferenceRule
- 最后通过AddRule方法把这个Rule加进去