按表走呵呵!(延时死循环)

本文展示了一个使用C++编写的模拟时钟程序,该程序通过不断更新时针、分针和秒针的位置来模拟真实时钟的行为。利用AcDbDatabase获取对象ID,并通过AcGeMatrix3d进行旋转操作实现。

 

static void zffObjectARX_MyCommand6(void)
{

AcDbObjectId secondId;
AcDbObjectId minutId;
AcDbObjectId HourId;
AcDbEntity* pSecond=NULL;
AcDbEntity* pMinute=NULL;
AcDbEntity* pHour=NULL;
AcDbHandle haSecond(_T("209"));
AcDbHandle haMinut(_T("1FC"));
AcDbHandle haHour(_T("1FB"));
AcDbDatabase* pDb=acdbHostApplicationServices()->workingDatabase();
pDb->getAcDbObjectId(secondId,false,haSecond);
pDb->getAcDbObjectId(minutId,false,haMinut);
pDb->getAcDbObjectId(HourId,false,haHour);

double ang=pi()/30;
AcGeMatrix3d rotate,minut,hour;
rotate.setToRotation(-ang,AcGeVector3d::kZAxis,AcGePoint3d(100,100,0));
minut.setToRotation(-ang/60,AcGeVector3d::kZAxis,AcGePoint3d(100,100,0));
hour.setToRotation(-ang/720,AcGeVector3d::kZAxis,AcGePoint3d(100,100,0));
while (1)
{
clock_t start=clock();
clock_t time=CLOCKS_PER_SEC;
while (clock()-start<time)
;
acdbOpenObject(pSecond,secondId,AcDb::kForWrite);
acdbOpenObject(pMinute,minutId,AcDb::kForWrite);
acdbOpenObject(pHour,HourId,AcDb::kForWrite);
pSecond->transformBy(rotate);
pMinute->transformBy(minut);
pHour->transformBy(hour);
pSecond->close();
pMinute->close();
pHour->close();
pSecond=NULL;
pMinute=NULL;
pHour=NULL;
actrTransactionManager->queueForGraphicsFlush();
actrTransactionManager->flushGraphics();
acedUpdateDisplay();
}
}

转载于:https://www.cnblogs.com/NewAutoMan/p/6398407.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值