2016 - 2024

感恩一路有你

使用VS2008 ARX2010创建简单的自定义实体(六)

浏览量:3636 时间:2024-03-09 16:55:45 作者:采采

本教程将一步一步教你如何在CAD中创建一个自定义实体的程序。

设置捕捉点

在subGetOsnapPoints(AcDb::OsnapMode osnapMode, int gsSelectionMark, const AcGePoint3d pickPoint, const AcGePoint3d lastPoint, const AcGeMatrix3d viewXform, AcGePoint3dArray snapPoints, AcDbIntArray geomIds)函数中增加以下代码:

```cpp

switch (osnapMode) {

case AcDb::kOsModeEnd:

(m_PtA);

(m_PtAB);

(m_PtB);

(m_PtBA);

break;

case AcDb::kOsModeMid:

(m_PtA ((m_PtAB - m_PtA).length()/2.0) * ((m_PtAB - m_PtA).normalize()));

(m_PtAB ((m_PtB - m_PtAB).length()/2.0) * ((m_PtB - m_PtAB).normalize()));

(m_PtB ((m_PtBA - m_PtB).length()/2.0) * ((m_PtBA - m_PtB).normalize()));

(m_PtBA ((m_PtA - m_PtBA).length()/2.0) * ((m_PtA - m_PtBA).normalize()));

break;

case AcDb::kOsModeCen:

(AcGePoint3d((m_PtB.x m_PtA.x)/2.0, (m_PtB.y m_PtA.y)/2.0, m_PtA.z));

break;

}

return (Acad::eOk);

```

用户自定义实体的变换

用户自定义实体通过transformBy()方法来实现。打开Autodesk类浏览器,展开MyCustomEntity节点,再展开Base Classes节点再展开AcDbEntity节点。滚动列表选择:Acad::ErrorStatus transformBy(const AcGeMatrix3d xform)。在该方法上右击鼠标选择"Implement Base Class Method"。这个函数逻辑非常简单,只需增加如下代码:

```cpp

assertWriteEnabled();

m_(xform);

m_(xform);

m_(xform);

m_(xform);

```

这个函数实现了用户自定义实体的变换。

至此,我们的这个自定义实体的功能已经完善了,下一篇将会在ARX项目中创建这个自定义实体。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。