[C# MSCE]ByCell的color问题

通过ElementColor类得到的颜色中有Element类型、Bylevel,ByCell,其中element可以直接得到对应的rgb值,bylevel可以通过levelDefinitonColor获得,那么ByCell的颜色怎么处理呢?当元素是SharedCell时获得的elementcolor就是ByCell源的

Parents Reply Children
  • 在我们学习MS编程前必须要学习MS软件的一些基本概念。许多编程问题其实是概念不清导致的。

    在MS软件中颜色有索引色、真彩色、色簿色等多种表达形式,如下图所示,点开MS的颜色选取器就能看到这三个卡片分别对应索引色、真彩色、色簿色。对于你说的Bylevel 18 38 140 254,18/38/140或254都是索引色,一个索引色又是由具体的RGB色定义的,整个索引色表的定义叫做ColorTable(色表)。使用索引色的好处是:可以方便地更换一个色表就能让整个模型中的元素呈现出不同的颜色来,而元素本身的属性(颜色值)则没有改变。

    而ByLevel的意思是,每个层(Level)定义了一种颜色,默认仍然是以索引色来定义的。打开Level Manager能看到每个层定义的ByLevel的颜色如下:

    当我们指定一个元素的颜色不是具体的某个索引色(0~254)而是-1时,就表示该元素的颜色将会跟随其所在的层的颜色来变化。比如一个元素的颜色被设置成了ByLevel,它位于“电气-桥架-电缆沟”层时就会呈现出绿色来,如果你把这个元素移动到了“设备_35kV”层,则该元素就会呈现白色。

    你如果已经从Element构造了一个ElementColor对象,则取ElementColor对象下的Red、Green、Blue或Rgb属性就能得到对应的RGB色。Index属性就能获得对应的索引色。当然,如果元素的颜色是通过真彩色设定的,则不太可能恰巧对应到某个索引色,只能得到最接近的索引色。因为真彩色有几百万种,而索引色只是其中的254中。

    【注】:255表示视图的背景色



  • 谢谢符老师再一次耐心的解答,您说的这些内容我之前在论坛之前的帖子中看到过,也理解了。不过我发的模型中点击单个元素的时候,会有这种情形的出现。

    我不是特别理解,为什么元素的属性中Color显示为空,但是元素选择器里面显示的元素是多个颜色?这种是不是跟shared cell是组合的相关啊?我想获取Element Selection中的颜色,但是编程有些就获取不到

  • 为什么元素的属性中Color显示为空,但是元素选择器里面显示的元素是多个颜色?

    这是单元(Cell)和共享单元(SharedCell)所造成的。因为Cell或SharedCell底层都是由多个子元素组成的,而每个子元素有可能会有不同的颜色,所以,无法在Cell或SharedCell这一层级显示出颜色来。

    我想获取Element Selection中的颜色,但是编程有些就获取不到

    对于SharedCell,你需要先获得其对应的SharedCEllDefinition元素,这个里面才真正保存着子元素,遍历这些子元素口就能拿到各个颜色了。



    Answer Verified By: xz h