AcGeMatrix3d有几种方法:
移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo)
{$ c2 z g( h' B+ n
// 构建用于实现移动实体的矩阵
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]); t2 } b+ q5 Z& m2 ~/ F K
AcGeMatrix3d mat;
mat.setToTranslation(vec);
AcDbEntity *pEnt = NULL;, @' n+ g6 J I* l% u$ [
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
if (es != Acad::eOk); [1 }0 I0 X" M% o2 P
return es;( m2 _' e% Y$ h9 c% A
es = pEnt->transformBy(mat);
pEnt->close();
return es;
}
BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)
{
AcDbEntity *pEnt = NULL;( p& y; }6 _/ I/ z- n+ x: l
if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)
return FALSE;0 s1 {. u h3 [' c; A
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
AcDbObjectId copyEntId;! \; `! r$ D' g$ D9 g
if (pCopyEnt)" [ s4 X$ \: D: A. `; f
copyEntId = PostToModelSpace(pCopyEnt);% J2 H6 R; J) _( U: f f/ g
Move(copyEntId, ptFrom, ptTo);
return TRUE;2 ^0 |' w. G. _, C) r+ }6 h: h) a6 P5 K
}
Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)
{
// 构建用于实现移动实体的矩阵$ y" w L) r/ p( n9 j
AcGeMatrix3d mat;AcGeLine3d line;
line.set(dp1,dp2);' n( o- Z( H2 Z" V% m1 D) O8 n
mat.setToMirroring(line);
AcDbEntity *pEnt = NULL;3 |9 n0 _3 E& A- i, p
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
if (es != Acad::eOk) F% F. g" i8 S4 e' [! V% J
return es;
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());1 W+ j y7 y2 J, s8 T1 C
AcDbObjectId copyEntId;
if (pCopyEnt); [ j( W3 K& Q1 U# i
copyEntId = PostToModelSpace(pCopyEnt);
es = pEnt->transformBy(mat);
pEnt->close();
return es;
}- Q# n5 @+ L" S, n( j+ X6 [
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)
{1 P% q1 Y/ X$ J# w9 F
AcDbBlockTable *pBlockTable;& G% S! P7 D( e6 X4 [& p5 a
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);7 H: X- C% l3 O1 f: k! v
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
AcDbObjectId entId;
pBlockTableRecord->appendAcDbEntity(entId, pEnt);
pBlockTable->close();
pBlockTableRecord->close();# n' i8 ~6 P, l1 V+ x
pEnt->close();3 ]! X4 e+ u5 _
return entId;
}
| 欢迎光临 三维网 (https://www.3dportal.cn/discuz/) | Powered by Discuz! X3.4 |