ObjectARX 2025(C++)绘制填充 Hatch

最近更新于 2025-04-04 23:22

环境

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

环境配置参考:https://blog.iyatt.com/?p=16480
自定义类使用方法参考:https://blog.iyatt.com/?p=16635

实现

Hatch.hpp

#pragma once
class Hatch
{
public:
    static void init();
    static void unload();

private:
    static void drawHatch(AcDbHatch* pHatch);
    static void work();
};

Hatch.cpp

#include "stdafx.h"
#include "Hatch.hpp"

void Hatch::init()
{
    acedRegCmds->addCommand(L"TEST", L"TestHatch", L"TestHatch", ACRX_CMD_MODAL, Hatch::work);
}

void Hatch::unload()
{
    acedRegCmds->removeGroup(L"TEST");
}

void Hatch::drawHatch(AcDbHatch* pHatch)
{
    AcDbBlockTable* pBlockTable = nullptr;
    acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);
    AcDbBlockTableRecord* pBlockTableRecord = nullptr;
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
    pBlockTableRecord->appendAcDbEntity(pHatch);
    pBlockTableRecord->close();
    pBlockTable->close();
}

void Hatch::work()
{
    // 提示用户输入边界
    AcDbObjectIdArray objIds;
    ads_name ss;
    if (acedSSGet(nullptr, nullptr, nullptr, nullptr, ss) != RTNORM)
    {
        return;
    }

    Adesk::Int32 length;
    acedSSLength(ss, &length);
    for (Adesk::Int32 i = 0; i < length; ++i)
    {
        ads_name ent;
        acedSSName(ss, i, ent);
        AcDbObjectId objId;
        acdbGetObjectId(objId, ent);
        objIds.append(objId);
    }
    acedSSFree(ss);

    // 填充平面
    AcGeVector3d normal(0, 0, 1); // xy 平面
    AcDbHatch* pHatch = new AcDbHatch();
    pHatch->setNormal(normal);
    pHatch->setElevation(0); // xy平面上的高度,即 Z 轴

    // 填充与被填充区域保持关联
    pHatch->setAssociative(true);
    // 填充图案
    pHatch->setPattern(AcDbHatch::kPreDefined, L"SOLID");
    // 填充边界
    pHatch->appendLoop(AcDbHatch::kExternal, objIds);
    // 显示填充
    pHatch->evaluateHatch();

    // 添加到模型空间
    Hatch::drawHatch(pHatch);

    pHatch->close();
}

绘制一个封闭图形
file

执行 TESTHATCH 命令,然后框选绘制的封闭图形,回车执行填充
file

ObjectARX 2025(C++)绘制填充 Hatch
Scroll to top

目录

打开目录