CAD开发小结1

1. acutPrintf(_T("\nHello World!"));在命令行中输出Hello World!

一般使用acedGetXXX();来获得一个用户输入的值。

int nCountNode = 3;
int nReturn;
nReturn = acedGetInt(_T("请输入一个整数然后回车:"),&nCountNode);
if(nReturn == RTNORM)
{
    CString str;
    str.Format(_T("%d"),nCountNode);
    AfxMessageBox(_T("你输入了:") + str);
}
  
2. 向模型空间添加文字:
 CreateEnt.h 头文件中
#pragma once
class CCreateEnt:public AcDb
{
public:
 CCreateEnt();
 //单行文字
 static AcDbObjectId CreateText(const AcGePoint3d& ptInsert, const ACHAR* text   //ptInsert为文字的3维空间坐标点  text为显示的文本内容
  , AcDbObjectId style = AcDbObjectId::kNull, double height = 2.5, double rotation = 0);
 //多行文字
 static AcDbObjectId CreateMText(const AcGePoint3d& ptInsert, const ACHAR* text
  , AcDbObjectId style = AcDbObjectId::kNull, double height = 2.5, double width = 10);
 ~CCreateEnt();
 static AcDbObjectId PostToModelSpace(AcDbEntity *pEnt);  //投影至模型空间
};
CreateEnt.cpp

AcDbObjectId CCreateEnt::PostToModelSpace(AcDbEntity *pEnt)
{
 AcDbBlockTable *pBlockTable;
 acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable, AcDb::kForRead); //获取可读的块表对象

 AcDbBlockTableRecord *pBlockTableRecord;
 pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);  //获取模型空间中可写的块表记录

 AcDbObjectId entId;
 Acad::ErrorStatus es = pBlockTableRecord->appendAcDbEntity(entId, pEnt);  //将AcDb对象加入该块表记录中。并可显示出来

 pBlockTable->close();
 pBlockTableRecord->close();
 pEnt->close();

 return entId;
}

 

AcDbObjectId CCreateEnt::CreateText(const AcGePoint3d& ptInsert, const ACHAR* text
 , AcDbObjectId style, double height, double rotation)
{
 AcDbText *pText = new AcDbText(ptInsert, text, style, height, rotation);
 return PostToModelSpace(pText);
}
//多行文字
AcDbObjectId CCreateEnt::CreateMText(const AcGePoint3d& ptInsert, const ACHAR* text
 , AcDbObjectId style, double height, double width)
{
 AcDbMText *pMText = new AcDbMText();
 //设置多行文字的特性
 pMText->setTextStyle(style);
 pMText->setContents(text);
 pMText->setLocation(ptInsert);
 pMText->setTextHeight(height);
 pMText->setWidth(width);
 pMText->setAttachment(AcDbMText::kBottomLeft);
 return PostToModelSpace(pMText);
}

 
调用文件AcrxEntryPoint.cpp中
class CZrxTemplate1App::XXXXX
{
public:

 static void Demo_Test3(); //具体命令行函数,此处声明
private:
};
void CZrxTemplate1App::Demo_Test3() //具体命令行函数
{
 //创建单行文字
 AcGePoint3d ptInsert(0, 4, 0);
 CCreateEnt::CreateText(ptInsert, _T("abck中文"));
 //创建多行文字
 ptInsert.set(0, 0, 0);
 CCreateEnt::CreateMText(ptInsert, _T("http://www.weiqi9d.com"));
}

//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(CZrxTemplate1App)
ACED_ARXCOMMAND_ENTRY_AUTO(CZrxTemplate1App, Demo, _Test3, Test3, ACRX_CMD_MODAL, NULL)  //在此处注册命令

 
3. 
// 创建直线
AcDbObjectId CCreateEnt::CreateLine(AcGePoint3d ptStart,AcGePoint3d ptEnd)
{
    AcDbLine 
* pLine  =   new  AcDbLine(ptStart,ptEnd);
    
// 将实体添加到图形数据库
    AcDbObjectId lineId;
    lineId 
=  PostToModelSpace(pLine);
    
return  lineId;
}

// 创建圆
AcDbObjectId CCreateEnt::CreateCircle(AcGePoint3d ptCenter,AcGeVector3d vec, double  radius)
{
    AcDbCircle 
* pCircle  =   new  AcDbCircle(ptCenter,vec,radius);
    
// 将实体添加到图形数据库
    AcDbObjectId circleId;
    circleId 
=  PostToModelSpace(pCircle);
    
return  circleId;
}
 
4. 修改类modifyEnt
头文件中:
#pragma  once
#include 
" StdAfx.h "
class  CModifyEnt
{
public :
    CModifyEnt(
void );
    
~ CModifyEnt( void );
    
static  Acad::ErrorStatus ChangeColor(AcDbObjectId entId,Adesk::UInt16 colorIndex);
    
static  Acad::ErrorStatus ChangeLayer(AcDbObjectId entId,CString strLayerName);
};
.cpp文件:
#include  " StdAfx.h "
#include 
" ModifyEnt.h "
// 修改实体颜色
//在CCreateEnt中定义的图形,在CModifyEnt类中只能通过AcDbObjectId来识别并修改
Acad::ErrorStatus CModifyEnt::ChangeColor(AcDbObjectId entId,Adesk::UInt16 colorIndex) 
{
    AcDbEntity 
* pEntity;
    
// 打开图形数据库中的可写对象
    acdbOpenObject(pEntity,entId,AcDb::kForWrite);                 
    
// 修改实体的颜色
    pEntity -> setColorIndex(colorIndex);
    
// 用完之后,及时关闭
    pEntity -> close();
    
return  Acad::eOk;
}
// 改变实体所在层
Acad::ErrorStatus CModifyEnt::ChangeLayer(AcDbObjectId entId,CString strLayerName)
{
    AcDbEntity 
* pEntity;
    
// 打开图形数据库中的对象
    acdbOpenObject(pEntity,entId,AcDb::kForWrite);
    
// 修改实体的图层
    pEntity -> setLayer(strLayerName);
    
// 用完之后,及时关闭
    pEntity -> close();
    
return  Acad::eOk;
}
 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值