用VS2008+ARX2010創建簡單的自定義實體(六)?

Tags: 程序, 實體,

本教程將會一步一步教你如何創建一個 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);

用VS2008+ARX2010創建簡單的自定義實體(六)

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);

這個函數實現用戶自定義實體的變換;

用VS2008+ARX2010創建簡單的自定義實體(六)

用VS2008+ARX2010創建簡單的自定義實體(六)

用VS2008+ARX2010創建簡單的自定義實體(六)

至此,我們的這個自定義實體的功能已經完善了,下一篇將會在ARX項目中創建這個自定義實體。

相關問題答案