高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】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.
|