查看单个帖子
旧 2009-05-05, 10:42 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】extracting rgb values from an entity color

extracting rgb values from an entity color
extracting rgb values from an entity color
i expected the odcmcolor object to simplify color extraction via it's red(), green(), and blue() member functions, but those only work when the color method is kbycolor and otherwise seem to return 0.
so, i wrote a function to extract an odcmcolor object that is kbycolor from an entity. after calling it, red(), green(), and blue() will return the relevant entity color whether it is by layer, block, color, or aci.
if there is an easier way to do this, or there are mistakes in the code, please respond.
one final note: i had the function return what i hope is a sensible default if it runs into an error condition.
code:
void getentcolor(oddbentityptr ent, odcmcolor *color)
{
odcmcolor clr;
int r = -1;
int g = -1;
int b = -1;
if ( ! ent.isnull() && color )
{
clr = ent->color();
if ( clr.isbycolor() )
{
r = clr.red();
g = clr.green();
b = clr.blue();
}
else
if ( clr.isbyaci() )
{
odcmentitycolor ec;
oduint32 val;
ec = ent->entitycolor();
val = ec.lookuprgb((oduint8)color->colorindex());
r = (val & 0xf00) >> 16;
g = (val & 0xf0) >> 8;
b = (val & 0xf);
}
else
if ( clr.isbylayer() )
{
oddblayertablerecordptr ltr;
ltr = ent->layerid().openobject();
if ( ! ltr.isnull() )
{
clr = ltr->color();
r = clr.red();
g = clr.green();
b = clr.blue();
}
}
else
if ( clr.isbyblock() )
{
oddbblockreferenceptr bref;
bref = ent->blockid().openobject();
if ( ! bref.isnull() )
{
clr = bref->color();
r = clr.red();
g = clr.green();
b = clr.blue();
}
}
else
{
oddbdatabaseptr pdb;
pdb = ent->database();
if ( ! pdb.isnull() )
{
clr = pdb->getcecolor(); // specifies the default color for new entities
r = clr.red();
g = clr.green();
b = clr.blue();
}
trace1("unexpected color type [%x]\n", (int)color->colormethod());
assert(0);
}
}
if ( r < 0 || r > 255 ||
g < 0 || g > 255 ||
b < 0 || b > 255 )
r = g = b = 0;
color->setrgb(r, g, b);
}
moe, i ran into similar problem with import via vectorization framework. you can chart my struggles at
hope this helps.
regards,
varun
thanks varunsnair
i am aghast at how complicated it is to answer the question, "what color am i?"
this is a great place to utter a napoleon dynamite "gawd!"
i think doing taxes is easier.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)