天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 73|回复: 0

ObjectARX2015 + vs2012扩展绘制直线的功能为绘制实体

[复制链接]

该用户从未签到

主题

0

回帖

2912

积分

管理员

积分
2912
发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
[code]为了更好的维护和扩展代码, 博客(1)中的类CCreateLine修改为CCreateEnt,类CModifyLine修改为CModifyEnt,类的功能扩展为创建和修改实体,而不单单是对直线的操作。

(1) 类CCreateEnt

//CreateEnt.h

#pragma once
#include "StdAfx.h"

class CCreateEnt
{
public:
    CCreateEnt(void);
    ~CCreateEnt(void);

    static AcDbObjectId CreateLine(AcGePoint3d ptStart, AcGePoint3d ptEnd);        //函数声明
    static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt);
};
//CreateEnt.cpp

#include "stdafx.h"
#include "CreateEnt.h"


CCreateEnt::CCreateEnt(void)
{
}


CCreateEnt::~CCreateEnt(void)
{
}

//创建直线
AcDbObjectId CCreateEnt::CreateLine(AcGePoint3d ptStart, AcGePoint3d ptEnd)                //函数实现
{
    AcDbLine *pLine = new AcDbLine(ptStart, ptEnd);

    //将实体添加到图形数据库
    AcDbObjectId lineId;
    lineId = CCreateEnt::PostToModelSpace(pLine);

    return lineId;
}


// 将实体添加到图形数据库的模型空间
AcDbObjectId CCreateEnt::PostToModelSpace(AcDbEntity* pEnt)
{
       
        // 获得指向块表的指针
         AcDbBlockTable *pBlockTable;
         acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead);

        // 获得指向特定的块表记录(模型空间)的指针
         AcDbBlockTableRecord *pBlockTableRecord;
         pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);

        // 将AcDbLine类的对象添加到块表记录中
        AcDbObjectId entId;
        pBlockTableRecord->appendAcDbEntity(entId, pEnt);
       
        // 关闭图形数据库的各种对象
        pBlockTable->close();
        pBlockTableRecord->close();
        pEnt->close();
        return entId;
}

(2) 类CModifyEnt

//ModifyEnt.h

#pragma once
#include "StdAfx.h"

class CModifyEnt
{
public:
    CModifyEnt(void);
    ~CModifyEnt(void);

    Acad::ErrorStatus ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex);
};
//ModifyEnt.cpp

#include "stdafx.h"
#include "ModifyEnt.h"


CModifyEnt::CModifyEnt(void)
{
}


CModifyEnt::~CModifyEnt(void)
{
}

//改变颜色的直线       
Acad::ErrorStatus CModifyEnt::ChangeColor(AcDbObjectId entId, Adesk::UInt16 colorIndex)
{
    AcDbEntity *pEntity;
    // 打开图形数据库中的对象
    acdbOpenObject(pEntity, entId, AcDb::kForWrite);
    // 修改实体的颜色
    pEntity->setColorIndex(colorIndex);
    // 用完之后,及时关闭
    pEntity->close();
    return Acad::eOk;
}

(3) acrxEntryPoint.cpp

    //当前项目中注册一个命令 AddLine
    static void MidasMyGroupMyChangeColor()
    {
        AcGePoint3d ptStart(0, 0, 0);
        AcGePoint3d ptEnd(10, 10, 0);
        AcDbObjectId lineId;
        lineId = CCreateEnt::CreateLine(ptStart, ptEnd);
        CModifyEnt m_modifyEnt;
        m_modifyEnt.ChangeColor(lineId, 1);
    }
ACED_ARXCOMMAND_ENTRY_AUTO(CArxConfigApp, MidasMyGroup, MyChangeColor, MyChangeColor, ACRX_CMD_MODAL, NULL) //画直线

原文链接:https://blog.csdn.net/qq_42981953/article/details/121793694[/code]

 

 

 

 

ObjectARX2015 + vs2012扩展绘制直线的功能为绘制实体
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

GMT+8, 2024-11-1 11:32 , Processed in 0.152478 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表