[C# MSCE]ByCell的color问题

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

Parents Reply
  • 推测你DGN文件是从DWG转换过来的吧?从MS帮助中可以看到如下英文解释:

    Color can also be set ByCell or ByLevel. If ByCell is selected, when a cell is placed the active color is used in place of the color used when the cell was created.
    ByCell is enabled, by default, only in DWG workmode. You can enable ByCell in DGN workmode by enabling the following capability in the standards, project, or user configuration file: _USTN_CAPABILITY <+CAPABILITY_BYCELL.

    大致意思就是说,这个ByCell的颜色是从你创建Cell的颜色来取的,不受当前系统颜色的影响。另外,这个ByCell仅在DWG工作模式默认起作用。



Children
  • 老师,那这种cell的颜色是不是就没办法在当前系统中获取到了啊?

  • 符老师,那我想要获得这个cell的assign material,所需的颜色是创建cell时的颜色吗?有没有办法得到需要的颜色呢?

  • 那这种cell的颜色是不是就没办法在当前系统中获取到了啊?

    SharedCell的颜色可以被覆盖的,所以才会存在ElementColor和ByCell Color。都是可以取得的。

    那我想要获得这个cell的assign material,所需的颜色是创建cell时的颜色吗?有没有办法得到需要的颜色呢?

    Material(材质)中设置的颜色只有在视图显示样式被设置为渲染方式时才会覆盖元素本身的颜色。所以,要正确获得你当前看到的是什么颜色,其实还依赖于很多方面。我记得在另外一个帖子中说过,大概有7个方面都会影响到元素当前的显示颜色。所以,您要先搞清楚想要获得元素在什么状态下的颜色。

    可否提供一个DGN文件,仅包含你这一个想要获取颜色的元素供我们分析。



  • BIM.dgn

    符老师,这是读取颜色遇到问题的几个模型。其中Bylevel 18 38 140 254这几种颜色都没有办法获取到。

  • 在我们学习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表示视图的背景色