找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: Echoyin

[求助]:HELP! 如何炸开尺寸标注!?

[复制链接]
发表于 2003-7-22 17:27:06 | 显示全部楼层
为什么非要炸开尺寸才能读到尺寸值?可以读他的属性嘛
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-7-22 19:59:17 | 显示全部楼层
最初由 Echoyin 发布
[B]上面stoneball朋友给出的程序在2000下炸开实体没有问题
但在14下面却不能炸开。。。
请高手指点在14下应如何更改才能炸开尺寸标注。。。 [/B]


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

使用道具 举报

 楼主| 发表于 2003-7-27 19:29:55 | 显示全部楼层
楼长~
我是想把已有的尺寸标注变成文字——也就是说只把尺寸标注里面的文字留下(原地不动),其余部分都删掉。。
于是我当然的就想到了把标注炸开,然后删掉别的,不知道这个方法是否行的通吗?或者有更好的解决方法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-7-27 19:37:48 | 显示全部楼层
最初由 Echoyin 发布
[B]楼长~
我是想把已有的尺寸标注变成文字——也就是说只把尺寸标注里面的文字留下(原地不动),其余部分都删掉。。
于是我当然的就想到了把标注炸开,然后删掉别的,不知道这个方法是否行的通吗?或者有更好的解决?.. [/B]


这个方法也行。


但你完全可以利用AcDbDimmension类方法查询出使用的标注样式,获得文字使用的“文字样式”,然后得到文字内容,直接写出来文字就可以了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-27 19:42:49 | 显示全部楼层
最初由 Echoyin 发布
[B]楼长~
我是想把已有的尺寸标注变成文字——也就是说只把尺寸标注里面的文字留下(原地不动),其余部分都删掉。。
于是我当然的就想到了把标注炸开,然后删掉别的,不知道这个方法是否行的通吗?或者有更好的解决?.. [/B]
..
修改标注样式也可以做到,为什么要炸开呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-27 20:22:13 | 显示全部楼层
最初由 eachy 发布
[B][QUOTE]最初由 Echoyin 发布
[B]
修改标注样式也可以做到,为什么要炸开呢
[/B]

修改标注样式?这样可以直接把标注除文字外的其他部分去掉吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-27 20:40:30 | 显示全部楼层
最初由 Echoyin 发布
[B]
修改标注样式?这样可以直接把标注除文字外的其他部分去掉吗? [/B]

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

使用道具 举报

 楼主| 发表于 2003-7-27 21:40:13 | 显示全部楼层
最初由 eachy 发布
[B]
当然可以了 [/B]

呵呵,谢谢了
不过这个我也。。。。
我的意思是说在程序里面。。。。

感觉园长的那个方法不错,我试试看~~


哈哈,你们都把钱存在银行里面吃利息阿~~~有经济头脑  :P
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-7-27 21:45:04 | 显示全部楼层
最初由 Echoyin 发布
[B]
呵呵,这个我也。。。。
我的意思是说在程序里面。。。。

感觉园长的那个方法不错,我试试看~~


哈哈,你们都把钱存在银行里面吃利息阿~~... [/B]



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

使用道具 举报

 楼主| 发表于 2003-7-27 21:52:32 | 显示全部楼层
恩,好的
写好了我会贴出来让大家给我提意见的

对了,园长,我有个帖子叫“HELP! 尺寸标注中文字颜色的更改(有代码和图片)”

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-7-27 22:26:28 | 显示全部楼层
最初由 Echoyin 发布
[B]
呵呵,谢谢了
不过这个我也。。。。
我的意思是说在程序里面。。。。

感觉园长的那个方法不错,我试试看~~
哈哈,你们都把钱存在银行里... [/B]

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

使用道具 举报

 楼主| 发表于 2003-7-27 22:32:37 | 显示全部楼层
嗯?是吗?
也可以象你上面的图片中一样只修改隐藏属性就好了吗?如果是的话那就简单很多了。。。

