马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo) a( [- E) I1 Y) r+ k; M% F
{- @) l0 R2 }: g% m
// 构建用于实现移动实体的矩阵' b- T' R+ u; e0 i$ Z* G: R' v
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);
) X: Y4 T7 U6 j5 M7 VAcGeMatrix3d mat;/ d& N, k. i b' V, `
mat.setToTranslation(vec);
7 W0 i2 B' G- Y/ D2 d yAcDbEntity *pEnt = NULL;
" ]0 B Q! i* r# y1 r eAcad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
& N/ R& J+ c2 W: S9 _if (es != Acad::eOk)) Q- d' Z1 e$ V9 m! A% Z
return es;5 i8 a$ ^) @* {, V- C0 w5 ?6 V
es = pEnt->transformBy(mat);
! b; x. `6 T+ C8 RpEnt->close();* X3 ^- d* O7 w5 q7 {0 R1 ~0 \
return es;# L* z% [) g+ H1 _
} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)
7 F4 x/ W2 m* B8 D6 @4 }4 h{5 X- h. R9 o+ O& u* i2 N1 u
AcDbEntity *pEnt = NULL; t. I% g2 k6 ` b
if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)
% h0 ~; a/ z6 C2 T' b; {2 Greturn FALSE;7 ~ _6 K; y# D2 _. a8 y! k! d
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
: T1 o+ h7 `6 ]7 r/ S$ T2 Y0 l1 SAcDbObjectId copyEntId;8 _! o$ |' Q% t- t I' {4 |
if (pCopyEnt). r+ U! ]* M( M: U7 p& q
copyEntId = PostToModelSpace(pCopyEnt);
1 T: T6 u- N9 {) w2 o q7 O( ~" Q% {Move(copyEntId, ptFrom, ptTo); return TRUE;5 i; i1 ]% J1 C% }6 g1 v" W% n! o" L. [
} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)
1 H! y# n2 s+ x5 ]; z1 k# o{7 `' |) G* F5 F7 z+ E. D
// 构建用于实现移动实体的矩阵% ~' U0 s: i& H3 K
AcGeMatrix3d mat;AcGeLine3d line;
4 W" Z j. t6 Y$ s3 D" G" Rline.set(dp1,dp2);1 z. R( q( c) m& F
mat.setToMirroring(line);
$ N0 @8 H K1 `AcDbEntity *pEnt = NULL;, b& [$ U* P! g1 F% y( ?( D- A
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
: b6 ?& `. J3 S7 fif (es != Acad::eOk)
1 ]5 s: U X8 M1 D9 Ireturn es;
' z4 j o: N g. A" f. G' fAcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
9 ^% b3 l t( c' I2 }4 xAcDbObjectId copyEntId;7 u/ s0 H. D& g9 m7 }9 x' v
if (pCopyEnt)0 M/ o) q/ \! D; T6 X9 d
copyEntId = PostToModelSpace(pCopyEnt);
% t7 i' x0 q" I6 E3 n" ues = pEnt->transformBy(mat);
# x) E5 t2 t9 c7 D, M cpEnt->close();
5 g/ u6 j) F# yreturn es;
+ P- \7 O' |# B8 m) S- n}
t, A5 C: y* `static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)6 J* G& _$ L) K4 _. Z) V, O
{9 I0 G" D$ {0 ? j. X
AcDbBlockTable *pBlockTable;
! i0 e. K3 H0 x7 U/ Q" Z4 H% l- \acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
; D; B3 s" b, z7 c+ b( h; PAcDbBlockTableRecord *pBlockTableRecord;
7 u+ j5 w- `9 T3 j9 npBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
& T/ b1 `# q2 G* i9 g7 QAcDbObjectId entId;
+ z2 _3 Z8 _" V. \2 mpBlockTableRecord->appendAcDbEntity(entId, pEnt);
N; H& q; [1 B/ _pBlockTable->close();- R; w* f: j- ^
pBlockTableRecord->close();
! j/ T( w! C0 h9 F, ]1 i$ vpEnt->close();
6 X- a9 r8 f; g( k- Treturn entId; }
6 |' H/ Y+ Z& P, b; L参考:http://www.colinchou.com/archives/245
2 }# X* [9 Y- y, ^6 @7 h3 y+ v
6 }2 v x |7 d& N; J. ^/ k; h8 k" b$ S) l4 b2 B
4 b' m+ G6 C9 P0 @) A
1 o/ E$ [" o/ f! K; H4 x9 U ?
http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |