几何尺寸与公差论坛------致力于产品几何量公差标准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-16, 08:47 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】再次请教!

再次请教!
再次请教!
再次请教各位大虾:程序代码如下,完全是参考的例子上的:
dwgpath="d:\\drawing1.dwg";
acdocmanager->lockdocument(curdoc(),acap::kwrite,null,null,true);

acdbdatabase *pnewdb =new acdbdatabase(adesk::kfalse);
acad::errorstatus es=pnewdb->readdwgfile(dwgpath , _sh_denyno);
if (es!=acad::eok)
{
acutprintf("\nthe file %s cannot be opend",dwgpath);
return;
}
acdbdatabase *pdb;
pdb =acdbhostapplicationservices ()->workingdatabase ();

cstring pblockname=blockdwg;
acdbobjectid blockid; //出问题的地方
if((es=pdb->insert(blockid, pblockname,pnewdb, true))==acad::eok)
{
acutprintf("\ninsert ok\n");
}
else
{
afxmessagebox("insert failed");
delete pnewdb;
return;
}

const acgepoint3d& pt=acgepoint3d(0,0,0);

double angle=0;
double xrefscale=0;
acdbblockreference *pblkref = new acdbblockreference;
pblkref->setblocktablerecord(blockid);
pblkref->setposition(pt);
pblkref->setrotation(angle);
pblkref->setscalefactors( xrefscale);

acdbblocktable *pblocktable;
pdb->getsymboltable(pblocktable, acdb::kforread);

acdbblocktablerecord *pblocktablerecord;
pblocktable->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite);
pblocktable->close();
acdbobjectid newentid; //出问题的地方
pblocktablerecord->appendacdbentity(newentid, pblkref);
pblocktablerecord->close();

acdbblocktablerecord *pblockdef;
acdbopenobject(pblockdef, blockid, acdb::kforread);

acdbblocktablerecorditerator *piterator;
pblockdef->newiterator(piterator);
acgepoint3d basepoint;
acdbentity *pent;
acdbattributedefinition *pattdef;
for (piterator->start(); !piterator->done(); piterator->step())//将source.dwg中所有的attibute进行遍历
{
piterator->getentity(pent, acdb::kforread);
pattdef = acdbattributedefinition::cast(pent);
if (pattdef != null && !pattdef->isconstant()) {
acdbattribute *patt = new acdbattribute();
patt->setpropertiesfrom(pattdef);
patt->setinvisible(pattdef->isinvisible());
basepoint = pattdef->position();
basepoint += pblkref->position().asvector();
patt->setposition(basepoint);
patt->setheight(pattdef->height());
patt->setrotation(pattdef->rotation());
patt->settag("tag");
patt->setfieldlength(25);
char *pstr = pattdef->tag();
patt->settag(pstr);
acutdelstring(pstr);
patt->setfieldlength(pattdef->fieldlength());
patt->settextstring("-");

acdbobjectid attid;

pblkref->appendattribute(attid, patt);
patt->close();
}
pent->close(); // use pent... pattdef might be null
}
delete piterator;
acdocmanager->unlockdocument(curdoc());
程序编译无误,也将dwg文件的块插到当前稳当的数据库中了,但是不知为什么,视图上并没有显示,查找当前的数据库,发现块名在里面,就是没有图形,请教各位!
另外在acdbobjectid blockid;这句话时,调试时出现了find symbols对话框,要求查找acdbhdr.pdb文件,cancel掉以后程序能继续执行,真是奇怪,是vc的毛病么,请教!
我的程序是在非模对话框的单击事件里调用的,不知是不是有影响,谢谢各位!
acad::errorstatus
insert(acdbobjectid& blockid,
const char* pblockname,
acdbdatabase* pdb,
bool preservesourcedatabase = true);
首先,此函数在数据库中创建一个新的块表记录。
这个新块表记录的名称由pblockname指向的名称给定,且blockid参数储存它的对象id。
然后,pdb指向的数据库中所有模型空间实体被复制至新的块表记录中。
调用者应确保源数据库立即被删除或在目标数据库被删除之前被删除。(是否是这个原因呢??)
谢谢二楼大虾,不过我按照你说的改了其中的:
if((es=pdb->insert(blockid, pblockname,pnewdb, true))==acad::eok)
{
acutprintf("\ninsert ok\n");
delete pnewdb;
}
else
{
afxmessagebox("insert failed");
delete pnewdb;
return;
}
删除了pnewdb数据库,但是问题依旧啊。。。。。。
是不是因为加了这句:acdocmanager->lockdocument(curdoc(),acap::kwrite,null,null,true);锁定了文档,使图块写不尽去了呢,但是不加这句 程序就出错误,而且将解锁语句acdocmanager->unlockdocument(curdoc()); 提前也会出错,头疼。。。。
一边看世界杯,一边想问题,呵呵,ppstream这个网络电视不错,播放很流畅。
还是想不出来,那位大虾帮帮忙啊,不用输入数据的图块能显示,但是有的图块要求输入一些信息的显示不出来,如果用autocad的insert命令通过对话框也可以加入,和锁定文档没什么关系,那位大虾帮忙想想办法!!!

???/
请教高手,帮忙看看,。。。。。。。。。急。。。
这个问题应该等价于如何用arx来实现autocad中的insert命令,不过不是动态的,是静态的,也就是并不要求用户输入数据,各位认为如何去做,请教。。。。
咋没人理我呢???????
搞定了,!!!!
代码没变,我也不知道怎么就可以了,,,,
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


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

高级搜索
显示模式

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

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



所有的时间均为北京时间。 现在的时间是 07:34 PM.


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