您的位置:首页 > 移动开发 > Objective-C

ObjectARX学习笔记(七)----RGB和CAD颜色索引之间的转换

2014-01-21 12:41 429 查看
如何获得程序路径
struct resbuf rb;

char sTemp[1024],*str;

ads_getvar("acadprefix",&rb);

strcpy(sTemp,rb.resval.string);

acad_free(rb.resval.rstring);

str=strchr(sTemp,';');

*str='\0';

str=strrchr(sTemp,'\\');

*str='\0';

上段程序中,sTemp中存储了安装CAD的目录

AUTOCAD的系统变量存储了一些与安装有关的信息,虽然不多,在正常情况是够用的.与目录有关的主要有:

dwgprefix 当前dwg图形存储的目录

acadprefix   acad环境变量存储的目录

dwgname   当前dwg文件名

savefile 当前自动存储文件名

///从RGB得到cad颜色索引值

int getNearestACI(COLORREF color)

{

long acirgb, r,g,b;

long mindst = 2147483647L;

long dst = 0;

int minndx = 0;

long red=GetRValue(color);

long green=GetGValue(color);

long blue=GetBValue(color);

for ( int i = 1; i < 255; i++ ) {

   acirgb = acdbGetRGB ( i );

   r =GetRValue(acirgb);

   g =GetGValue(acirgb);

   b =GetBValue(acirgb);

  

   dst = abs ( r-red) + abs ( g -green) + abs (b-blue);

   if ( dst < mindst ) {

    minndx = i;

    mindst = dst;

   }

}

return minndx;

}  

//功   能:从CAD的颜色得到RGB

COLORREF CGlobal::GetColorFromIndex(int colorIndex)

{

if(colorIndex < 0 || colorIndex > 255)

{

   ads_alert("传入的颜色号不在0~255之间!");

   return 0;

}

BYTE R, G, B;

#ifdef ARX_2002_dll

R = lpszRGBData[colorIndex*3+0];

G = lpszRGBData[colorIndex*3+1];

B = lpszRGBData[colorIndex*3+2];

#else

long zhi = acdbGetRGB(colorIndex);

WORD LOW = LOWORD(zhi);

WORD HIG = HIWORD(zhi);

R = LOBYTE(LOW);

G = HIBYTE(LOW);

B = LOBYTE(HIG);

#endif

return RGB(R,G,B);

//return acdbGetRGB(nColor);

}

获取AcDbDimension里的属性信息

AcDbEntity *pEnt;

AcDbObjectId id;

AcGePoint3d ptPick;

ads_name eName;

if (acedEntSel ("Select a dimension: " , eName, asDblArray (ptPick)) != RTNORM )

return;

acdbGetObjectId (id, eName);

acdbOpenAcDbEntity (pEnt, id, AcDb::kForRead);

//----- Get the id of the block table record which owns the text entity

AcDbDimension *pDim =AcDbDimension::cast (pEnt);

if (pDim == NULL)

{

pEnt->close ();

return;

}

id =pDim->dimBlockId ();

pDim->close ();

AcDbBlockTableRecord *pr;

acdbOpenAcDbObject ((AcDbObject *&) pr, id, AcDb::kForRead);

//----- Iterating the block table record

AcDbBlockTableRecordIterator *pi;

pr->newIterator (pi);

while (!pi->done ())

{

pi->getEntity (pEnt, AcDb::kForRead);

if (pEnt->isKindOf (AcDbMText::desc ()))

{

AcDbMText *pt = (AcDbMText *) pEnt;

char *s = pt->contents ();

acutPrintf (s);

delete s;

}

pEnt->close();

pi->step();

}

pr->close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  RGB CAD颜色索引