0

我正在尝试获取 DWG 文件中每个实体的颜色,一种方法是获取实体所在的图层,然后获取图层颜色

Dwg_Object_Entity* entity = dwg.object[i].tio.entity;
Dwg_Object_LAYER* layer = dwg_get_entity_layer(entity);
BITCODE_CMC color = layer->color;

但是 RGB 值和图层颜色总是不同的。(例如图层颜色是红色和 ByLayer,但是 RGB 值是 3271557130(0xC300 000A))

这是BITCODE_CMC的定义

    typedef struct _dwg_color /* CmColor: R15 and earlier */
    {
        BITCODE_BSd index;  /* <0: turned off. 0: BYBLOCK, 256: BYLAYER */
        BITCODE_BS flag;    /* 1: has name, 2: has book_name. */
        BITCODE_BS raw;     /* ENC only */
        BITCODE_BL rgb;     /* DXF 420 */
        unsigned method;    /* first byte of rgb:
                               0xc0 for ByLayer (also c3 and rgb of 0x100)
                               0xc1 for ByBlock (also c3 and rgb of 0)
                               0xc2 for entities (default), with names with an additional name flag RC,
                               0xc3 for truecolor,
                               0xc5 for foreground color
                               0xc8 for none (also c3 and rgb of 0x101)
                             */
        BITCODE_T  name;       /* DXF 430 */
        BITCODE_T  book_name;  /* DXF 430, DXF: "book_name$name" */
        // Entities only:
        BITCODE_H  handle;
        BITCODE_BB alpha_type; /* 0 BYLAYER, 1 BYBLOCK, 3 alpha */
        BITCODE_RC alpha;      /* DXF 440. 0-255 */
    } Dwg_Color;

    typedef Dwg_Color BITCODE_CMC;

DXF 420-427:32 位整数值。与真彩色一起使用时;表示 24 位颜色值的 32 位整数。高位字节(8 位)是 0,低位字节是无符号字符,保存蓝色值(0-255),然后是绿色值,下一个高位字节是红色值。将此整数值转换为十六进制会产生以下位掩码:0x00RRGGBB。例如,红色==200、绿色==100、蓝色==50的真彩色为0x00C86432,而在DXF中,十进制为13132850

我对CAD不熟悉,我想我使用了错误的方法来获取图层颜色但我目前不知道其他任何方法来获取图层颜色

4

0 回答 0