添加自定义工具
您可以通过添加具有自定义行为的专用工具来使方法和自定义属性正常工作。在上一过程中,您创建了一个用于启动 LINE 命令的命令工具。以下过程说明如何添加使用 ObjectARX 功能创建线条的工具。它还使用工具的属性来定义线的端点。New()
添加此工具的基本步骤包括
- 定义新属性以包含终结点数据
- 实现函数以定义工具的行为AcadToolImpl::executeCallback()
- 修改 CREATESIMPLE 命令以创建新工具 UI。
添加新属性
- 使用 Visual Studio 的 ATL 向导,添加一个名为“支持 和 函数”的新属性。DOUBLEStartX
getput
- 在 SimpleTool.h 中,向 coclass 添加一个公共数据成员以表示新属性:CSimpleTool
double m_StartX;
- 如果 ATL 向导尚未这样做,请向 coclass 添加 and public 方法声明:getput
STDMETHOD(get_StartX)(/*out, retval*/ DOUBLE* pVal);
STDMETHOD(put_StartX)(/*in*/ DOUBLE newVal);
- 在SimpleTool.cpp中,为您的财产实施和方法,如下所示:getput
STDMETHODIMP CSimpleTool:get_StartX(DOUBLE* pVal)
{
(*pVal) = m_StartX;
return S_OK;
}
STDMETHODIMP CSimpleTool:put_StartX(DOUBLE newVal)
{
m_StartX = newVal;
return S_OK;
}
- 对以下每个属性重复步骤 1 到 4,并注意根据需要修改新的成员变量名称和/方法名称:getput
StartY
StartZ
EndX
EndY
EndZ
现在,新属性可用,您可以使用相应的成员变量来实现行创建例程。
覆盖 executeCallback() 函数
- 在SimpleTool.cpp中,添加一个空实现:executeCallback()
STDMETHODIMP CSimpleTool::executeCallback()
{
}
- 在语句上方,添加使用工具的起始点和终结点属性值创建实例的代码:returnAcGePoint3d
AcGePoint3d ptStart(m_StartX, m_StartY, m_StartZ);
AcGePoint3d ptEnd(m_EndX, m_EndY, m_EndZ);
- 使用 和 变量,构造一个新对象:ptStartptEndAcDbLine
AcDbLine* pLine = new AcDbLine(ptStart, ptEnd);
- 添加用于创建新的数据库驻留实体的代码:pLineAcDbLine
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId lineId;
pBlockTableRecord->appendAcDbEntity(lineId, pLine);
pBlockTableRecord->close();
pLine->close();
- 返回一个指示成功的值:
return S_OK;
- 重新生成应用程序。
这是完成的函数:executeCallback()
STDMETHODIMP CSimpleTool::executeCallback()
{
AcGePoint3d ptStart(m_StartX, m_StartY, m_StartZ);
AcGePoint3d ptEnd(m_EndX, m_EndY, m_EndZ);
AcDbLine* pLine = new AcDbLine(ptStart, ptEnd);
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,
AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId lineId;
pBlockTableRecord->appendAcDbEntity(lineId, pLine);
pBlockTableRecord->close();
pLine->close();
return S_OK;
}
若要将功能链接到工具,请在 CREATESIMPLE 命令中调用该方法。executeCallback()CreateToolATC()
- 在 SimpleTool 项目中,转到 CREATESIMPLE AutoCAD 命令的命令处理程序。
- 在函数调用后立即将以下行添加到命令实现中:CreateCommandToolATC()
tool.CreateToolATC(pPalette);
- 重新生成应用程序并在新的 AutoCAD 实例中对其进行测试。
当新工具出现在“工具选项板”窗口中时,右键单击它并选择“属性”。请注意,将显示新添加的起点和终结点属性。如果在此 UI 中修改其值,则该工具在构造下一行时将使用修改后的值。
|