找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1986|回复: 8

[求助]:HELP! 尺寸标注中文字颜色的设定(有代码和图片)

[复制链接]
发表于 2003-7-2 17:41:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想通过ARX程序来更改尺寸标注中文字的颜色,代码如下:


  1.   [FONT=courier new]

  2. //改变文字颜色
  3. void ChangeTxtColor()
  4. {
  5.         ads_name ssDim,EntityName;
  6.         AcDbEntity *pEnt;
  7.         struct resbuf pRb;
  8.         AcDbObjectId objId,DmStyId;
  9.         AcGePoint3d DmLPt,TxtPt,EPt1,EPt2,TmpPt;

  10.         AcDbDimStyleTableRecord *pDmTblRcd;
  11.         Acad::ErrorStatus es;
  12.        

  13.         //获取选择集过滤List(由实体名称过滤)
  14.         char sbuf[50]; // Buffers to hold strings
  15.         pRb.restype = 0;        //实体名称
  16.         strcpy(sbuf, "Dimension");
  17.         strupr(sbuf);
  18.         pRb.resval.rstring = sbuf;
  19.         pRb.rbnext = NULL;

  20.         //选取尺寸标注
  21.         int ss= ads_ssget("X",NULL,NULL,&pRb,ssDim);
  22.        
  23.         //取得选择集中实体个数
  24.         long NumOfEntity;
  25.         ss = ads_sslength(ssDim,&NumOfEntity);
  26.        
  27.         //取得当前系统中标注样式的颜色
  28.         int dimclr;
  29.         gGlobal.GetVar("DIMCLRT",&dimclr);
  30.         int ncolor=0;

  31.         //设置文字颜色(系统)
  32.         if(acedSetColorDialog(ncolor,TRUE,dimclr))
  33.         {
  34.                 gGlobal.SetVar("DIMCLRT",ncolor);
  35.         }

  36.         //遍历选择集中的实体
  37.         for(long i = 0 ; i < NumOfEntity; i++)
  38.         {
  39.                 ads_ssname(ssDim,i,EntityName);
  40.        
  41.                 acdbGetObjectId(objId,EntityName);
  42.                
  43.                 if(acdbOpenObject(pEnt,objId,AcDb::kForRead)!=Acad::eOk)
  44.                 {
  45.                         ads_printf("\n打开实体时出错!");
  46.                         return;
  47.                 }
  48.        
  49.                 AcDbDimension *pDim;
  50.                 pDim=AcDbDimension::cast(pEnt);

  51.                 //取得标注的风格ID
  52.                 DmStyId = pDim->dimensionStyle();
  53.                 acdbOpenObject(pDmTblRcd,DmStyId,AcDb::kForWrite);
  54.                
  55.                 //设置文字颜色
  56.                 AcCmColor Color = pDmTblRcd->dimclrt();
  57.        
  58.                 Color.setColorIndex(ncolor);
  59.                 pDmTblRcd->setDimclrt(Color);

  60.                 pDmTblRcd->close();
  61.                 pEnt->close();
  62.                
  63.         }       
  64.        
  65. }
  66. 以上代码只能更改单个标注中文字的颜色,效果如下图,请高手指点。。。。。~~~如何能更改多个(所有)选定尺寸标注中文字的颜色和系统文字样式
  67.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-7-9 10:34:00 | 显示全部楼层
对整个数据库做一个遍历器
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-9 11:40:13 | 显示全部楼层
是吗?
我已经在程序中遍历所有实体进行更改颜色了。但结果是所有尺寸的颜色都更改了(Color属性已经改过来了),但只有第一个尺寸的颜色在图中显示变化了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-11 20:53:55 | 显示全部楼层
给个提示:标注是一个匿名块
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-16 01:09:08 | 显示全部楼层
这个是什么东西啊,我用了这么久都没有用到过
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-11 17:16:07 | 显示全部楼层
修正后的代码:

  1.   [FONT=courier new]
  2. //改变文字颜色
  3. void ChangeTxtColor()
  4. {
  5.         ads_name ssDim,EntityName;
  6.         AcDbEntity *pEnt;
  7.         struct resbuf pRb;
  8.         AcDbObjectId objId,DmStyId;
  9.         AcGePoint3d DmLPt,TxtPt,EPt1,EPt2,TmpPt;

  10.         AcDbDimStyleTableRecord *pDmTblRcd;
  11.         //Acad::ErrorStatus es;


  12.         //获取选择集过滤List(由实体名称过滤)
  13.         char sbuf[50]; // Buffers to hold strings
  14.         pRb.restype = 0;        //实体名称
  15.         strcpy(sbuf, "Dimension");
  16.         strupr(sbuf);
  17.         pRb.resval.rstring = sbuf;
  18.         pRb.rbnext = NULL;

  19.         //选取尺寸标注
  20.         int ss= ads_ssget("X",NULL,NULL,&pRb,ssDim);
  21.        
  22.         //取得选择集中实体个数
  23.         long NumOfEntity;
  24.         ss = ads_sslength(ssDim,&NumOfEntity);
  25.        
  26.         //取得当前系统中标注样式的颜色
  27.         int dimclr = 0;
  28.         //gGlobal.GetVar("DIMCLRT",&dimclr);
  29.         int ncolor = 0;

  30.         //设置文字颜色(系统)
  31.         if(acedSetColorDialog(ncolor,TRUE,dimclr))
  32.         {
  33.                 gGlobal.SetVar("DIMCLRT",ncolor);
  34.         }

  35.         //遍历选择集中的实体
  36.         for(long i = 0 ; i < NumOfEntity; i++)
  37.         {
  38.                 ads_ssname(ssDim,i,EntityName);
  39.        
  40.                 acdbGetObjectId(objId,EntityName);
  41.                
  42.                 if(acdbOpenObject(pEnt,objId,AcDb::kForWrite)!=Acad::eOk)
  43.                 {
  44.                         ads_printf("\n打开实体时出错!");
  45.                         return;
  46.                 }
  47.        
  48.                 AcDbDimension *pDim;
  49.                 pDim = AcDbDimension::cast(pEnt);

  50.                 //取得标注的风格ID
  51.                 DmStyId = pDim->dimensionStyle();
  52.                 acdbOpenObject(pDmTblRcd,DmStyId,AcDb::kForWrite);
  53.                
  54.                 //设置文字颜色
  55.                 AcCmColor Color;
  56.                 Color.setColorIndex(ncolor);
  57.                 pDmTblRcd->setDimclrt(Color);
  58.                
  59.                 pEnt->close();
  60.                 pDmTblRcd->close();
  61.                
  62.         }
  63. }
  64. 不过好像还是只能更改一个标注的文字颜色。。。

  65.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-11 19:22:44 | 显示全部楼层

