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


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


回复
 
主题工具 搜索本主题 显示模式
旧 2009-05-05, 11:15 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】get extents of drawing

get extents of drawing
get extents of drawing
we had been doing the following to get the extents of the drawing:
==================================================
// create a database and load the drawing into it.
oddbdatabaseptr pdb;
pdb = svcs.readfile( szinput, false, false, oda::ksharedenyno );
if (!pdb.isnull())
{
// attempt at zooming to extents
oddbviewporttableptr pvptbl = pdb->getviewporttableid().safeopenobject();
oddbobjectid id = pvptbl->getactiveviewportid();
if (id)
{
oddbviewporttablerecordptr prec = id.safeopenobject(oddb::kforwrite);
prec->zoomextents();
}
/* this code gets the extents of the drawing */
oddbextents ext;
ext.addblockext(oddbblocktablerecordptr(pdb->getactivelayoutbtrid().safeopenobject()));
==================================================
since the oddbextents class no longer exists, i'm trying to figure out how to do the same thing using other classes, and i guess i'm not exactly sure which class would be comparable to what we were doing before. i'm pretty new to all of this.
i tried replacing the last chunk of code with this:
/* this code gets the extents of the drawing */
odgeextents3d ext;
oddbblocktablerecordptr btrptr = pdb->getactivelayoutbtrid().safeopenobject();
btrptr->getgeomextents(ext);
for some files, this seems to give me the same extents or very close, but for other files it gives very different results. does this code just need to be tweaked a bit, or should i be doing something completely different?
thank you.
getting extents from block table record and from viewport may give different results for example because some layers are frozen in the viewport. block table record is not aware of viewport context.
all view-related classes have abstractviewpe protocol extension which provides the same interface for oddbviewport, oddbviewporttablerecord etc.
see abstractviewpe.h
sergey slezkin
thank you for the response sergey.
could somebody please give me the specific code that will do for us what we were doing before? i hate to ask that, but i know very little about any of this stuff, including autocad, so i have no idea about viewports and block table records, etc. i'm just totally stabbing in the dark, looking for some example that's similar to what i need to do.
i tried the following using abstractviewpe, and some files that were getting the incorrect extents now get the correct extents, but other files still get incorrect extents:
/* this code gets the extents of the drawing */
odgeextents3d ext;
odabstractviewpeptr pvppe(prec);
odgeboundblock3d bbox;
bool bbboxvalid = pvppe->viewextents(prec, bbox);
if(bbboxvalid )
{
// extents not empty
bbox.transformby(pvppe->eyetoworld(prec));
}
else
{
// empty
}
odgepoint3d p1;
odgepoint3d p2;
bbox.getminmaxpoints(p1,p2);
//set the extents to the value of the bbox
ext.set(p1,p2);
what extents do you need?
the first example of your code using addblockextents() was getting extents of active layout block table record (model space or active paper space).
btw, it's not clear to me what was the purpose of calling viewport's zoomextents() before calling addblockextents().
does zoom extents in odamfcapp work correctly for files you have problems with?
note that in a few releases of dd calculating extents might be changed (regarding special cases like empty texts, hatches with invalid boundary etc.)
sergey slezkin
what i need are the autocad geometry extents of the file, when zoomed to extents.
actually, the first thing i was trying,
oddbblocktablerecordptr btrptr = pdb->getactivelayoutbtrid().safeopenobject();
btrptr->getgeomextents(ext);
seems to be working on almost all files. there are a small number of files where one of the 4 values is coming out very different. maybe it could be a bug, or maybe there is some reason it is different.
i'm having trouble getting odamfcapp to build, so i can't try zoomextents there. i did try building allexamples, and on odamfcapp i still get a link error on mfc42u.lib, which i can't find anywhere on my machine.
i found another problem i need to look into more urgently... i'll get back to you later if this turns out to be a big problem for me.
thank you for your help.
mfc42u.lib is unicode mfc runtime library. it's not installed by default while installing vc6. you need to check this option while installation.
(it's installed by default while installing vc 2005)
binary distribution contains already built odamfcapp. but binary zips for vc contain its dll version which will not run without mfc42u.dll.
sergey slezkin
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


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

高级搜索
显示模式

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

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

相似的主题
主题 主题发起者 论坛 回复 最后发表
【转帖】drawing extents changes after adding te yang686526 DirectDWG 0 2009-05-04 08:08 PM
【转帖】value of drawing check yang686526 American standards 0 2009-05-04 11:08 AM
【转帖】drawing number system - do you still indicate dwg sie in the yang686526 American standards 0 2009-04-29 07:45 PM
【转帖】asme - where to star yang686526 American standards 0 2009-04-29 07:28 PM
【转帖】drawing view extents ... got huge yang686526 SolidWorks二次开发 0 2009-04-13 10:34 AM


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


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