找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 846|回复: 5

[求助]:求助一fence问题.

[复制链接]
发表于 2004-11-10 10:08:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我从一shape或linestring元素中取出顶点pointLine生成fence,然后mdlClip_isElemInside判断cell是否在fence 内。代码如下:if(type==4)
        {
                pointLine[numVerts]=pointLine[0];
                numVerts=numVerts+1;
                if(mdlShape_create(&elmUnion,NULL,pointLine,numVerts,0)!=SUCCESS)
                {
                        mdlDialog_openInfoBox("can't creat view_shape");
                        return result;
                }
        }
        else
        {
                if(mdlShape_create(&elmUnion,NULL,pointLine,numVerts,0)!=SUCCESS)
                {
                        mdlDialog_openInfoBox("can't creat view_shape");
                        return result;
                }       
        }
        mdlFence_clear(TRUE);  
        mdlFence_fromShape(&elmUnion);
        mdlElement_add(&elmUnion);                       
        mdlClip_getFence(&clipP);       
       
        mdlScan_initialize(0,&mScanList);
        do
        {
                mScanWords=sizeof(mRetPos)/sizeof(UShort);
                mStatus=mdlScan_file(mRetPos,&mScanWords,sizeof(mRetPos),&mNextFilePos);
                mElmNum=mScanWords/sizeof(UShort);               
                for(i=0;i<mElmNum;i++)
                {
                        if(mdlElmdscr_read(&elmDP,mRetPos,0,0,NULL)==0)return result;
                        if(mdlClip_isElemInside(&isOverlap,elmDP,clipP,tcb->lstvw,TRUE));                                                        
                        {
                                                                result=result+1;
                                               
                                                        }   }       
        }while(mStatus==BUFF_FULL);       
        mdlClip_free((void *)clipP);
        mdlFence_clear(TRUE);
程序将fence范围外的元素也判断在fence中了,好象fence没有发生。请问这是怎么回事?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-11-10 11:19:57 | 显示全部楼层
mdlClip_isElemInside函数的说明中有如下解释:
Note that "inside" can be relative, as the clipping descriptor may represent a fence void and, in this case, the clipping region would actually be the area outside the fence, rather than inside.
意思是:这个“Inside(在内部)”是相对的,因为切割描述符可能表示的是一个Fence Void(选篱笆外),在这种情况下,切割区域实际上是篱笆外而不是篱笆内。
不知你建立这个切割描述符时的篱笆状态如何?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-10 12:05:17 | 显示全部楼层
正解!!!
请问怎么得到和设置切割描述符时的篱笆状态呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-10 12:56:30 | 显示全部楼层
tcb->ext_locks.fenceVoid=0;
  tcb->fbfdcn.fenceclip=0;
  tcb->fbfdcn.overlap=1;
组合使用3个状态
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-10 15:18:42 | 显示全部楼层
shengl:你是在V8下编程吗?如果是的话,可直接用mdlClip_fromElement直接从Shape获得ClipDescriptor,就不需要麻烦地从Fence绕一圈了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-11-10 15:19:16 | 显示全部楼层
mdlParams_setLock (0, ACTIVELOCK_FENCECLIP);
mdlParams_setLock (1, ACTIVELOCK_FENCEOVERLAP);
mdlParams_setLock (0, ACTIVELOCK_FENCEVOID);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-10-16 00:04 , Processed in 0.389831 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表