Revit API:GraphicsSettings 图形样式设定

前言

本文介绍 Revit 的图形样式的设定。

内容

Revit 提供了三种替换视图中图形的方式,按图元,按类别和按过滤器。这里有一个隐含的信息,图形样式的设定是和视图关联在一起的,不同的视图可以做不同的设定。
在这里插入图片描述

OverrideGraphicSettings

在 Revit API 中都是通过 OverrideGraphicSettings 来进行设定。以按类别设定为例,大致的对应关系如下图所示:
在这里插入图片描述

设定相关接口

这个是针对单个图形进行的设定,它的接口是 View 相关的:

// View::GetElementOverrides Method 
public OverrideGraphicSettings GetElementOverrides(
	ElementId elementId
)

// View::SetElementOverrides Method
public void SetElementOverrides(
	ElementId elementId,
	OverrideGraphicSettings overrideGraphicSettings
)

这个是针对类别进行的设定,它的接口是 View 相关的:

// View::GetCategoryOverrides Method 
public OverrideGraphicSettings GetCategoryOverrides(
	ElementId categoryId
)

// View::SetCategoryOverrides Method 
public void SetCategoryOverrides(
	ElementId categoryId,
	OverrideGraphicSettings overrideGraphicSettings
)

这个是针对过滤器进行的设定,它的接口是 View 相关的:

// View::GetFilterOverrides Method 
public OverrideGraphicSettings GetFilterOverrides(
	ElementId filterElementId
)

// View::SetFilterOverrides 
public void SetFilterOverrides(
	ElementId filterElementId,
	OverrideGraphicSettings overrideGraphicSettings
)

过滤器可以根据类别定义不同的规则,通过 ParameterFilterElement 来实现,可以通过 View.AddFilter 添加。
在这里插入图片描述
使用过滤器的例子,来自 Revit API 文档:

public static void CreateViewFilter(Document doc, View view)
{
	List<ElementId> categories = new List<ElementId>();
	categories.Add(new ElementId(BuiltInCategory.OST_Walls));
	List<FilterRule> filterRules = new List<FilterRule>();

	using (Transaction t = new Transaction(doc, "Add view filter"))
	{
		t.Start();

		// 创建和类别相关的 ParameterFilterElement 
		ParameterFilterElement parameterFilterElement = ParameterFilterElement.Create(doc, "Example view filter", categories);

		// 规则 1 - 墙的类型必须是外墙
		ElementId exteriorParamId = new ElementId(BuiltInParameter.FUNCTION_PARAM);
		filterRules.Add(ParameterFilterRuleFactory.CreateEqualsRule(exteriorParamId, (int)WallFunction.Exterior));

		// 规则 2 - 墙的高度大于28
		ElementId lengthId = new ElementId(BuiltInParameter.CURVE_ELEM_LENGTH);
		filterRules.Add(ParameterFilterRuleFactory.CreateGreaterOrEqualRule(lengthId, 28.0, 0.0001));

		// 规则 3 - 共享参数必须以  "15." 开始
		// 通过 guid 得到某个实例的共享参数 - 目的是得到这个参数的 Id,即 sharedParam.Id
		Guid spGuid = new Guid("96b00b61-7f5a-4f36-a828-5cd07890a02a");
		FilteredElementCollector collector = new FilteredElementCollector(doc);
		collector.OfClass(typeof(Wall));
		Wall wall = collector.FirstElement() as Wall;

		if (wall != null)
		{
			Parameter sharedParam = wall.get_Parameter(spGuid);
			ElementId sharedParamId = sharedParam.Id;

			filterRules.Add(ParameterFilterRuleFactory.CreateBeginsWithRule(sharedParamId, "15.", true));
		}

		ElementFilter elemFilter = CreateElementFilterFromFilterRules(filterRules);
		parameterFilterElement.SetElementFilter(elemFilter);

		// Apply filter to view
		view.AddFilter(parameterFilterElement.Id);
		view.SetFilterVisibility(parameterFilterElement.Id, false);
		t.Commit();
	}
}

这个例子里面有个 CreateElementFilterFromFilterRules,但没有给出实现:

ElementFilter CreateElementFilterFromFilterRules(IList<FilterRule> filterRules)
{
	return new ElementParameterFilter(filterRules);
}

ElementParameterFilter 的接口:

namespace Autodesk.Revit.DB
{
    public class ElementParameterFilter : ElementSlowFilter
    {
        public ElementParameterFilter(IList<FilterRule> filterRules);
        public ElementParameterFilter(FilterRule filterRule);
        public ElementParameterFilter(IList<FilterRule> filterRules, bool inverted);
        public ElementParameterFilter(FilterRule filterRule, bool inverted);
        public IList<FilterRule> GetRules();
    }
}
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值