几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(C++)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-18, 10:37 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】贴个尺寸标注的例子

贴个尺寸标注的例子
贴个尺寸标注的例子
#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
错误多多.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 06:24 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多