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

entity function "getosnappoints"
entity function "getosnappoints"
hi everyone...
i can't understand the behaviour of the "getosnappoints" function...
looking at the documentation i see that this function is defined almost for every oddbentity derived class, for example it is defined also for oddbblockreference class...
but if i try to import a block and try to get osnap points of this block reference, this function returns 0 snap points...
for an entity of tyle oddbline the snap points are returned correctly...
why ?
do i miss anything ???
thank you very muck,
carlo comino.
grippoints module (examples/grippoints) is responsible for grip and osnap points functionality.
it's only a sample illustrating how it can be implemented at client side.
it contains implementation for a few simple entities only.
ok, so this module is responsible of handling osnap points...
but when i create for example a line, i create an oddbline object...
how this module is responsible of handling this line osnap points ?
do i have to create a different entity type ??
i know this is a stupid question, but i can't understand how to use/modify this sample...
could you help me a bit ?
thank you very much !!!
below is implementation of oddbentity::getosnappoints(). it tries to get odgrippointspe protocol extension from the entity and calls it to do the job.
grippoints module being loaded adds impementation of grip and snap points functionality to some entities. try to search grippoints sources for oddbline for example to get the idea how it works.
code:
odresult oddbentity::getosnappoints(oddb:snapmode osnapmode,
int gsselectionmark,
const odgepoint3d& pickpoint,
const odgepoint3d& lastpoint,
const odgematrix3d& xworldtoeye,
odgepoint3darray& snappoints) const
{
oddbgrippointspeptr grips = oddbgrippointspe::cast( this );
if ( !grips.isnull() )
return grips->getosnappoints( this, osnapmode, gsselectionmark, pickpoint, lastpoint, xworldtoeye, snappoints );
return enotimplemented;
thank you very much!!!
as usual, you have been very useful!

quote:
originally posted by sslezkin
below is implementation of oddbentity::getosnappoints(). it tries to get odgrippointspe protocol extension from the entity and calls it to do the job.
grippoints module being loaded adds impementation of grip and snap points functionality to some entities. try to search grippoints sources for oddbline for example to get the idea how it works.
code:
odresult oddbentity::getosnappoints(oddb:snapmode osnapmode,
int gsselectionmark,
const odgepoint3d& pickpoint,
const odgepoint3d& lastpoint,
const odgematrix3d& xworldtoeye,
odgepoint3darray& snappoints) const
{
oddbgrippointspeptr grips = oddbgrippointspe::cast( this );
if ( !grips.isnull() )
return grips->getosnappoints( this, osnapmode, gsselectionmark, pickpoint, lastpoint, xworldtoeye, snappoints );
return enotimplemented;
}
hi again...
i tried to modify the grippoints dll, but now i face this problem:
i modifed the blockreference file to obtain blockreference grip points, but it doesn't work:
the function getosnappoints is never called, the oddbentitygrippointspe::getosnappoints is called instead...
this is the class declaration:
class oddbblockreferencegrippointspe : public oddbgrippointspe
{
public:
virtual odresult getgrippoints( const oddbentity* pentity, odgepoint3darray& grippoints ) const;
virtual odresult movegrippointsat( oddbentity* pentity, const odintarray& indices, const odgevector3d& offset );
virtual odresult getstretchpoints( const oddbentity* pentity, odgepoint3darray& stretchpoints ) const;
virtual odresult movestretchpointsat( oddbentity* pentity, const odintarray& indices, const odgevector3d& offset );
virtual odresult getosnappoints(
const oddbentity* pentity,
oddb:snapmode osnapmode,
int gsselectionmark,
const odgepoint3d& pickpoint,
const odgepoint3d& lastpoint,
const odgematrix3d& xworldtoeye,
odgepoint3darray& snappoints) const;
};
and the function definition:
odresult oddbblockreferencegrippointspe::getosnappoints(con st oddbentity* ent,
oddb:snapmode osnapmode,
int gsselectionmark,
const odgepoint3d& pickpoint,
const odgepoint3d& lastpoint,
const odgematrix3d& xworldtoeye,
odgepoint3darray& snappoints) const
{
oddbblockreferenceptr blockref = ent;
odgepoint3d position;
position = blockref->position();
switch ( osnapmode )
{
case oddb::kosmodeend:
break;
case oddb::kosmodemid:
break;
case oddb::kosmodeperp:
break;
case oddb::kosmodenear:
break;
case oddb::kosmodeins:
snappoints.append( position );
break;
}
return eok;
}
why this strange behaviour ???
in odamfcapp (osnapmanager.cpp) snapping is implemented in such manner that getosnappoints() functions are called not for block reference but for entities inside the block.
if the block contains only lines for example, you'll get into oddblinegrippointspe::getosnappoints() several times.
getting into oddbentitygrippointspe::getosnappoints means that block contains some entities without getosnappoints implemented.
btw, in autocad snapping works in similar manner - not to block reference insertion point but to the entities inside the block.
mmm, so if i have a 3d block made by many faces, and i want to snap olny to the block reference insertion point how (and above all where) can i modify my sources ?
thanks
code working with grip and snap points resides in application not in the library.
in our sample odamfcapp its osnapmanager.cpp
grip points are displayed for block reference entity and for snapping block entities are invoked to return snap points.
set a breakpoint in getosnappoints() and examine the stack.
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


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

高级搜索
显示模式

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

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

相似的主题
主题 主题发起者 论坛 回复 最后发表
【转帖】ambiguous call to overload functions in odstring.h yang686526 DirectDWG 0 2009-05-04 03:56 PM
【转帖】在vba里由基本三角函数导出的三角函数 yang686526 数据库ObjectDBX 0 2009-04-28 12:25 PM
【转帖】哪位高手指点一下下边lisp的怎么用 yang686526 数据库ObjectDBX 0 2009-04-28 12:13 PM
在vba里由基本三角函数导出的三角函数 yang686526 ObjectARX(AutoLISP) 0 2009-04-26 06:33 PM
哪位高手指点一下下边lisp的怎么用 yang686526 ObjectARX(AutoLISP) 0 2009-04-26 06:19 PM


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


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