![]() |
【转帖】贴个尺寸标注的例子
贴个尺寸标注的例子
贴个尺寸标注的例子 #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 错误多多. |
| 所有的时间均为北京时间。 现在的时间是 04:16 AM. |