马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo)
5 ^6 B. }) b: P* M{1 q8 r% p: U- O2 M( E j
// 构建用于实现移动实体的矩阵. K' P' p4 E3 V3 b* r
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);
% J) ]# d$ N4 V. d( X+ XAcGeMatrix3d mat;( @8 Y2 |* {8 n6 h' e
mat.setToTranslation(vec);- ]* b j$ w+ ^7 A e9 s
AcDbEntity *pEnt = NULL;' t' K/ a- z; V3 i8 @
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
A4 ?- D# J/ d6 @8 R7 zif (es != Acad::eOk)
! p" `( T! t, m% ~' Y: lreturn es;4 u/ y% k6 q Q! R8 k8 [
es = pEnt->transformBy(mat);5 R1 M \( }5 z* `3 i
pEnt->close();3 u. {* w" Y/ ^8 H1 t9 U- P" R8 w
return es;- j3 z6 L, ^4 y- ?% I, t' | A
} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo). f5 T/ m) s- v! |( A* c3 K! L, C2 L
{
( x1 v+ d6 O2 n( xAcDbEntity *pEnt = NULL;4 K: q4 T) ]" D2 |
if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)9 z7 Y: R/ k. D* C
return FALSE;
2 R7 N% ~4 o" E7 o7 }AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());& A: X9 D7 Q' v/ L
AcDbObjectId copyEntId;, m* a3 y) [5 w: c! E7 L
if (pCopyEnt)0 f9 c o9 q# Q! h8 n; L
copyEntId = PostToModelSpace(pCopyEnt);2 L- {* p4 X5 ~; ?; K/ L; l* w! B/ m
Move(copyEntId, ptFrom, ptTo); return TRUE;
" h% e/ d1 c, |2 x} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)% Y* T) l1 B6 l" T; g5 B
{/ ]1 L5 n) A! y: g
// 构建用于实现移动实体的矩阵$ ^6 U; C5 {" e; z& J ^4 }0 S
AcGeMatrix3d mat;AcGeLine3d line;
' M3 C) Y+ l' @6 T- k7 tline.set(dp1,dp2);: H. |, u! D7 x. R8 X1 P# i
mat.setToMirroring(line);( G8 Q- Q5 t. O8 j% k4 x: L7 ~
AcDbEntity *pEnt = NULL;' |' m( S8 m6 G
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);' ^2 Q; H, `3 }* h/ Q0 Z* l
if (es != Acad::eOk)
; s4 Z) l. p1 ]7 W6 ^3 Ireturn es;! F/ c0 f0 V) C# G- T/ K6 E
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
( o5 d; _! |. L' |1 lAcDbObjectId copyEntId;
n8 |) ?% ~* }6 I+ f+ iif (pCopyEnt)4 M0 b- `) W4 l# ?; ]3 d( W7 T5 F
copyEntId = PostToModelSpace(pCopyEnt);+ e4 |- H! F$ E4 u
es = pEnt->transformBy(mat);2 V% p, o! u m M. k' W
pEnt->close();& I) u. a; h& c
return es;' ]6 d5 a$ s2 h* o5 B0 v5 U
}
/ v/ q# P8 L. B8 c. Q+ g1 pstatic AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)4 e$ ~ G1 D# A" x
{4 x& t& X7 A' h
AcDbBlockTable *pBlockTable;
6 {. p* T) y: B# [acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);) \. J/ M2 _3 ^3 Q9 k* m- x
AcDbBlockTableRecord *pBlockTableRecord;
) k. q2 _- Q; ~3 BpBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
$ Z( Z$ Q/ v# x% e7 ~* C: {; jAcDbObjectId entId;
0 O0 K0 H' {/ npBlockTableRecord->appendAcDbEntity(entId, pEnt);; p ` X4 A* e. U7 y
pBlockTable->close();
+ w5 _ w' K( [, E& Y! ]pBlockTableRecord->close();
1 _5 _: t% ~% a* b8 ?pEnt->close();8 G2 y: q( q5 j9 a4 F
return entId; } + a- f8 s7 O, D+ ?7 }
参考:http://www.colinchou.com/archives/245
5 H w- s+ _0 K/ U+ m" I. m {
. v/ }! a8 V! b) p5 g! ?7 Y) P) `5 k9 t$ ^8 }# d" J) b
2 u+ Q0 i* `0 s/ w8 L0 ]8 i- d
( v: a: I. R! V2 R- X http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |