本教程將會一步一步教你如何創建一個 CAD 自定義實體的程序。
方法/步驟
OSNAP Points 設置捕捉點
subGetOsnapPoints (AcDb::OsnapMode osnapMode,
int gsSelectionMark,const AcGePoint3d &pickPoint,
const AcGePoint3d &lastPoint,const AcGeMatrix3d &viewXform,
AcGePoint3dArray &snapPoints,AcDbIntArray &geomIds)
中增加如下代碼。
switch (osnapMode) {
case AcDb::kOsModeEnd:
snapPoints.append(m_PtA);
snapPoints.append(m_PtAB);
snapPoints.append(m_PtB);
snapPoints.append(m_PtBA);
break;
case AcDb::kOsModeMid:
snapPoints.append(m_PtA+((m_PtAB-m_PtA).length()/2.0)*((m_PtAB-m_PtA).normalize()));
snapPoints.append(m_PtAB+((m_PtB-m_PtAB).length()/2.0)*((m_PtB-m_PtAB).normalize()));
snapPoints.append(m_PtB+((m_PtBA-m_PtB).length()/2.0)*((m_PtBA-m_PtB).normalize()));
snapPoints.append(m_PtBA+((m_PtA-m_PtBA).length()/2.0)*((m_PtA-m_PtBA).normalize()));
break;
case AcDb::kOsModeCen:
snapPoints.append(AcGePoint3d((m_PtB.x+m_PtA.x)/2.0,(m_PtB.y+m_PtA.y)/2.0, m_PtA.z));
break;
}
return (Acad::eOk);
TRANSFORMATION
用戶自定義實體通過transformBy()方法來實現;
打開Autodesk類瀏覽器,展開MyCustomEntity節點,展開 Base Classes節點再展開AcDbEntity節點;
滾動列表選擇:
Acad::ErrorStatus transformBy(const AcGeMatrix3d &);
在該方法上右擊鼠標選擇"Implement Base Class Method";
這個函數邏輯非常簡單,只需增加如下代碼:
assertWriteEnabled();
m_PtA.transformBy(xform);
m_PtAB.transformBy(xform);
m_PtB.transformBy(xform);
m_PtBA.transformBy(xform);
這個函數實現用戶自定義實體的變換;
至此,我們的這個自定義實體的功能已經完善了,下一篇將會在ARX項目中創建這個自定義實體。