马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo). ~: l T$ U2 u: Q9 w/ s
{
/ P: x% v' T) ?* ?! n// 构建用于实现移动实体的矩阵5 T8 [3 O4 Y8 b0 E3 C6 u3 F
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);
/ E8 F+ o' b6 x& QAcGeMatrix3d mat;2 Y; }+ R% ~! _' `, q$ Y- |
mat.setToTranslation(vec);
& n* O; X0 w$ ~5 \) T- e! ^ q6 bAcDbEntity *pEnt = NULL;
- l- v9 ^- S% V3 \; k* UAcad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);* o; ?% y1 O* V! C+ N& e- a7 z. n
if (es != Acad::eOk)" ~! D7 W& x% E2 o& a) k5 E2 @0 @
return es;; k$ a# Z# i$ n8 c; B% [* q
es = pEnt->transformBy(mat);
$ V( F5 _4 }, G: }) ]% u* ypEnt->close();( x8 _, P' O: Y, D# R0 m v
return es;
9 y0 h$ S' h( I* w7 D) S6 U# i} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)8 n6 q4 D9 N: h" g0 W
{
* @- Y/ ?; m' o5 vAcDbEntity *pEnt = NULL;% `0 m7 Q6 d2 m* R2 D$ W U
if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)
; F# m( w* L* C0 y: h0 Jreturn FALSE;. F* T- W2 X/ r9 Q8 P
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
. J1 w( F9 z+ r9 I N, gAcDbObjectId copyEntId;" N1 j' ~. ~' p7 @
if (pCopyEnt)# u% o% Q. W# \& W8 d% c+ n
copyEntId = PostToModelSpace(pCopyEnt);/ n( H6 D# A" F% D- [; d! Z- V9 _1 @
Move(copyEntId, ptFrom, ptTo); return TRUE;
W7 L% K2 F9 u' z: @. l; V+ l6 }} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)
1 P, @5 K2 s B$ j% w{
, I' z3 s, ?% }# x& F4 w' k// 构建用于实现移动实体的矩阵
/ q y- C+ _1 f7 H/ \# CAcGeMatrix3d mat;AcGeLine3d line;4 t5 R1 t& }4 \7 ?" k$ r
line.set(dp1,dp2);
. M1 x( E2 ^6 O* T" C4 G$ @' Kmat.setToMirroring(line);& M" G/ N1 M4 W6 @) s
AcDbEntity *pEnt = NULL;! F& o: T9 ~6 D4 D0 t
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
% d) S' ?* p( sif (es != Acad::eOk)2 `8 F- G2 a; k+ H3 s8 {
return es;+ k' u! X' \: J9 |2 h5 v
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
( X- Z m M; Q. r" rAcDbObjectId copyEntId;: C3 X1 e+ f2 m6 j+ X1 _/ a
if (pCopyEnt)
2 O+ b4 ^: N* H) T1 z$ }copyEntId = PostToModelSpace(pCopyEnt);
* {1 k8 e+ S$ e/ G3 W, nes = pEnt->transformBy(mat);% \/ C6 O- L- }* t: N a5 t
pEnt->close();
2 W, U4 l% v8 t" G( \( o# \return es;* K# j$ u$ l+ Q) R8 m0 P3 L
}
! h- k$ Q0 _4 o) D nstatic AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)! V, \8 O, d* ~1 B9 P) f
{' S4 g! P% F# p6 M: S& r6 D
AcDbBlockTable *pBlockTable;
# |: j E7 O" R8 b! P+ EacdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);+ @9 @- {( r7 B) N$ M( W
AcDbBlockTableRecord *pBlockTableRecord;
& A& e9 w+ @4 ]$ @; DpBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
0 h2 J( J6 V: w: X& c5 M( YAcDbObjectId entId;, X0 v+ w! A2 o7 \) x
pBlockTableRecord->appendAcDbEntity(entId, pEnt);
8 n, B. e* b4 z% p* o2 D) ApBlockTable->close();
; y2 |2 Q0 w8 B( Y; l3 vpBlockTableRecord->close();8 b. @7 j9 [) o
pEnt->close();4 w1 \6 t+ ^, W1 P: @1 |
return entId; }
4 z) {/ o( i4 |0 C3 H参考:http://www.colinchou.com/archives/245
0 `0 L3 d7 ~4 j! h: o! j
4 z+ O/ S7 s- u. j% ?% _5 I
* O& P! M: o- Z* z' q& ~, S3 X: G5 f
; G; V7 x: Q$ K) W4 P4 w) d$ n+ Z! K
http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |