CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

ObjectARX 开发指南

创建自动CAD命令

2022-12-31 09:03| 发布者: admin| 查看: 267| 评论: 0|来自: AutoCAD

ObjectARX 应用程序通常定义一个或多个命令,用户可以从 AutoCAD 命令提示符调用这些命令。对于工具应用程序,只需一个命令即可创建工具目录、工具选项板和工具。此命令仅在首次加载应用程序时使用一次。命令成功创建工具组件后,AutoCAD 会将其信息与 ObjectARX 模块的路径一起保存到 ATC 文件中。此后,工具选项板框架在初始化“工具选项板”窗口时加载应用程序。工具和选项板将成为“工具选项板”窗口默认配置的一部分,直到它们被移除。

对于此项目,您将创建一个名为 CREATESIMPLE 的新 AutoCAD 命令。可以通过单击 ObjectARX 向导的“ObjectARX 命令”按钮,然后从 ARX 命令列表网格的右键单击菜单中选择“新建”来定义此命令。或者,如果未使用 ObjectARX 向导,则可以按照ObjectARX 应用程序基础知识中所述创建已注册的命令。

使用 AcadToolImpl 创建工具实例

  1. 创建一个名为 CREATESIMPLE 的新 AutoCAD 命令。如果使用 ObjectARX 向导启动项目,请使用其工具栏创建此命令。否则,请使用标准 ObjectARX 过程来定义和注册 AutoCAD 命令。
  2. 在 CREATESIMPLE 命令处理程序中提供以下代码,以便为常用工具、工具选项板和命令工具创建 ATC 内容:
    CComObject<CSimpleTool> tool;
    // Don't redefine the stock tool if it's already in the catalog
    if (AcTcGetManager()->FindStockTool(tool.GetObjectCLSID()) !=
            NULL)
    return;
    AcTcCatalog* pCatalog =
        tool.CreateStockToolATC(_T(“SimpleCatalog”));
    AcTcPalette* pPalette = tool.CreatePaletteATC(pCatalog,
        _T(“SimplePalette”));
    tool.CreateCommandToolATC(pPalette, “Line”, “IDB_TOOL1”,
        “_LINE “);
  3. 在调用以创建工具和工具选项板 ATC 内容之后,添加以下调用以刷新“工具选项板”窗口的显示:
    AcTcGetManager()->LoadCatalogs(); // Refresh the palette in
                                      // AutoCAD.
  4. 确保SimpleTool.h文件包含在定义命令处理程序的文件中。
  5. 重新生成应用程序。
  6. 在 AutoCAD 中测试 CREATESIMPLE 命令并检查新工具选项板。

现在,您有一个工作工具选项板,其中包含启动 LINE 命令的单个工具。若要添加更多工具,只需对以下任一方法进行其他调用:

  • CreateToolATC()
  • CreateCommandToolATC()
  • CreateFlyoutToolATC()

要使用,您必须已创建形状目录。您可以通过致电来执行此操作。有关使用这些函数的信息,请参阅添加浮出控件部分。CreateFlyoutToolATC()CreateShapeCatalogATC()

该函数提供了一个可选参数,允许您通过提供图像文件名来覆盖库存工具的默认图标图像设置。函数的可选参数允许您覆盖工具的默认名称。CreateToolATC()szToolImageOverrideCreateFlyoutToolATC()szToolNameOverride

由于此示例应用程序未使用 COM 对象的属性,因此不会遇到未初始化变量的问题。但是,大多数工具选项板应用程序创建依赖于自定义数据的工具。要初始化包含自定义工具数据的成员变量,您的 coclass 需要覆盖该方法。您应该在方法中而不是在 coclass 构造函数中进行初始化,因为构造函数仅用于创建常用工具。AcadToolImpl::New() New()

重写 New() 方法

  1. SimpleTool.h文件中,在 coclass 声明的公共部分中声明一个标准重写:New()
    STDMETHOD(New)()
    {
    }
  2. 实现此方法,为属性成员变量添加初始化。此项目的方法在类声明中内联定义,如下所示:New()
    STDMETHOD(New)()
    {
        tcscpy(m_tcCmdName, _T("_LINE"));
        // Add other property variable initializations here...
        return S_OK;
    }
  3. 在实现 CREATESIMPLE AutoCAD 命令时,请在创建目录、选项板和工具 ATC 条目之前调用新工具。New()

下面的清单显示了完成的命令处理程序代码:

CComObject<CSimpleTool> tool;
// Don't redefine the stock tool if it's already in the catalog
if (AcTcGetManager()->FindStockTool(tool.GetObjectCLSID()) !=
        NULL)
return;
if (SUCCEEDED(tool.New())) {
    AcTcCatalog* pCatalog =         tool.CreateStockToolATC(_T(“SimpleCatalog”));     AcTcPalette* pPalette = tool.CreatePaletteATC(pCatalog,         _T(“SimplePalette”));     tool.CreateCommandToolATC(pPalette, “Line”, “IDB_TOOL1”,         “_LINE “);     AcTcGetManager()->LoadCatalogs(); // Refresh the palette in                                       // AutoCAD
}

通过调用,可以将工具的属性设置为其默认值。然后,您可以在创建工具之前将部分或全部属性重置为专用值。New()


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 13:54

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部