ObjectARX 2025(C++)创建块定义

最近更新于 2025-04-06 09:15

环境

AutoCAD 机械版 2025
ObjectARX 2025
VS 2022(ISO C++14)

环境配置参考:https://blog.iyatt.com/?p=16480

实现

CreateBlock.hpp

#pragma once
class CreateBlock
{
public:
    static void work();
};

CreateBlock.cp

#include "stdafx.h"
#include "CreateBlock.hpp"

void CreateBlock::work()
{
    // 获取数据库块表
    AcDbBlockTable* pBlockTable = nullptr;
    acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForWrite);

    // 创建新的块表记录
    AcDbBlockTableRecord* pBlockTableRecord = new AcDbBlockTableRecord();

    // 用户输入块名称
    AcString blockName;
    if (acedGetString(Adesk::kFalse, L"\n请输入图块名称", blockName) != RTNORM)
    {
        pBlockTable->close();
        delete pBlockTableRecord;
        return;
    }
    pBlockTableRecord->setName(blockName.kACharPtr());

    // 将块表记录添加到块表中
    pBlockTable->add(pBlockTableRecord);
    pBlockTable->close();

    // 向块记录中添加实体
    AcGePoint3d startPt1(-20, 0, 0), endPt1(20, 0, 0); // 第一条线
    AcDbLine* pLine1 = new AcDbLine(startPt1, endPt1);
    AcGePoint3d startPt2(0, -20, 0), endPt2(0, 20, 0); // 第二条线
    AcDbLine* pLine2 = new AcDbLine(startPt2, endPt2);
    AcDbCircle* pCircle = new AcDbCircle(AcGePoint3d::kOrigin, AcGeVector3d(0, 0, 1), 10); // 圆

    pBlockTableRecord->appendAcDbEntity(pLine1);
    pBlockTableRecord->appendAcDbEntity(pLine2);
    pBlockTableRecord->appendAcDbEntity(pCircle);

    pLine1->close();
    pLine2->close();
    pCircle->close();
    pBlockTableRecord->close();
}

在 acrxEntryPoint.cpp 中引用头文件,并在 On_kInitAppMsg 方法里调用
file

启动调试运行,设置块名称
file

Ctrl+F1打开设计中心,左侧点开,在里面就可以看到刚才创建的块”我的块“,可以点击拖动它到侧面的绘图区域
file

file

ObjectARX 2025(C++)创建块定义
Scroll to top

目录

打开目录