最近更新于 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 方法里调用
启动调试运行,设置块名称
按Ctrl
+F1
打开设计中心,左侧点开块,在里面就可以看到刚才创建的块”我的块“,可以点击拖动它到侧面的绘图区域
ObjectARX 2025(C++)创建块定义