- 积分
- 1771
- 明经币
- 个
- 注册时间
- 2003-7-22
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|

楼主 |
发表于 2003-9-5 12:07:00
|
显示全部楼层
谢谢goldenshin,关于变量,我是乘以Scale变量的。
而对于第二点,不怕你笑话,我是不会ARX,但又要用,所以还每来得急从基本和系统学,而又是急用,即急待解决问题!
下面有一段代码,你看看,是为了解决“我要在load的时候读入一张图纸,而且要把这张图纸根据要求,以图纸中心(我可以计算出来)为基点把里头的所有东西(线条还有文字等,其实就是一个标准图框)都平移到指定点(x,y,z)。如何做?我还不会用transformby和旋转平移”的。
Acad::ErrorStatus moveEntries(double x,double y,double z)
{
AcGeVector3d transVec(-0.1, 0.1, 0.0);
transVec.set(x,y,z);
AcGeMatrix3d Mat;
Mat.setTranslation(transVec);
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);
Acad::ErrorStatus es=pNewDb->readDwgFile(DWGFILEDIRECTORY , _SH_DENYNO,false);
if (es!=Acad::eOk)
{
acutPrintf("\nThe file %s cannot be opend",DWGFILEDIRECTORY);
delete pNewDb;
return es;
}
AcDbDatabase *pDb;
pDb =acdbHostApplicationServices ()->workingDatabase () ;
pDb->insert(Mat, pNewDb ); //这句是做什么用的?
AcDbBlockTable *pBlkTbl;
pNewDb->getSymbolTable(pBlkTbl,AcDb::kForRead);
AcDbBlockTableRecord *pBlkTblRcd;
pBlkTbl->getAt(ACDB_MODEL_SPACE,pBlkTblRcd,AcDb::kForRead);
pBlkTbl->close;
//创建矢代器,用于遍历包含在块表记录中的实体
AcDbBlockTableRecordIterator *pBlkTblRceItr;
pBlkTblRcd->newIterator(pBlkTblRceItr);
AcDbEntity *pEnt;
//历包含在块表记录中的实体,把它们全部平移
AcGePoint3d ptMax,ptMin;
ptMax = pNewDb->extmax();
ptMin = pNewDb->extmin();
for(pBlkTblRceItr->start();!pBlkTblRceItr->done();pBlkTblRceItr->step())
{
pBlkTblRceItr->getEntity(pEnt,AcDb::kForRead);
pEnt->transformBy(Mat);//这里运行的时候提示:
//Unhandled exception at 0x77e4d756 in acad.exe: 0xE0000001: 0xe0000001.
pEnt->close;
}
pBlkTblRcd->close;
delete pBlkTblRceItr;
delete pDb;
delete pNewDb;
return es;
} |
|