马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo)
4 V* b& \7 ~# ^4 h{
" |8 T0 L& ?9 l$ y" E6 G// 构建用于实现移动实体的矩阵2 K7 B" X& l5 t/ e+ d( [! I7 ?
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);
- T/ P/ M0 A' t6 O. H; g( xAcGeMatrix3d mat;& ~% B$ p8 g4 Z
mat.setToTranslation(vec);* O9 B7 w/ I' s2 L' h
AcDbEntity *pEnt = NULL;
7 u$ A% u) a4 h: \) K" KAcad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);, d- r, i* e& k
if (es != Acad::eOk)( f9 h+ o2 k9 ]9 A
return es;
4 r9 y. r! E: C, S" w, b, ces = pEnt->transformBy(mat);
- ^8 m9 s! x6 a6 E& DpEnt->close();: I( d5 [* u2 K8 c
return es;, C2 K" M2 c& i6 P" }
} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)
1 o' s% a% v. a7 `6 N{, f, b6 z/ B* Z5 _
AcDbEntity *pEnt = NULL;- V5 W) Y( ~2 X! X9 t( }" S
if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)
5 B& D2 ]1 M' creturn FALSE;* Z3 q, [, s7 G3 ]& R( ^
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
2 c. O# H3 y3 T( `4 `AcDbObjectId copyEntId;6 f0 n/ d9 x( b2 D% h
if (pCopyEnt)
' I C1 H a# e2 h% G- BcopyEntId = PostToModelSpace(pCopyEnt);" [4 X& O/ g. Y+ n3 x7 [5 A
Move(copyEntId, ptFrom, ptTo); return TRUE;
( @" Q5 I1 S X+ e} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)
) w' o3 B" e, F4 u) M{% @: M& |, ~9 T. ^" @: ~% Y, [
// 构建用于实现移动实体的矩阵
8 H: t6 y: C. Q& {9 B& \; l. i* aAcGeMatrix3d mat;AcGeLine3d line;3 V# D% z+ s* i- I' A. G. D* V
line.set(dp1,dp2);
( g; l; V0 L- y z1 G8 hmat.setToMirroring(line);
3 f# h; E/ g% }9 i- f7 FAcDbEntity *pEnt = NULL;+ b5 l: {* f6 r1 W
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);% A$ j4 {: t3 f7 y8 E$ d
if (es != Acad::eOk)
1 n& B+ S3 a0 Q8 x' creturn es;7 \ K0 L1 B* f
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
3 e, `% ?1 y, n3 R/ a) x$ mAcDbObjectId copyEntId;
1 a6 F) Z( A- S& C# ^if (pCopyEnt)
, Y% B% u* t) XcopyEntId = PostToModelSpace(pCopyEnt);( x7 q$ V1 t( @, d! }8 A/ T
es = pEnt->transformBy(mat);1 e3 M' i# ?, ^. _/ ~5 C1 X7 t% S
pEnt->close();
& O4 @5 v; e1 j# Y9 ^: C! Ereturn es;
2 \$ |; o: N/ A% N}
. H* q6 f5 U& e4 h/ c! `0 Zstatic AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)
! ~+ B7 `) x. _5 U; U( z{
" H# n/ u' s! y" z5 T4 wAcDbBlockTable *pBlockTable;; k. J2 {* I- X% T' w$ _6 }
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead); g8 ^% f: g( X. b) |
AcDbBlockTableRecord *pBlockTableRecord;$ A* y- o2 g4 b/ R
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
; t1 e1 t. ~# H- o6 {( PAcDbObjectId entId;) \& L p- c4 D2 j# U: ^
pBlockTableRecord->appendAcDbEntity(entId, pEnt);
; @! @: c9 r, A$ UpBlockTable->close();
' v: f; O3 Q9 y9 DpBlockTableRecord->close();' {5 Q1 a. ?; K9 b# E% h0 N- `
pEnt->close();
$ k' \& V! v# G/ ^$ m- hreturn entId; } $ I# K- Q& t% _" ~2 W: O, r
参考:http://www.colinchou.com/archives/2454 d* q8 P* B5 y
* x0 h. i9 l4 @
0 d4 B% X9 A( T* ^3 G2 ~, Y6 `& V2 T4 L/ C1 }! E8 V
: }% i% J$ C' b- {/ I8 p http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |