![]() |
【转帖】请教尺寸标注文本方面的问题!!!
请教尺寸标注文本方面的问题!!!
请教尺寸标注文本方面的问题!!! 我做了一个自动标注孔尺寸(包括孔径、孔深)的程序,部分代码如下: double leaderlength=50; int idimcolor=1; int itextcolor=1; accmcolor color; char* dimtext=="光孔<>"; acdbdatabase *pcurdb=acdbhostapplicationservices()->workingdatabase(); acdbdimstyletable *pnewdimtable; pcurdb->getsymboltable(pnewdimtable,acdb::kforwrite); acdbdimstyletablerecord *pnewdimrecord=new acdbdimstyletablerecord(); pnewdimrecord->setdimasz(20);//设置箭头大小 pnewdimrecord->setdimzin(8);//十进制小数显示时,抑制后续零 pnewdimrecord->setdimexe(30);//设置尺寸界线超出尺寸线距离为400 pnewdimrecord->setdimexo(0);//设置尺寸界线的起点偏移量为300 pnewdimrecord->setdimtxt(30);//设置文字高度 pnewdimrecord->setdimtad(1);//设置文字位置-垂直为上方,水平默认为居中,不用设置 pnewdimrecord->setdimgap(10);//设置文字位置-从尺寸线的偏移量 pnewdimrecord->setdimtih(0); pnewdimrecord->setdimtix(1);//设置标注文字始终绘制在尺寸界线之间 pnewdimrecord->setdimtofl(1);//即使箭头放置于测量点之外,尺寸线也将绘制在测量点之间 pnewdimrecord->setdimlfac(0.125); color.setcolorindex(idimcolor); pnewdimrecord->setdimclrd(color); //尺寸线颜色 pnewdimrecord->setdimclre(color); //尺寸边界线颜色 color.setcolorindex(itextcolor); pnewdimrecord->setdimclrt(color); //文字颜色 acdbobjectid dimrecordid; pnewdimtable->add(dimrecordid,pnewdimrecord); pnewdimtable->close(); pnewdimrecord->close(); acgepoint3d pt1(kd[k].zb_x+t-kd[k].kongjing/2*cos(pi/4.0),kd[k].zb_y+t+kd[k].kongjing/2*sin(pi/4.0),0); acgepoint3d pt2(kd[k].zb_x+t+kd[k].kongjing/2*cos(pi/4.0),kd[k].zb_y+t-kd[k].kongjing/2*sin(pi/4.0),0); acdbblocktable *pblocktable;//定义块表指针 acdbhostapplicationservices()->workingdatabase() ->getsymboltable(pblocktable, acdb::kforread); acdbblocktablerecord *pblocktablerecord; pblocktable->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite); pblocktable->close(); acdbdiametricdimension *pdim = new acdbdiametricdimension(pt6,pt7,leaderlength,dimtext,dimrecordid); pdim->setleaderlength(20); acdbobjectid id; pblocktablerecord->appendacdbentity(id, pdim); pblocktablerecord->close(); pdim->close(); } 运行后只标出了孔的直径,形式为“光孔ф120”。现在我想把孔的深度尺寸也标出来,期望标注形式为“光孔ф120深a”。孔的深度a可通过读取变量kd[k].kongshen获得。希望高手指点一下如何实现。 很简单呀,利用strcat()函数合并字符串不就行了。 strcat(prompt1, prompt2); //把第二个字符串合并到第一个字符串并返回prompt1,这个好像是c++里的字符串处理函数。 我按照下面方法去做: cstring a="光孔<>"+kd[k].kongjing; char* dimtext=a; 编译提示: e:\hmbdesigner\hmbdesignercommands.cpp(1813) : error c2111: pointer addition requires integral operand e:\hmbdesigner\hmbdesignercommands.cpp(1814) : error c2440: 'initializing' : cannot convert from 'class cstring' to 'char *' 能不能具体介绍一下在这里利用strcat()函数具体怎末作啊! "光孔<>"+kd[k].kongjing;是什么意思呀?一个是字符串、一个是实数,能加吗?! 要先用acdbrtos()函数把实数转换为字符串。 然后利用strcat()函数合并字符串就可以使用了。例如: char* dimtext = "光孔<>"; strcat(dimtext, "深"); char xx[50]; acdbrtos(kd[k].kongjing, 2,1, xx); strcat(dimtext, xx); dimtext就是你要标注的内容了“光孔ф120深20.0” 另外: char* dimtext=="光孔<>"; ???!!你的粗心也要改掉 关注中 谢谢pglyxq的提醒,呵呵,是我忘了它们不是同一类型的了,我做了改动: char* dimtext="光孔<>"; cstring str; str.format("%5.1f",kd[k].kongshen/8);//double型转换为字符型 cstring dimtext=cstring("光孔<>")+"深"+str; (char*)(lpctstr)dimtext;//字符型转换为char*型 还好问题解决了。 |
| 所有的时间均为北京时间。 现在的时间是 08:12 PM. |