使用VS2008 ARX2010創(chuàng)建簡單的自定義實(shí)體(六)
本教程將一步一步教你如何在CAD中創(chuàng)建一個(gè)自定義實(shí)體的程序。 設(shè)置捕捉點(diǎn)在subGetOsnapPoints(AcDb::OsnapMode osnapMode, int gsSelectionMar
本教程將一步一步教你如何在CAD中創(chuàng)建一個(gè)自定義實(shí)體的程序。
設(shè)置捕捉點(diǎn)
在subGetOsnapPoints(AcDb::OsnapMode osnapMode, int gsSelectionMark, const AcGePoint3d pickPoint, const AcGePoint3d lastPoint, const AcGeMatrix3d viewXform, AcGePoint3dArray snapPoints, AcDbIntArray geomIds)函數(shù)中增加以下代碼:
```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);
```
用戶自定義實(shí)體的變換
用戶自定義實(shí)體通過transformBy()方法來實(shí)現(xiàn)。打開Autodesk類瀏覽器,展開MyCustomEntity節(jié)點(diǎn),再展開Base Classes節(jié)點(diǎn)再展開AcDbEntity節(jié)點(diǎn)。滾動(dòng)列表選擇:Acad::ErrorStatus transformBy(const AcGeMatrix3d xform)。在該方法上右擊鼠標(biāo)選擇"Implement Base Class Method"。這個(gè)函數(shù)邏輯非常簡單,只需增加如下代碼:
```cpp
assertWriteEnabled();
m_(xform);
m_(xform);
m_(xform);
m_(xform);
```
這個(gè)函數(shù)實(shí)現(xiàn)了用戶自定義實(shí)體的變換。
至此,我們的這個(gè)自定義實(shí)體的功能已經(jīng)完善了,下一篇將會(huì)在ARX項(xiàng)目中創(chuàng)建這個(gè)自定義實(shí)體。