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

提示:代码在博客(1)ObjectARX2015 + vs2012创建直线 的基础上扩展

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

为了更好的维护和扩展代码, 博客(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) //画直线

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值