修改隐藏属性不可行。。。
GripPoints会出现。。。


  1.   [FONT=courier new]
  2. //取得标注线的长度
  3. void GetDimLen(AcDbEntity* pEnt,double &DimLen)
  4. {
  5.         AcGeVector3d Vec(1,0,0);
  6.         AcGePoint3d intrePt1,intrePt2,EPt1,EPt2,DmLPt;
  7.         double DimRt;

  8.         if(strcmp(pEnt->isA()->name(),"AcDbAlignedDimension")==0)
  9.         {
  10.                 AcDbAlignedDimension *pDim;
  11.                 pDim=AcDbAlignedDimension::cast(pEnt);
  12.                
  13.                 //取得标注线点
  14.                 DmLPt=pDim->dimLinePoint();

  15.                 //取得标注转角
  16.                 DimRt = pDim->horizontalRotation();
  17.                 Vec.rotateBy(DimRt,AcGeVector3d(0,0,1));
  18.                 Vec.normalize();

  19.                
  20.                 //取得Ext点并加入到数据库中
  21.                 EPt1 = pDim->xLine1Point();
  22.                 EPt2 = pDim->xLine2Point();
  23.         }
  24.         else if(strcmp(pEnt->isA()->name(),"AcDbRotatedDimension")==0)
  25.         {
  26.                 AcDbRotatedDimension *pDim;
  27.                 pDim = AcDbRotatedDimension::cast(pEnt);

  28.                 //取得标注线点
  29.                 DmLPt=pDim->dimLinePoint();
  30.                
  31.                 //取得标注转角
  32.                 DimRt = pDim->horizontalRotation();
  33.                 Vec.rotateBy(DimRt,AcGeVector3d(0,0,1));
  34.                 Vec.normalize();
  35.                
  36.                 //取得Ext点并加入到数据库中
  37.                 EPt1 = pDim->xLine1Point();
  38.                 EPt2 = pDim->xLine2Point();
  39.         }

  40.         //取得经过DimPt点的直线和经过Ext点垂直于该直线的平面
  41.         AcGeLine3d DimL(DmLPt,Vec);
  42.         AcGePlane PlaneE1(EPt1,Vec);
  43.         AcGePlane PlaneE2(EPt2,Vec);

  44.         //求出2交点间的距离(Dim线长度)
  45.         DimL.intersectWith(PlaneE1,intrePt1);
  46.         DimL.intersectWith(PlaneE2,intrePt2);
  47.        
  48.         DimLen = intrePt1.distanceTo(intrePt2);
  49. }

  50. //尺寸变文字
  51. void DimToText()
  52. {

  53.         ads_name ssDim,EntityName;
  54.         AcDbEntity *pEnt = NULL;
  55.         struct resbuf pRb;
  56.         AcDbObjectId retId,objId,TxtStyId,DmStyId,LayTxtId;

  57.         AcGePoint3d DmLPt,TxtPt,EPt1,EPt2,TmpPt;
  58.         double TxtH,TxtRt,DimLen;
  59.         AcDbDimStyleTableRecord *pDmTblRcd;
  60.         Acad::ErrorStatus es;
  61.        
  62.         //获取选择集过滤List(由实体名称过滤)
  63.         char sbuf[50]; // Buffers to hold strings
  64.         pRb.restype = 0;        //实体名称
  65.         strcpy(sbuf, "Dimension");
  66.         strupr(sbuf);
  67.         pRb.resval.rstring = sbuf;
  68.         pRb.rbnext = NULL;

  69.         //打开块表记录
  70.         AcDbBlockTable *pBlockTable;
  71.         acdbCurDwg()->getBlockTable(pBlockTable, AcDb::kForRead);

  72.         AcDbBlockTableRecord *pSpace;
  73.         pBlockTable->getAt(ACDB_MODEL_SPACE,pSpace,AcDb::kForWrite);

  74.         //选取尺寸标注并对选择集中的实体进行过滤
  75.         ads_printf("\n请选择要变文字的标注");
  76.         int ss= ads_ssget(NULL,NULL,NULL,&pRb,ssDim);

  77.         //取得选择集中实体个数
  78.         long NumOfEntity;
  79.         ss = ads_sslength(ssDim,&NumOfEntity);

  80.         //创建文字层
  81.         gCyz_ArxBegin();
  82.         LayTxtId = gConfig.GetLayerId(LWENZI);
  83.         gCyz_ArxEnd();

  84.         //遍历实体
  85.         for(long i = 0 ; i<NumOfEntity; i++)
  86.         {
  87.                 AcDbDimension *pDim = NULL;
  88.                 AcGeVector3d Vec;
  89.                
  90.                 ads_ssname(ssDim,i,EntityName);
  91.        
  92.                 acdbGetObjectId(objId,EntityName);
  93.                
  94.                 if(acdbOpenObject(pEnt,objId,AcDb::kForWrite)!=Acad::eOk)
  95.                 {
  96.                         ads_printf("\n打开实体时出错!");
  97.                         return;
  98.                 }

  99.                 pDim = AcDbDimension::cast(pEnt);
  100.                 //取得标注样式风格
  101.                 DmStyId = pDim->dimensionStyle();
  102.                 //取得文字内容
  103.                 char *Txt = pDim->dimensionText();
  104.                
  105.                 if(strcmp(Txt,"")==0)
  106.                 {
  107.                         CString str;
  108.                         GetDimLen(pEnt,DimLen);
  109.                         int Dim = (int)DimLen;
  110.                         if((DimLen - (double)Dim) >= 0.5)  Dim += 1;

  111.                         str.Format("%d",Dim);
  112.                         Txt = (LPSTR)(LPCSTR)str;
  113.                 }
  114.        
  115.        
  116.                 //取得文字中心点和偏角
  117.                 TxtPt = pDim->textPosition();
  118.                 TxtRt = pDim->textRotation();
  119.        
  120.                 //删除标注——删除一定要在打开标注记录表之前完成!!!!!!!
  121.                 es = pDim->erase();
  122.             es = pEnt->close();

  123.                 //打开标注记录表
  124.                 acdbOpenObject(pDmTblRcd,DmStyId,AcDb::kForWrite);
  125.                
  126.                 //取得文字风格
  127.                 TxtStyId = pDmTblRcd->dimtxsty();
  128.                 //取得文字高度
  129.                 TxtH = pDmTblRcd->dimtxt();
  130.                
  131.                 //创建新的文字
  132.                 AcDbMText *pMTxt = new AcDbMText;
  133.                 pMTxt->setTextStyle(TxtStyId);
  134.                 pMTxt->setContents(Txt);
  135.                 pMTxt->setLocation(TxtPt);
  136.                 pMTxt->setTextHeight(TxtH);
  137.                 pMTxt->setAttachment(AcDbMText::kMiddleCenter);
  138.                 pMTxt->setRotation(TxtRt);
  139.                 pMTxt->setNormal(AcGeVector3d(0,0,1));
  140.                
  141.                 pSpace->appendAcDbEntity(retId,pMTxt);
  142.                 pMTxt->setLayer(LayTxtId);

  143.                 pDmTblRcd->close();
  144.                 pMTxt->close();
  145.         }
  146.        
  147.         pBlockTable->close();
  148.         pSpace->close();

  149. }

  150. 以上代码已经经过修正,功能实现。
  151. 从里面吸取的经验是:删除一定要在标注记录表打开之前或者其关闭之后进行~~~否则删除不掉。。。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 00:47 , Processed in 0.427954 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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