- UID
- 157352
- 积分
- 8
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2004-7-14
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我是这样实现的,但是没法动态显示(即无法随鼠标动作有预览效果)。。。
int lgt_InsertBlock(char blockname[23],double x,double y,double xscale,double yscale,double ang)
{
Acad::ErrorStatus ret;
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()->getBlockTable(pBlockTable,
AcDb::kForRead);
AcDbObjectId blockId;
ret=pBlockTable->getAt(blockname,blockId, AcDb::kForWrite);
if (ret!=Acad::eOk)
{
ads_printf("\n块%s不存在",blockname);
pBlockTable->close();
return 0;
}
pBlockTable->close();
AcGePoint3d insPt(x,y,0); //块插入点 AcDbBlockReference *pBlockRef =
new AcDbBlockReference(insPt,blockId);
AcGeScale3d scale3d(xscale,yscale,1); //设定插入比例
pBlockRef->setScaleFactors(scale3d);
pBlockRef->setRotation(ang*PI/180.0); // 设定转角
AcDbObjectId blockrefId;
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
ret=pBlockTableRecord->appendAcDbEntity(blockrefId,pBlockRef);
if (ret!=Acad::eOk) {
ads_printf("\n函数appendAcDbEntity blockref失败");
pBlockTableRecord->close();
delete pBlockRef;
return 0;
}
pBlockTableRecord->close();
pBlockRef->close();
return 1;
}
为了连续,再如此做:
void Asdkaddblock()
{
// TODO: Implement the command
char blockname[23];
int es;
es=acedGetString(0,"\输入要插入的块名:", blockname);
switch(es)
{
case RTNONE:
return;
case RTCAN:
return;
case RTERROR:
return;
case RTNORM:
while(1)
{double x,y,xscale=1.0,yscale=1.0,ang=0.0;
ads_point pt;
if(acedGetPoint(NULL,"插入基点:",pt)!=RTNORM)
return;
x=pt[0];
y=pt[1];
if(lgt_InsertFileBlock(blockname,x,y,xscale,yscale,ang)!=1)
return;
}
break;
}
}
能够不停的插入,直到点击右键。
问题在于不能即时动态预览出块的模样, 想请教各位大侠ARX是如何实现这样的一个功能?
先谢过 ~~ ^_^ |
|