马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo)
* Q0 r2 l' v5 a% o$ C{8 p, _8 j4 h0 c/ Y) x" a: K
// 构建用于实现移动实体的矩阵! R- a. y# @! L1 b* p0 S- t
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);4 W2 X5 D) c! M- @* s+ X: n: e/ @
AcGeMatrix3d mat;; ]) g7 R; B" O0 `. S4 k' H7 o1 d( s
mat.setToTranslation(vec);
6 O- O2 T& I& F" d0 J l; uAcDbEntity *pEnt = NULL;
. l3 L% @" m3 L' U' _+ @Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
1 X3 d) E4 ?5 T- O4 Z3 ~if (es != Acad::eOk)
8 x. i; I1 i: h5 b) ]6 @1 e1 L `return es;; a* H' F! z7 y' h% ]6 ]) C3 c
es = pEnt->transformBy(mat);
* J; \. x! }8 L ApEnt->close();
0 }1 ^# E$ t& a. j) E8 ^return es;8 S/ P0 r u5 g F4 Q9 |
} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)
$ M k y2 O3 L# o+ u. ^{) _) x5 f' _5 f! |0 K' ~: v; x0 H
AcDbEntity *pEnt = NULL;
: q4 B2 W' o8 w0 a4 q5 {1 U) v: |if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)
4 d8 U5 j; O7 Xreturn FALSE;
1 v+ _. E' H' q- g/ H( h) A. ~4 ?' hAcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());; z, i) R% L! v _
AcDbObjectId copyEntId;0 a8 k: a0 C6 Y- Q* f: [
if (pCopyEnt)
$ u8 F+ w( |' E5 hcopyEntId = PostToModelSpace(pCopyEnt);
" |2 z5 m% H, x' }, D" `1 Q% F0 `# yMove(copyEntId, ptFrom, ptTo); return TRUE;
' o. Z0 D J8 o+ c" x# J: p} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)
/ \0 i' @. |+ d1 q7 e. q5 Y$ Q8 L" k+ b{
" Z: B' Y3 E- G# J* S// 构建用于实现移动实体的矩阵 e; x% _9 @" E% j& z( w
AcGeMatrix3d mat;AcGeLine3d line;. u; `5 C( o7 z6 p' o. A6 @/ o
line.set(dp1,dp2);
4 D, u5 [# F0 n$ i# }mat.setToMirroring(line);/ [8 t4 L9 z& P% `2 j' }- o# ]
AcDbEntity *pEnt = NULL;5 u. r- Z% S$ F% w% O
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);3 o! {2 J4 K5 s4 V, L* N
if (es != Acad::eOk)- A4 v3 G( X$ W5 V b' {: B- L- R+ f
return es;! C! m7 V. Y* B2 l
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());* _3 r+ l- f) i; Q; Q
AcDbObjectId copyEntId;' n2 T+ r2 ~4 P. Q) ]
if (pCopyEnt)
1 h; G. M8 J# V5 a% \copyEntId = PostToModelSpace(pCopyEnt);
2 a; m8 q) I8 S* H8 v' o* }es = pEnt->transformBy(mat);
. X& c: m9 f5 u7 _. @' bpEnt->close();! J1 V2 N5 M/ F0 X V
return es;8 |! [# [0 J8 L7 A) U# h( F
}* d" n4 c3 i4 f0 K
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)! {& c( H9 S- g5 K
{
6 j7 b: b. |, }( J- o* DAcDbBlockTable *pBlockTable;2 b6 r0 ^! t- m5 l, y& S' U
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
( f9 c6 ] s- r% \- A N' FAcDbBlockTableRecord *pBlockTableRecord;3 N3 S( A1 j. D1 d8 `7 c/ b4 k- K4 a- C
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);9 C4 S& [% M9 y- d) P. [
AcDbObjectId entId;( Q/ ~% J, b4 i% I8 `; {% w3 b
pBlockTableRecord->appendAcDbEntity(entId, pEnt);
* w4 m# j. e6 v( T! ppBlockTable->close();7 F/ W8 O* ~# M9 a$ k& E3 z d$ K
pBlockTableRecord->close();. |/ f5 a0 g; z1 z
pEnt->close();
, z9 h. Y- f( o% O) h/ J- `return entId; }
3 G/ s2 A7 w3 n" t" u6 `参考:http://www.colinchou.com/archives/245
1 [1 o, s- A5 G |; {3 u! [! i
5 a7 G c# Z& F! ?( r/ U3 I8 [1 {( s* K/ a9 v2 M* a y- n6 C6 c/ o
. H9 A* q, B1 A" W# n
7 A- v \0 ~1 G http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |