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

paperspace with multiple viewports using odvectorizeex
paperspace with multiple viewports using odvectorizeex
hello
i have extended the odvectorizeex example into my application to retrieve geometric data, i can read the model fine, but the paperspace layout reads again the model(a 3d model) in 2d, the paperspace is supposed to contain 3 viewports with different views of the 3d model.
what do i need to do to get the paperspace with the right viewports.
thank you
krishna
hi,
i had the same problem. please have a look at the thread "vectorizeex and viewports" to see how i solved it.
torsten
torsten,
thank you for the quick reply, i tried setting poverallview, but i ended with a drawing that has all the viewports sitting on each other instead of thier respective locations also the model itslef has all these viewports duplicated as part of the model.
since you have already accomplished this, is it possible to send a code snippet(or further guidance ), that acheives this.
thank you
krishna
hi krishna,
please find below the modified sample code for odvectorizeex:
odvectorizeex.cpp
code:
// global defintion for poveralview
odgsviewptr poveralview;
int main(int argc, char* argv[])
{
...
// prepare the device to render the active layout in this database.
pdevice = oddbgsmanager::setupactivelayoutviews(pdevice, pdwgcontext);
odgspaperlayouthelperptr ppaperhelper = odgspaperlayouthelper::cast( pdevice );
if( ppaperhelper.get() ) // paper space is active
{
poveralview = ppaperhelper->overallview();
}
else
{
poveralview = null;
}
// set the screen size for the generated geometry.
odgsdcrect screenrect(odgsdcpoint(0, 0), odgsdcpoint(10000, 10000));
pdevice->onsize(screenrect);
...
}
exgssimpledevice.cpp
code:
// external global defintion for poveralview
extern odgsviewptr poveralview;
void exsimpleview::update()
{
device()->setdrawcontext(drawcontext());
odgematrix3d xmodel2paperspace = poveralview->objecttodevicematrix().inverse() *
objecttodevicematrix() * geteyetoworldtransform();
seteyetooutputtransform( xmodel2paperspace );
// perform viewport clipping in eye coordinates:
...
}
with these two functions modified you should be able to receive the coordinates of all entities either in modelspace or paperspace coords.
torsten

hi torsten,
thank you for the code sample, i actually had figured it out during the weekend, the code, works perfectly for the paperspace layout, but in the model layout i still get components from the paperspace layout( stuff like the frame in drawings ), i cant seem to figure what i am doing wrong, to turn these off, did you run into a similar problem? if not can someone on the list advice me on how to work around it?
thank you
krishna
hi krishna,
since i am using the odvectorizeex example only for paperspace drawings, i didn't test it for modelspace drawings.
first i found a bug in my code: in exgssimpledevice.cpp, the function "void exsimpleview::update()" should check whether the drawing was saved in modelspace or not before calling "seteyetooutputtransform(..)".
if it is a modelspace drawing, you should use
seteyetooutputtransform( geteyetoworldtransform() );
otherwise the code i posted earlier in this thread shoud be used.
after i fixed this, i checked modelspace files, and everything is ok: no paperspace elements are read. i also checked the original example without any modifications, and the result is the same: only modelspace elements are read. maybe you did some changes to the code so that paperspace elements are always read?
torsten
hi torsten,
thank you for all the help, i have finally been able to figure out what was wrong.
here is what i was doing,
// create the vectorization context.
odgicontextfordbdatabaseptr pdwgcontext = odgicontextfordbdatabase::createobject();
// create the custom rendering device and set the output stream for the device.
odgsdeviceptr pdevice = exgssimpledevice::createobject( this );
// set the database to be vectorized.
pdwgcontext->setdatabase(m_poddb);
// obtain the layout dictionary
oddbdictionaryptr playoutdict = m_poddb->getlayoutdictionaryid().safeopenobject();
oddbdictionaryiteratorptr poveralliter = playoutdict->newiterator();
while (!poveralliter->done())
{
oddbobjectid layoutid = poveralliter->objectid();
oddblayoutptr playout = layoutid.safeopenobject();
// prepare the device to render the active layout in this database.
odgslayouthelperptr playouthelper = oddbgsmanager::setuplayoutviews( layoutid, pdevice, pdwgcontext );
// get the paper layout for overall view
odgspaperlayouthelperptr ppaperhelper = odgspaperlayouthelper::cast( playouthelper );
if( ppaperhelper.get() )
{
m_poveralview = ppaperhelper->overallview();
break;
}
// initiate vectorization.
playouthelper->update();
// end vectorization.
poveralliter->next();
}
i was trying to reuse the same "pdevice" for all the redraws for each layout and finally the model, this was apparently casuing problems, instead
i created a new pdevice for each layout/model and that seems to have fixed all my issues.
regards
krishna
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


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

高级搜索
显示模式

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

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

相似的主题
主题 主题发起者 论坛 回复 最后发表
【转帖】multiple odinitialize90 assert vers 1.10 yang686526 DirectDWG 0 2009-05-06 06:16 PM
【转帖】multiple assembly parts list, mil-std-100 then and now yang686526 American standards 0 2009-04-29 08:56 PM
【转帖】1 rfcecn, multiple revisions yang686526 American standards 0 2009-04-29 06:15 PM
【转帖】multiple file selection in macro yang686526 SolidWorks二次开发 0 2009-04-13 12:58 PM


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


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