ARX CAD HW10_2

7 篇文章 0 订阅
4 篇文章 0 订阅

用ObjectARX 编制圆弧编辑器程序:创建命令ArcEditor,执行该命令后提示“Select an ARC:”。 若用户选取一圆弧,则出现如下对话框并显示圆弧的初始参数。用户可在对话框中编辑圆弧实体参数,其中颜色用AutoCAD标准颜色对话框编辑,按确定按钮退出时应能根据用户输入的数据作图;如果用户选取其它类型实体则提示“not an ARC”。

需要设计的对话框如下:


实现的代码如下(Command.cpp):

//
// ObjectARX defined commands

#include "StdAfx.h"
#include "StdArx.h"
#include "ArcEditorDlg.h"
const double PI=3.14159265;//定义π常量
// This is command 'ARCEDITOR'
void xxxxArcEditor()
{
	// TODO: Implement the command
	AcGePoint3d pt;//用于SetCenter函数
	CArcEditorDlg dlg;
	AcDbEntity *pEnt;
	AcDbObjectId EntId;
	ads_name Ent;
	ads_point adspt;

	acedEntSel("\nSelect An Arc:",Ent,adspt);//选择单个圆弧实体
	acdbGetObjectId(EntId,Ent);//获取实体ID
	acdbOpenObject(pEnt,EntId,AcDb::kForWrite);//打开实体对象,获取实体指针
	if (strcmp(pEnt->isA()->name(),"AcDbArc")==0)
	{
		AcDbArc *pArc;
		pArc=(AcDbArc *)pEnt;
		dlg.m_ArcCenterX=pArc->center().x;//读取圆弧实体的X坐标
		dlg.m_ArcCenterY=pArc->center().y;//读取圆弧实体的Y坐标
		dlg.m_ArcRadius=pArc->radius();//读取圆弧实体的半径
		dlg.m_ArcStartAngle=(pArc->startAngle())*180.0/PI;//读取圆弧实体的起始角度
		dlg.m_ArcEndAngle=(pArc->endAngle())*180.0/PI;//读取圆弧实体的终止角度

		if (dlg.DoModal()==IDOK)//按下OK按钮后,对数据进行修改
		{
			pt.x=dlg.m_ArcCenterX;
			pt.y=dlg.m_ArcCenterY;
			pArc->setCenter(pt);//设置圆弧的圆心坐标
			pArc->setRadius(dlg.m_ArcRadius);//设置圆心半径
			pArc->setStartAngle((dlg.m_ArcStartAngle)*PI/180.0);//设置圆弧起始角度
			pArc->setEndAngle((dlg.m_ArcEndAngle)*PI/180.0);//设置圆弧终止角度
			pArc->setColorIndex(dlg.m_Color);//设置颜色
		}
	}
	else//如果选择的不是圆弧实体,给出提示
	{
		acutPrintf("\nnot an Arc!");
	}
	pEnt->close();//关闭指针
}
Dlg.cpp的实现代码如下:

// ArcEditorDlg.cpp : implementation file
//

#include "StdAfx.h"
#include "resource.h"
#include "ArcEditorDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CArcEditorDlg dialog


CArcEditorDlg::CArcEditorDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CArcEditorDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CArcEditorDlg)
	m_ArcCenterX = 0.0;
	m_ArcCenterY = 0.0;
	m_ArcEndAngle = 0.0;
	m_ArcRadius = 0.0;
	m_ArcStartAngle = 0.0;
	//}}AFX_DATA_INIT
}


void CArcEditorDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CArcEditorDlg)
	DDX_Text(pDX, IDC_ArcCenterX, m_ArcCenterX);
	DDX_Text(pDX, IDC_ArcCenterY, m_ArcCenterY);
	DDX_Text(pDX, IDC_ArcEndAngle, m_ArcEndAngle);
	DDX_Text(pDX, IDC_ArcRadius, m_ArcRadius);
	DDX_Text(pDX, IDC_ArcStartAngle, m_ArcStartAngle);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CArcEditorDlg, CDialog)
	//{{AFX_MSG_MAP(CArcEditorDlg)
	ON_BN_CLICKED(IDC_Color, OnColor)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CArcEditorDlg message handlers

void CArcEditorDlg::OnColor() 
{
	// TODO: Add your control notification handler code here
	acedSetColorDialog(m_Color,Adesk::kTrue,0);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值