ObjectARX_AutoCAD创建矩形功能实现

创建矩形主要用到AcDbPolyline类,实现方法是通过点选对角点。

void CreateRectangle()//创建矩形命令
{
	ads_point startpoint;
	int nReturn;
	acedInitGet(NULL, _T("R"));
	nReturn = acedGetPoint(NULL, _RXST("指定起点:"), startpoint);
	if (nReturn == RTNORM)
	{
		ads_point endpoint;
		nReturn = acedGetPoint(startpoint, _RXST("\n指定对角点:"), endpoint);
		//根据对角点找出四个角的顶点
		ads_real x1 = startpoint[X];
		ads_real x2 = endpoint[X];
		ads_real y1 = startpoint[Y];
		ads_real y2 = endpoint[Y];

		AcGePoint2d ptLeftBottom(min(x1, x2), min(y1, y2));
		AcGePoint2d ptRightBottom(max(x1, x2), min(y1, y2));
		AcGePoint2d ptRightTop(max(x1, x2), max(y1, y2));
		AcGePoint2d ptLeftTop(min(x1, x2), max(y1, y2));

		AcGePoint2dArray points;
		points.append(ptLeftBottom);
		points.append(ptRightBottom);
		points.append(ptRightTop);
		points.append(ptLeftTop);

		int numVerts = points.length();
		AcDbPolyline *pPline = new AcDbPolyline(numVerts);
		for (int i = 0; i < points.length(); i++)
		{
			pPline->addVertexAt(i, points.at(i));
		}
		pPline->setClosed(true);
		HysuEditor::PostToModelSpace(pPline);
		acutPrintf(_RXST("\n创建矩形完成."));
	}
	else 
    {
		acutPrintf(_RXST("\n获取点失败."));
        acutPrintf(_RXST("\n创建矩形失败."));
    }
}
AcDbObjectId HysuEditor::PostToModelSpace(AcDbEntity *pEnt, AcDbDatabase *pDb)
{
	AcDbBlockTable *pBlkTbl = NULL;
	Acad::ErrorStatus es;
	es = pDb->getBlockTable(pBlkTbl, AcDb::kForRead);
	if (es != Acad::eOk)
	{
		acutPrintf(_T("\n块表打开失败,错误代码:%s"), acadErrorStatusText(es));
		return AcDbObjectId::kNull;
	}
	AcDbBlockTableRecord *pBlkTblRcd = NULL;
	es = pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForWrite);
	if (es != Acad::eOk)
	{
		acutPrintf(_T("\n模型空间块表记录打开失败,错误代码:%s"), acadErrorStatusText(es));
		pBlkTbl->close();
		return AcDbObjectId::kNull;
	}
	pBlkTbl->close();
	AcDbObjectId outId;
	es = pBlkTblRcd->appendAcDbEntity(outId, pEnt);
	if (es != Acad::eOk)
	{
		acutPrintf(_T("\n无法添加实体到模型空间,错误代码:%s"), acadErrorStatusText(es));
		pBlkTblRcd->close();
		return AcDbObjectId::kNull;
	}
	pEnt->close();
	pBlkTblRcd->close();
	return outId;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值