本帖最后由 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);
}
|