马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo)
5 y9 [# N2 U- i: B8 [' [{
0 j: |" m' r% F% [- V) e! S" |// 构建用于实现移动实体的矩阵& \0 V1 Z1 ]- O# x% \
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);5 L$ s; d5 f8 p# t/ C) h D
AcGeMatrix3d mat;0 ?: x7 } H9 O7 j: _2 h: N# u
mat.setToTranslation(vec);2 T/ ^1 ]( g$ d6 I
AcDbEntity *pEnt = NULL;& k& [% z2 @) `) X' f6 f; \6 X
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);3 y$ G5 D' K! Q" u. s
if (es != Acad::eOk)2 g" K/ M- d4 @: J$ C
return es;
/ q- a3 r" @8 n6 C% v1 _es = pEnt->transformBy(mat);
) U8 S# ^$ z, G* D* J, J. wpEnt->close();
3 j' Y8 e4 [* t' j) O+ Creturn es;
/ \$ i6 v7 @: W2 g/ e. K} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)
: R2 q, D: E" T8 y6 ~0 u j{
/ ?* ]% {8 ~8 |: dAcDbEntity *pEnt = NULL;
1 m! X/ [" Y6 P4 Jif (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk). ?1 g# M5 R* a! m# E) V# H* [
return FALSE;, h [/ x4 }. K7 @3 v ^- ]. s
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone()); f7 I( n* V7 j" K/ C% R+ b
AcDbObjectId copyEntId;
' u( v+ M7 q7 uif (pCopyEnt)
: a0 K* k" m3 ^) scopyEntId = PostToModelSpace(pCopyEnt);
& R8 y, P2 w, R, N% sMove(copyEntId, ptFrom, ptTo); return TRUE;; C& Q0 q! a+ q3 {) B% E v) V
} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)6 ~& G2 R/ w. a
{
3 \+ P3 W, ^5 Z1 W& P7 Z' m// 构建用于实现移动实体的矩阵! e/ u6 S# w+ p* ]9 J- t7 |- N: p" Y
AcGeMatrix3d mat;AcGeLine3d line;2 a2 A% ]' G/ h; v' C; ?. J2 ]" W
line.set(dp1,dp2);: X# n) b; a, ?5 `9 S& l
mat.setToMirroring(line);
' Q8 m5 T! O- X' d: }. rAcDbEntity *pEnt = NULL;8 y4 s, Q1 |+ y
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);; A. M1 w. H# u$ d4 r
if (es != Acad::eOk)
% T7 d* x; w' o. _( I4 M* ^return es;
" I3 X2 m! u& LAcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());1 d+ k7 t$ ^" \+ ~6 T
AcDbObjectId copyEntId; \8 T, e) e! b
if (pCopyEnt)
6 g* U) |1 [8 N1 G9 K7 zcopyEntId = PostToModelSpace(pCopyEnt);& I/ U ^9 ?$ [# W
es = pEnt->transformBy(mat);4 P P% [+ a5 w0 M! ^
pEnt->close();
! `' D6 \5 ^" r( M: \2 lreturn es;! {1 a0 j$ N' g
}! g) o: E& H; w7 s3 H
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)
& u8 f5 T) u6 x% u6 y{
9 v( w, j5 \' X- b( v5 iAcDbBlockTable *pBlockTable;) a l5 a5 u9 F% z# w1 F& V% C! B2 D0 Q
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);% `" s5 d8 `: i+ w! ^
AcDbBlockTableRecord *pBlockTableRecord;
1 k9 z4 ?2 k, ~% S: [4 w. HpBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
5 d3 j5 l& q% S9 Y# v6 U8 l" TAcDbObjectId entId;
" ]6 C4 [$ H/ f8 D6 @$ rpBlockTableRecord->appendAcDbEntity(entId, pEnt);
5 g1 G( V# _1 M; \pBlockTable->close();
5 r. f7 H& e$ rpBlockTableRecord->close();
E; R+ z# V3 ?9 w8 I6 @. hpEnt->close();
' D4 w2 m7 x' W3 jreturn entId; } 0 G; A6 z$ N$ x4 @) [
参考:http://www.colinchou.com/archives/245
& Q$ d- ` V4 Y( B% V, m; o0 i/ w( h/ }+ c. d
0 t8 V. d1 v8 T8 T. h! S& e: c' a! U
, s4 ~, M# Y2 F3 T6 z http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |