找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 948|回复: 5

[求助]:getOsnapPoints() 怎么用啊?

[复制链接]
发表于 2005-9-5 14:01:14 | 显示全部楼层 |阅读模式

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

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

×
我想用这个函数来捕捉一个实体的端点,看了ARX的帮助,但是看不懂,不知道谁有这方面的例子啊?或者知道怎么用啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 21个

财富等级: 恭喜发财

发表于 2005-9-5 21:33:39 | 显示全部楼层
// 得到捕捉点
AcGePoint3dArray *mSX,*mXX;//自定义的线(点)
Acad::ErrorStatus
MYClass::getOsnapPoints(AcDb::OsnapMode osnapMode,
                                                        int gsSelectionMark,
                                                        const AcGePoint3d &pickPoint,
                                                        const AcGePoint3d &lastPoint,
                                                        const AcGeMatrix3d &viewXform,
                                                        AcGePoint3dArray &snapPoints,
                                                        AcDbIntArray &geomIds) const
{
        assertReadEnabled();
        Acad::ErrorStatus es = Acad::eOk;
        AcGePoint3d ap;
        KyPoint pt;
        snapPoints.setLogicalLength(0);
        switch(osnapMode) {
        case AcDb::kOsModeEnd:
        case AcDb::kOsModeNode:
                if(mSX)
                {
                        for(int i=0;i<mSX->length();i++)
                        {
                                pt=mSX->at(i);
                                snapPoints.append(pt);
                        }
                }

                if(mXX && mViewXX)
                {
                        for(int i=0;i<mXX->length();i++)
                        {
                                pt=mXX->at(i);
                                snapPoints.append(pt);
                        }
                }
                                case AcDb::kOsModeMid:
                if(mSX)
                {
                        for(int i=1;i<mSX->length();i++)
                        {
                                KyLine L(mSX->at(i-1),mSX->at(i));
                                ap=L.mid();
                                snapPoints.append(ap);
                        }
                }

                if(mXX && mViewXX)
                {
                        for(int i=1;i<mXX->length();i++)
                        {
                                KyLine L(mXX->at(i-1),mXX->at(i));
                                ap=L.mid();
                                snapPoints.append(ap);
                        }
                }
                break;
                case AcDb::kOsModePerp:
                if(mSX)
                {
                        KyPointArray *pl=mSX->per(lastPoint,pt);
                        if(pl)
                        {
                                for(int i=0;i<pl->length();i++)
                                {
                                        pt=pl->at(i);
                                        snapPoints.append(pt);
                                }
                        }
                }

                if(mXX && mViewXX)
                {
                        KyPointArray *pl=mXX->per(lastPoint,pt);
                        if(pl)
                        {
                                for(int i=0;i<pl->length();i++)
                                {
                                        pt=pl->at(i);
                                        snapPoints.append(pt);
                                }
                        }
                }
                break;
                case AcDb::kOsModeNear:
                if(mSX)
                {
                        KyPointArray *pl=mSX->per(pickPoint,pt);
                        if(pl)
                        {
                                for(int i=0;i<pl->length();i++)
                                {
                                        pt=pl->at(i);
                                        snapPoints.append(pt);
                                }
                        }
                }
                if(mXX && mViewXX)
                {
                        KyPointArray *pl=mXX->per(pickPoint,pt);
                        if(pl)
                        {
                                for(int i=0;i<pl->length();i++)
                                {
                                        pt=pl->at(i);
                                        snapPoints.append(pt);
                                }
                        }
                }
                break;
                                                        default:
                return es;
                break;
        }
        return es;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

发表于 2005-9-5 23:52:31 | 显示全部楼层
去看看我的自定义类吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-6 12:22:11 | 显示全部楼层
谢谢楼上两位大哥,但是如果不是自定义实体,而是一个经过布尔运算得到的实体,能不能用这个函数来捕捉端点呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-8 09:16:44 | 显示全部楼层
我也在搞这个 但是 if(mSX) 是什么意思呢?
还有 我直接用
case AcDb::kOsModeNode:
然后 找出实体上的一点 append()进去 能行吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-4-9 09:44:45 | 显示全部楼层
我也很想知道!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 08:18 , Processed in 0.222105 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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