• 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); //设置大小

  • 相关阅读:
    Linux中将两块新硬盘合并成一个,挂载到/data目录下
    linux将硬盘格式化为xfs文件系统
    nginx配置文件
    centos 添加新硬盘,lvm对根目录扩容
    centos7重新调整分区大小
    Linux 一种调用蜂鸣器的方法
    mybatis中 keyProperty="id" 的作用
    MySQL实战45讲
    常用正则表达式最强整理(速查手册)
    linux下nacos的1.1.3版本集群部署
  • 原文地址:https://www.cnblogs.com/mjgw/p/12392774.html
Copyright © 2020-2023  润新知