zoukankan      html  css  js  c++  java
  • ObjectARX学习笔记(七)----RGB和CAD颜色索引之间的转换 ObjectARX学习笔记(六)----如何设置点的样式和大小 CAD二次开发

    如何获得程序路径
    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='';

    str=strrchr(sTemp,'\');

    *str='';

    上段程序中,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();

    ObjectARX学习笔记(六)----如何设置点的样式和大小 CAD二次开发

    acdbCurDwg()->setPdmode(34); //设置点样式

    acdbCurDwg()->setPdsize(6); //设置大小

  • 相关阅读:
    [做题记录]数学#1
    [鸽鸽]
    有关VHDL中null, 在Verilog HDL 中的表示方法 YB
    有关Quartus如何自动生成 .pof 文件 YB
    javac、java命令如何编译运行目标类以及其类引入的外部jar包
    虚拟机装 CentOs 7 黑屏解决办法
    curl 访问https
    游戏命中判定:圆桌算法和程序实现
    Unity3d与dll文件
    C++异步网络库workflow及基于workflow实现的网络框架wfrest的安装使用心得
  • 原文地址:https://www.cnblogs.com/mjgw/p/12392774.html
Copyright © 2011-2022 走看看