找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2444|回复: 6

[求助] 【已解决】哭了,自定义实体要如何响应subGetOsnapPoints函数?

[复制链接]

已领礼包: 6个

财富等级: 恭喜发财

发表于 2018-8-24 16:28:33 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 b27117 于 2018-8-24 20:38 编辑

我在自定义实体里重写了这个函数,就是捕捉点函数,然后根本响应不进来,在使用CAD面板上的画直线的时候,也捕捉不到我自己的自定义实体,是我哪里忽略了什么了吗?早上到现在折腾好多个小时了,实在没办法。。。。求助大佬
唉,以亲身经历告诫各位吃瓜群众,代码习惯很重要
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 28个

财富等级: 恭喜发财

发表于 2018-8-24 16:47:59 来自手机 | 显示全部楼层
大佬啊大佬,我还不会写自定义实体呢。
来自: 微社区
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-8-24 17:07:24 | 显示全部楼层
把你怎么写的,代码尽量全的贴上来吧,程序员不是靠说的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2018-8-24 19:28:17 | 显示全部楼层
本帖最后由 b27117 于 2018-8-24 19:56 编辑

下面是自定义实体的头文件;


[C++] 纯文本查看 复制代码
class  YFMicroMark :public AcDbEntity
{
public:
        enum YF_MARK_TYPE
        {
                YF_MT_HOOK,                //打勾
                YF_MT_CROSS,        //打叉
                YF_MT_QUESTION, //打问号
        };
        ACRX_DECLARE_MEMBERS(YFMicroMark);
        YFMicroMark(void);
        YFMicroMark(AcGePoint3d insertPoint,YF_MARK_TYPE eMarkType=YF_MT_HOOK);
        ~YFMicroMark(void);

        void SetMarkType(YF_MARK_TYPE eMarkType);
        void SetMarkColorIndex(Adesk::UInt16 color);
        void EnableTransform(bool bCanTransform);
        void SetHeight(double height);
protected:
        virtual Acad::ErrorStatus dwgInFields(AcDbDwgFiler* pFiler);

        virtual Acad::ErrorStatus dwgOutFields(AcDbDwgFiler* pFiler) const;

        virtual Adesk::Boolean subWorldDraw(AcGiWorldDraw* mode);

         virtual Acad::ErrorStatus subTransformBy(const AcGeMatrix3d& xform);

        virtual Acad::ErrorStatus setColorIndex(Adesk::UInt16 color, Adesk::Boolean doSubents=true);
         virtual Acad::ErrorStatus subGetGripPoints(AcGePoint3dArray& gripPoints,AcDbIntArray&  osnapModes,AcDbIntArray&  geomIds) const;//实体选中时,哪些点作为夹点高亮显示
        virtual Acad::ErrorStatus subGetOsnapPoints(AcDb::OsnapMode osnapMode, Adesk::GsMarker gsSelectionMark, const AcGePoint3d& pickPoint,//实体被捕捉点
                const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray & geomIds);

private:
        void DrawHook(AcGiWorldDraw *mode)const;
        void DrawCross(AcGiWorldDraw *mode)const;
        void DrawQuetion(AcGiWorldDraw *mode)const;

        AcGePoint2d ToPoint2d(const AcGePoint3d& point)const;
        void Init();

        void InitHook();
        void InitCross();
        void InitQuestion();
private:
        Adesk::Int32 m_nMarkType;
        Adesk::Int32 m_nVertsCount;
        std::vector<AcGePoint3d>m_verts;
        Adesk::UInt16 m_markColorIndex;        //标记的颜色
        double m_height;                                //标记的高度
        bool m_bCanTransform;                        //标记是否可以旋转
        bool m_bFirstCreate;

protected:
        static Adesk::UInt32 kCurrentVersionNumber;
};

然后是cpp中的subGetOsnapPoints的实现,问题就是,在使用CAD的面板命令,画直线或者多段线之类的实体,开了所有的对象捕捉,都没有响应到这个subGetOsnapPoints这个函数,而夹点或者其他的显示,都是正常的
[Actionscript3] 纯文本查看 复制代码
 Acad::ErrorStatus YFMicroMark::subGetOsnapPoints(AcDb::OsnapMode osnapMode, Adesk::GsMarker gsSelectionMark, const AcGePoint3d& pickPoint, const AcGePoint3d& lastPoint, const AcGeMatrix3d& viewXform, AcGePoint3dArray& snapPoints, AcDbIntArray & geomIds)
 {         assertReadEnabled();
         for (int i=0;i<m_verts.size();++i)
         {
                 snapPoints.append(m_verts.at(i));
         }
          printf("我捕捉呢?");
         return AcDbEntity::subGetOsnapPoints(osnapMode,gsSelectionMark,pickPoint,lastPoint,viewXform,snapPoints,geomIds);
 }


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2018-8-24 19:30:01 | 显示全部楼层
marting 发表于 2018-8-24 17:07
把你怎么写的,代码尽量全的贴上来吧,程序员不是靠说的。

代码在楼上,大佬有空可以看一下,很疑惑,为什么没有响应这个,是还需要重写其他的函数吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

 楼主| 发表于 2018-8-24 20:24:14 | 显示全部楼层
唉,感谢观看与回答,在函数后面我少写了一个const,我应该直接查文档,完全对照形式,或者养成虚函数重写就加override的习惯的!!!!吸取教训!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-8-18 09:00:33 | 显示全部楼层
分享一下个人经验,如果是arx2012版本,则是由于向导生成的捕捉点函数模板有问题,具体请看E大博客:
-------"使用ObjectARX 2012向导生成的自定义实体类无法捕捉的问题解决方式"---------
(本人没有权限发表网页链接,后来人直接搜标题文字吧)
  感谢E大!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 03:28 , Processed in 0.331264 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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