将元素的颜色设置为 ByLevel

在给元素添加颜色的过程中,发现不能直接将颜色号设置成 -1(ByLevel),经过在优先社区的查找,终于解决了,特此记录。

简介

设置元素的属性一般是创建一个 ElementPropertiesSetter,具体代码如下:

1
2
3
4
5
6
7
ElementPropertiesSetter setter = new ElementPropertiesSetter();
setter.SetColor(ElementPropertyUint.COLOR_BYLEVEL);
setter.SetWeight(1);
setter.SetLevel(GetLevel(SwLevel.sw_2D_点划线));
setter.SetLinestyle((int)ElementPropertyUint.STYLE_BYLEVEL,null);

setter.Apply(ele);

转到 SetColor 的定义我们可以看到,它是这样的:

1
public void SetColor(uint color);

而在 ORD 中,我们可以得知,ColorByLevel 的值是 -1,这就让我们很为难了。

解决办法

实际上,在 .NET 下的颜色,-1 并不代表 ColorByLevel, ColorByLevel 真正的值是一个 uint, 不过它是16进制的,具体的定义如下:

1
2
3
4
5
6
7
8
9
10
11
public class ElementPropertyUint
{
// DgnPlatform.h 里面
public static uint COLOR_BYLEVEL = 0xffffffff;
public static uint COLOR_BYCELL = 0xfffffffe;
public static uint STYLE_BYLEVEL = 0x7fffffff;
public static uint STYLE_BYCELL = 0x7ffffffe;
public static uint WEIGHT_BYLEVEL = 0xffffffff;
public static uint WEIGHT_BYCELL = 0xfffffffe;
public static uint LEVEL_BYCELL = 64;
}

致谢

解决思路来自优先社区: https://communities.bentley.com/communities/other_communities/chinafirst/f/microstation-projectwise/175980/msce-c-element-bylevel?ReplySortBy=CreatedDate&ReplySortOrder=Ascending