马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo)
6 z2 L s/ @4 ^! o$ J2 o{; c E3 o6 O. M. p# ?
// 构建用于实现移动实体的矩阵( V9 q3 N. Z! e
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);5 e9 C( ^8 j' h$ Q9 O6 o& E
AcGeMatrix3d mat;
& M9 Y Z. G+ @) k: }7 Mmat.setToTranslation(vec);, B7 h' _8 D3 M' h' Y$ ]
AcDbEntity *pEnt = NULL;" S+ W: V9 {0 `; F: W; r' t7 l
Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);
! ~6 \8 T1 P" P+ a6 Lif (es != Acad::eOk)
8 e( X$ F, p& S, k2 greturn es;7 S0 C% p: j, B/ U; K1 P: H' t
es = pEnt->transformBy(mat);3 ?; ^0 Y1 F+ z) ]+ P* w4 b
pEnt->close();' g0 O: b$ p; z6 i
return es;7 s7 {1 @3 _+ c- K1 f
} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)1 b/ v9 C# W/ Z" i( h' X$ G9 S
{1 J0 ~" c0 S4 F6 \- o
AcDbEntity *pEnt = NULL;9 h- L) t# c F( H! u
if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)% }: i6 E9 p- Z4 d
return FALSE;+ i% O& O# y+ t
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
2 I; \ v" C5 wAcDbObjectId copyEntId;% P* ?/ w g/ `; M- O F8 a
if (pCopyEnt), N ~6 f' t; x
copyEntId = PostToModelSpace(pCopyEnt);
/ R9 z6 |9 i( [' F. DMove(copyEntId, ptFrom, ptTo); return TRUE;& I# W( b- Q0 T9 J
} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)
4 d: d! p% e! ?{: _) ?, t. l( W a
// 构建用于实现移动实体的矩阵% g: w- v# ~0 ~4 Q- i- J! s
AcGeMatrix3d mat;AcGeLine3d line;
* D9 x: M7 B- \& D5 m# G, K8 wline.set(dp1,dp2);
( Z" l' p; [9 T6 cmat.setToMirroring(line);, E; q" ~$ V* N
AcDbEntity *pEnt = NULL;
! L: W6 j; B# n3 {8 F h3 H7 ?Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);7 C6 e7 D9 d( Z9 G; ]0 m9 V1 v! v8 n
if (es != Acad::eOk)
% P7 ^ k m& y6 Zreturn es;! o! }. d2 W3 {0 K$ g8 C9 l; d4 {( _
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());* |+ O, s1 }- o
AcDbObjectId copyEntId;: R, j+ F% y! y; t; J* p8 J
if (pCopyEnt)
' C! F* G5 j0 n0 q' n4 T6 @, GcopyEntId = PostToModelSpace(pCopyEnt);$ `( p1 N7 ^3 V( B4 Z
es = pEnt->transformBy(mat);3 W6 a' q' ]- x1 C
pEnt->close();, O; e `/ \, b% @
return es;
) t0 X5 a( Y9 m' @: f}# D! W5 }* y# K* Q, l/ u
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)3 Z4 C# C) P! c- U) U
{: _9 _/ d6 Q% b
AcDbBlockTable *pBlockTable;
& p3 p* X9 S _3 iacdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
" ]# D, W! x! n% u& t5 T# j& \AcDbBlockTableRecord *pBlockTableRecord;
- ~, r; t, e7 n D5 o: g4 zpBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);1 [7 F& P' Q- W. A6 m+ O9 R
AcDbObjectId entId;
# h8 w. ^3 u+ X6 [pBlockTableRecord->appendAcDbEntity(entId, pEnt);
- k8 W6 k/ X: ZpBlockTable->close();
/ m# \0 ?! k+ V. HpBlockTableRecord->close();
, R# T, L( V3 _# L* g# ?pEnt->close();- F1 K/ I4 f/ h$ F3 ]
return entId; } 9 p) g2 `- K+ R- C) Q
参考:http://www.colinchou.com/archives/245+ b" r$ V6 K+ `9 m6 _$ m8 N* h
% b6 m+ g5 e. j3 i6 j- ?% A- u7 `% N$ s2 r6 e; W2 V
. ]/ U/ W/ H, B# F) I
3 L- O0 ~1 k6 n+ z3 m1 d/ i' H. o http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |