明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2541|回复: 6

贴个尺寸标注的例子

[复制链接]
发表于 2005-9-2 14:21:00 | 显示全部楼层 |阅读模式

#include <migrtion.h >

#include <dbents.h>

void blade2d();

{

 AcDbLine *pLn1;
 AcDbObjectId lineId1;
 AcDbObjectId dimId1,dimId2;
 AcGePoint3d cp,cp1,cp2,dp1,dp2,dp3;
 AcDbEntity *pEnt;
 AcDbAlignedDimension *pDimAli1; 

 cp1.x=cp2.x=cp1.y=0;
 cp2.y=120;
 cp1.z=cp2.z=cp.z=0;

 pLn1=new AcDbLine(cp1,cp2);

 lineId1=AddEntityToDbs(1,pLn1);  //AddEntityToDbs为自定义的函数,作用是将直线

                                                         // 加到块表记录中去
  pLn1->close();

 acdbOpenObject(pEnt,lineId1,AcDb::kForRead);
//设置尺寸标注样式
 AcDbObjectId dimStyleId=defineDimStyle();
//将该尺寸标注样式设置为当前使用的标注样式
 acdbCurDwg()->setDimstyle(dimStyleId);
 
//尺寸标注(先竖后横)
 pLn1=AcDbLine::cast(pEnt);
 dp1=pLn1->startPoint();
 dp2=pLn1->endPoint();
 dp3.x=dp2.x-8;
 dp3.y=dp2.y;
 dp3.z=0;
 pLn1->close();
 pEnt->close();
 pDimAli1=new AcDbAlignedDimension(dp1,dp2,dp3,NULL,dimStyleId);
//或者直接用下面的代码也可以
// dp3.set(-8,0,0);
// pDimAli1=new AcDbAlignedDimension(ulp,llp,dp3,NULL,AcDbObjectId::kNull);
 dimId1=AddEntityToDbs(2,pDimAli1);
 pDimAli1->close();

}


AcDbObjectId CShowGraphDlg::defineDimStyle()
{
 AcDbDimStyleTable *pDimStyleTbl;
 AcDbObjectId dimStyleId;

 acdbCurDwg()->getDimStyleTable(pDimStyleTbl,AcDb::kForRead); 
//等价于acdbHostApplicationServices()->workingDatabase()->getDimStyleTable(pDimStyleTbl,AcDb::kForWrite);
 AcDbDimStyleTableRecord *pDimStyleTblRcd;
//当存在着NewDim标注样式时,我们不必再进行修改设置,只要得到其ID即可,不存在才进行设置修改工作
//另外这样也绕过了对当前标注样式进行修改无效的问题
 if(Acad::eOk!=pDimStyleTbl->getAt("NewDim",dimStyleId,AcDb::kForWrite))
 {
  pDimStyleTbl->upgradeOpen();
  pDimStyleTblRcd=new AcDbDimStyleTableRecord;
//设置尺寸标注样式表记录名
  pDimStyleTblRcd->setName("NewDim");
//调用设置尺寸变量函数
  setDimVar(pDimStyleTblRcd);
//添加新的尺寸标注样式表记录
  pDimStyleTbl->add(dimStyleId,pDimStyleTblRcd);
  pDimStyleTblRcd->close();
 }
 pDimStyleTbl->close();
 return dimStyleId;
}

void CShowGraphDlg::setDimVar(AcDbDimStyleTableRecord *pDimStyleTblRcd)
{
 pDimStyleTblRcd->setDimasz(3);  //箭头长度为3
 pDimStyleTblRcd->setDimexe(3);  //尺寸界线在标注线上方延伸量为3
 pDimStyleTblRcd->setDimexo(0);  //尺寸界线起点偏移量为0
// pDimStyleTblRcd->setDimdli(6);  //标注线间距为6
 pDimStyleTblRcd->setDimdsep(0);  //采用逗点作小数分隔符
 pDimStyleTblRcd->setDimtad(1);  //文字位于标注线上方
 pDimStyleTblRcd->setDimtih(0);  //尺寸界线内侧的文字水平放置
 pDimStyleTblRcd->setDimtoh(0);  //尺寸界线外侧的文字水平放置
 pDimStyleTblRcd->setDimtxt(4);  //文字尺寸高度为4
 pDimStyleTblRcd->setDimgap(1);  //标注线与文字间距为1
 pDimStyleTblRcd->setDimdec(1);  //小数位数
 pDimStyleTblRcd->setDimtix(1);  //将文字放置于尺寸界线内侧
 pDimStyleTblRcd->setDimtofl(1);  //强制在尺寸界线内侧画标注线
//调用取得文字样式ID号的函数
 AcDbObjectId styleId=getTextStyleId();
 pDimStyleTblRcd->setDimtxsty(styleId);  //设置文字样式
}

AcDbObjectId CShowGraphDlg::getTextStyleId()
{
 AcDbObjectId styleId;
 AcDbTextStyleTable *pTextStyleTbl;

 acdbCurDwg()->getTextStyleTable(pTextStyleTbl,AcDb::kForWrite); 
 if(Acad::eOk!=pTextStyleTbl->getAt("DimTextStyle",styleId))
 {
  AcDbTextStyleTableRecord *pTextStyleTblRcd=new AcDbTextStyleTableRecord;
//设置字体样式表记录名
  pTextStyleTblRcd->setName("DimTextStyle");
//设置字体文件名
  pTextStyleTblRcd->setFileName("samplex");
//设置字体宽度比例为0.7
  pTextStyleTblRcd->setXScale(0.7);
//添加字体样式表记录
  pTextStyleTbl->add(styleId,pTextStyleTblRcd);
  pTextStyleTblRcd->close();
 }
 pTextStyleTbl->close();
 return styleId;
}

呵呵,很多代码也是参考的他人的

偶是小菜,有什么错误之处,还请大侠别取笑偶!

发表于 2005-9-7 10:30:00 | 显示全部楼层

问下:error C2653: 'CShowGraphDlg' : is not a class or namespace name

这个错误怎么改!

发表于 2005-9-19 15:07:00 | 显示全部楼层
~~
发表于 2005-9-20 15:12:00 | 显示全部楼层

方便的话把调试程序给我一份可一吗?谢谢

xlgis@hotmail.com

发表于 2006-2-17 09:58:00 | 显示全部楼层
错误多多.
发表于 2011-7-30 16:44:42 | 显示全部楼层
内容简介内容简介
发表于 2011-7-30 17:07:34 | 显示全部楼层
有深度,有内涵,我不会
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 10:44 , Processed in 0.177533 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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