![]() |
【转帖】layer 0 kbylayer color problem
layer 0 kbylayer color problem
layer 0 kbylayer color problem in the attached file there are 4 layers defined (layers 0-3). each layer contains a text of different color. layer 0 - white layer 1 - red layer 2 - yellow layer 3 - green the colors on layer 1-3 are correct. however, the color of layer 0 returns as black. it should return the color white. is there anything obviously wrong with my code below? here's the relevant parts of my code... void dwgdirectreadblock::readentity(oddbdatabase* pdb, oddbblocktablerecordptr pblock,oddbobjectid id, std(ostream) & os) { // open the entity oddbentityptr pent = id.safeopenobject(); // retrieve the registered oddbreadentity object registered // for this object type. odsmartptr<oddbreadentity> preadent = pent; // get the acad entity layer odstring layerodstring = pent->layer(); oddbobjectid layeroddbobjectid = pent->layerid(); oddblayertablerecordptr layer; odcmcolor cmlayercolor; int layernum = getentitylayer(pdb, layerodstring, &layer, &cmlayercolor); // get the acad entity color odcmcolor cmcolor = pent->color(); odcmentitycolor::colormethod colormethod = cmcolor.colormethod(); unsigned int odcolor = getentitycolor(pent, colormethod, cmlayercolor); . . . int dwgdirectreadblock::getentitylayer(oddbdatabase* pdb, odstring layerodstring, oddblayertablerecordptr *player, odcmcolor *pcmlayercolor) { // layer table smart pointer, opened for read. oddblayertableptr players = pdb->getlayertableid().safeopenobject(); // get a new layer table iterator (as a smart pointer) oddbsymboltableiteratorptr piter = players->newiterator(); int ilayer; for (piter->start(), ilayer=0; !piter->done(); piter->step(), ilayer++) { // layer record smart pointer, opened for read. *player = piter->getrecordid().safeopenobject(); *pcmlayercolor = (*player)->color(); // search for a match if( (*player)->getname() == layerodstring) return ilayer; return 0; } } // end int dwgdirectreadblock::setentitylayer unsigned int dwgdirectreadblock::getentitycolor(oddbentityptr pent, odcmentitycolor::colormethod colormethod, odcmcolor cmlayercolor) { int color = -1; unsigned int odcolor; unsigned char r,g,b; odcmcolor cmcolor = pent->color(); odcmentitycolor cmentitycolor; switch(colormethod) { case odcmentitycolor::kbylayer: r = cmlayercolor.red(); g = cmlayercolor.green(); b = cmlayercolor.blue(); odcolor = rgb(r,g,b); break; case odcmentitycolor::kbyblock: break; case odcmentitycolor::kbycolor: cmentitycolor = cmcolor.entitycolor(); r = cmentitycolor.red(); g = cmentitycolor.green(); b = cmentitycolor.blue(); odcolor = rgb(r,g,b); break; case odcmentitycolor::kbyaci: // colorindex() color = cmcolor.colorindex(); r = acadcolors[color].r; g = acadcolors[color].g; b = acadcolors[color].b; odcolor = rgb(r,g,b); break; default: break; } return odcolor; } // end void dwgdirectreadblock::setentitycolor() attached files in attached file layer 0 has color specified by aci 7. color 7 is white on dark background and black on light background. odcmcolor returns rgb for light background. if you need rgb for dark background see colormapping.h sergey slezkin hi sergey, thanks for your help. i've one question... how do you know the colormethod is by aci. odcmentitycolor::colormethod colormethod = cmcolor.colormethod(); statement returns kbylayer, not kbyaci. the statement, odcmentitycolor::colormethod layercolormethod = cmlayercolor.colormethod();, also returns kbylayer. tia sergey, thanks for your help. my mistake. the statement, odcmentitycolor::colormethod layercolormethod = cmlayercolor.colormethod();, returns kbyaci. |
所有的时间均为北京时间。 现在的时间是 03:37 AM. |