(11)ObjectARX2015 + vs2012创建填充

   提示:看之前的博客(1)和(4),那里已经分析了创建一个图形对象的基本过程,在之前的基础上本节开始就要将着眼点放在创建实体的参数上。

(1)ObjectARX2015 + vs2012创建直线_qq_42981953的博客-CSDN博客

(4)ObjectARX2015 + vs2012扩展绘制直线的功能为绘制实体_qq_42981953的博客-CSDN博客

1. 说明

        本篇介绍: 提示用户选择所要填充的对象,然后根据用户选择的结果为该区域创建图案填充。
2. 思路
        AcDbHatch 类代表 AutoCAD 中的填充对象,该类的构造函数仅创建一个空的填充对象,要想创建填充对象,必须按照下面的步骤进行:
  
        (1 )创建一个空的填充对象。
        (2)指定填充对象所在的平面。
        (3)设置填充对象的关联性;
        (4)指定填充图案;
        (5)添加填充边界;
        (6)显示填充对象;
        (7)将其添加到模型空间;
        (8)如果是关联性的填充,将填充对象与边界绑定。
3. 步骤
(1) 在CreateEnts类中,添加一个 CreateHatch 函数,用于根据一组首尾连接的对象创建填充。该函数的输入参数为组成填充边界的对象 ID 数组、填充图案的名称和填充的关联性.
//创建填充
    AcDbObjectId CreateHatch(AcDbObjectIdArray objIds, const TCHAR* patName, bool bAssociative);//创建填充
//创建填充
//在 ObjectARX 使用 appendLoop 函数来向填充对象添加边界,该函数定义为:
/*
Acad::ErrorStatus appendLoop(              
    Adesk::Int32 loopType,                 //第一个参数指定了边界类型;
    const AcDbObjectIdArray& dbObjIds);    //第二个参数输入一组实体的 ID,用来定义填充边界。
*/
AcDbObjectId CCreateEnt::CreateHatch(AcDbObjectIdArray objIds, const TCHAR* patName, bool bAssociative) 
{ 
    Acad::ErrorStatus es; 
    AcDbHatch *pHatch = new AcDbHatch(); 

    // 设置填充平面
    AcGeVector3d normal(0, 0, 1); 
    pHatch->setNormal(normal);
    pHatch->setElevation(0); 
    // 设置关联性
    pHatch->setAssociative(bAssociative); 
    // 设置填充图案
    pHatch->setPattern(AcDbHatch::kPreDefined, patName); 

    // 添加填充边界
    es = pHatch->appendLoop(AcDbHatch::kExternal, objIds); 
    // 显示填充对象
    es = pHatch->evaluateHatch(); 
    // 添加到模型空间
    AcDbObjectId hatchId; 
    hatchId = CCreateEnt::PostToModelSpace(pHatch); 
    // 如果是关联性的填充,将填充对象与边界绑定,以便使其能获得边界对象修改的通知
    if (bAssociative) 
    { 
        AcDbEntity *pEnt; 
        for (int i = 0; i < objIds.length(); i++) 
        { 
            es = acdbOpenAcDbEntity(pEnt, objIds[i], 
                AcDb::kForWrite); 
            if (es == Acad::eOk) 
            { 
                // 添加一个永久反应器
                pEnt->addPersistentReactor(hatchId); 
                pEnt->close(); 
            } 
        } 
    } 

    return hatchId; 
}

(2) 在acrxEntryPoint.cpp中

ACED_ARXCOMMAND_ENTRY_AUTO(CArxConfigApp, MidasMyGroup, MyDrawHatch, MyDrawHatch, ACRX_CMD_MODAL, NULL) //画填充
//当前项目中注册一个命令 AddHatch
    static void MidasMyGroupMyDrawHatch() 
    {
        // 提示用户选择填充边界
        ads_name ss; 
        int rt = acedSSGet(NULL, NULL, NULL, NULL, ss); 
        AcDbObjectIdArray objIds; 

        // 初始化填充边界的ID数组
        if (rt == RTNORM) 
        { 
            long length; 
            acedSSLength(ss, &length); 
            for (int i = 0; i < length; i++) 
            { 
                ads_name ent; 
                acedSSName(ss, i, ent); 
                AcDbObjectId objId; 
                acdbGetObjectId(objId, ent); 

                objIds.append(objId); 
            } 
        } 
        acedSSFree(ss); // 释放选择集

        CCreateEnt m_createEnt;
        m_createEnt.CreateHatch(objIds, _T("SOLID"), true);
    }

效果展示

(1) 画一个三角形

(2) 输入命令: MyDrawHatch

(3) 回车键后选择线段

(4) 回车键

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),AutoCAD_填充图案_钢筋砼(2),

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值