谢谢DARCY 兄,谢谢大家~
问题搞定了。哈,用的就是setOblique,其实AcDbAlignedDimension或者AcDbRotateDimension都可以,不过AcDbAlignedDimension通用性强。测试代码如下

- [FONT=courier new]
- Acad::ErrorStatus es;
- AcGePoint3d spt(100,100,0);
- AcGePoint3d ept(200,100,0);
- AcDbBlockTable *pBlockTable;
- es = acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlockTable,AcDb::kForRead);
- if(es!=Acad::eOk)
- return ;
- AcDbBlockTableRecord *pBlockTableRecord;
- es=pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord,AcDb::kForWrite);
- if(es!=Acad::eOk)
- {
- pBlockTable->close();
- return;
- }
- pBlockTable->close();
-
- AcGePoint3d dimPt;
- double dimLen = 20;
- dimPt.set((spt.x+ept.x)/2,(spt.y+ept.y)/2,0);
- AcGeVector3d vec=ept-spt;
- vec.rotateBy(90*PI/180.0,AcGeVector3d(0,0,1));
- vec.normalize();
- dimPt+=vec*dimLen;
- //double angle = 30;
- int color = 1;
- CString dimText = "";
- AcDbObjectId dimStyleId = AcDbObjectId::kNull;
-
- AcDbAlignedDimension* pRotDim=NULL;
- pRotDim=new AcDbAlignedDimension;
- //pRotDim->setRotation(angle*PI/180.0);
- pRotDim->setXLine1Point(spt);
- pRotDim->setXLine2Point(ept);
- pRotDim->setDimLinePoint(dimPt);
- pRotDim->setColorIndex(color);
- pRotDim->setOblique(PI/4);
-
- if(dimText.Compare("") != 0)
- {
- if(strlen(dimText)>0)
- pRotDim->setDimensionText(dimText);
- }
- es=pRotDim->setDimensionStyle(dimStyleId);
- if(es!=Acad::eOk)
- {
- pBlockTableRecord->close();
- if(pRotDim)
- delete pRotDim;
- return ;
- }
-
- AcDbObjectId retId;
- es=pBlockTableRecord->appendAcDbEntity(retId,pRotDim);
- if(es!=Acad::eOk)
- {
- pBlockTableRecord->close();
- if(pRotDim)
- delete pRotDim;
- return ;
- }
-
- pBlockTableRecord->close();
- pRotDim->close();
- [/FONT]
|