:)

你的程序没有问题,我在我的机器上测试了,你可以看一下这个ARX文件!
命令:dimcolor

修改内容:

你的程序没有问题,我在我的机器上测试了,你可以看一下这个ARX文件!
命令:dimcolor

修改内容:
//设置文字颜色(系统)
if(acedSetColorDialog(ncolor,TRUE,dimclr))
{
gGlobal.SetVar("DIMCLRT",ncolor);
}

修改为:

//设置文字颜色(系统)
if(acedSetColorDialog(ncolor,TRUE,dimclr))
{
struct resbuf *val = new struct resbuf;
val->restype = RTSHORT;
val->rbnext = NULL;
val->resval.rint = ncolor;
acedSetVar("DIMCLRT",val);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-8-11 19:29:13 | 显示全部楼层
最初由 Echoyin 发布
[B]修正后的代码:
[CODE]
  
//改变文字颜色
void ChangeTxtColor()
{
        ads_name ssDim,EntityName;
        AcDbEntity *pEnt;
        struct resbuf pRb;
        AcDbObjectId objId,DmStyId;
        AcGePoint3d... [/B]


尺寸实体的表现依据的是“标注样式”,你可以修改尺寸实体引用的“标注样式”里面的dimclrt系统变量的值,来修改尺寸的文字颜色,这样修改,所有引用这个样式的标注实体都一起改。

如果你就想改变一个指定标注实体的文字颜色,那么你可以给这个标注实体加扩展记录,orveride (超越)dimclrt 值,来只影响这一个实体。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-8-11 23:03:04 | 显示全部楼层
谢谢斑竹和园长先~
1.园长,我想修改的是系统的颜色,而且当前所有标注的文字颜色也要求改变。用的是


  1.   [FONT=courier new]

  2. //设置文字颜色(系统)
  3.         if(acedSetColorDialog(ncolor,TRUE,dimclr))
  4.         {
  5.                 gGlobal.SetVar("DIMCLRT",ncolor);
  6.         }
  7. 。。。

  8. //取得标注的风格ID
  9.                 DmStyId = pDim->dimensionStyle();
  10.                 acdbOpenObject(pDmTblRcd,DmStyId,AcDb::kForWrite);
  11.                
  12.                 //设置文字颜色
  13.                 AcCmColor Color;
  14.                 Color.setColorIndex(ncolor);
  15.                 pDmTblRcd->setDimclrt(Color);
  16. 。。。


  17.   [/FONT]


代码“//取得标注的风格ID”以后部分就是你所说的第一种方法,即当前所有引用这个样式的标注实体都一起改。而且如果只用

  1.   [FONT=courier new]
  2. //设置文字颜色(系统)
  3.         if(acedSetColorDialog(ncolor,TRUE,dimclr))
  4.         {
  5.                 gGlobal.SetVar("DIMCLRT",ncolor);
  6.         }

  7.   [/FONT]
复制代码

则只能更改系统文字颜色(此后增加的标注文字颜色会变),而当前文字颜色不变的,其属性里面文字颜色也不变。


2. 斑竹,我的gGlobal.SetVar("DIMCLRT",ncolor)是自己封装的函数,如果你只改了这一个地方的话,那我们的程序应该是一样的。而且该程序在2000下实现没有问题,标注文字的颜色都更改过来了,但在R14下面如果选中多个标注的话,只有第一个文字的颜色更改了,其余的在属性里面也可以看到颜色更改了,但就是不能直接实现,要到属性里面去确认一下颜色才都改过来。。。[CODE]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 02:46 , Processed in 0.195557 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表