贴个尺寸标注的例子
贴个尺寸标注的例子
#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;
}
呵呵,很多代码也是参考的他人的
偶是小菜,有什么错误之处,还请大侠别取笑偶!
壁立千仞,无欲则刚;
海纳百川,有容乃大!
问下:error c2653: 'cshowgraphdlg' : is not a class or namespace name
这个错误怎么改!
~~
方便的话把调试程序给我一份可一吗?谢谢
xlgis@hotmail.com
错误多多.