马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
AcGeMatrix3d有几种方法: 移动Acad::ErrorStatus Move(AcDbObjectId entId, const AcGePoint3d ptFrom, const AcGePoint3d ptTo)6 ?2 I, G: \* I2 X! U7 c6 \0 Y
{
# \* J. y9 f+ S9 e, ~& T0 [* G// 构建用于实现移动实体的矩阵/ d$ }/ {6 j+ x1 F, C: j8 D$ g
AcGeVector3d vec(ptTo[X] – ptFrom[X], ptTo[Y] – ptFrom[X], ptTo[Z] – ptFrom[Z]);' P; G: s. c8 r7 S; d2 ~* N6 @/ ]
AcGeMatrix3d mat;
9 \/ Z8 J! M' W* Z9 p) L# x: lmat.setToTranslation(vec);
1 j1 o) z4 R2 h8 x9 F# u; O/ p$ ~! A0 FAcDbEntity *pEnt = NULL;
# @, s( W- v7 O; |Acad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);- e% Q! n. l9 b5 m
if (es != Acad::eOk)( n- q0 e8 z5 b! c
return es;. r, E0 ^! d, F: q
es = pEnt->transformBy(mat);
2 B$ F# i1 f( V* D5 T9 t; bpEnt->close();
/ w7 ~0 O5 s! A: Freturn es;7 w) b- ]$ q5 }7 B6 A! a0 T' g
} 复制BOOL Copy(AcDbObjectId entId, const AcGePoint3d ptFrom,const AcGePoint3d ptTo)" C; W, D( _4 a" T1 b
{* X* l1 p3 P; d5 T# V4 G7 p$ P
AcDbEntity *pEnt = NULL;4 ?6 o; d( E+ G3 H9 S
if (acdbOpenObject(pEnt, entId , AcDb::kForRead) != Acad::eOk)! H5 `# ~8 n. w
return FALSE;
% O5 f* |8 P: W. a5 h, RAcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());
7 a8 E1 u; ]( m) q/ X' QAcDbObjectId copyEntId;, a+ V& r0 l2 h+ \3 E7 o2 e3 q
if (pCopyEnt)% u9 Z: Q$ ]) N7 V
copyEntId = PostToModelSpace(pCopyEnt);
' t/ |" o+ S7 _8 fMove(copyEntId, ptFrom, ptTo); return TRUE;: Q/ n8 H c3 j g. x
} 镜像Acad::ErrorStatus Mirror(AcDbObjectId entId, const AcGePoint3d dp1,const AcGePoint3d dp2)6 P/ x9 M( l% n) Y8 b4 V
{
- n o& z$ f1 M7 y1 v$ h- d8 l// 构建用于实现移动实体的矩阵) }, ] W+ d8 e, q o: \
AcGeMatrix3d mat;AcGeLine3d line;3 N% v4 n) M X" }; w% q- v% B
line.set(dp1,dp2);
( ?( w5 y4 y# z7 {$ i, ^% qmat.setToMirroring(line);6 M: L' _( ?4 S) J1 w
AcDbEntity *pEnt = NULL;
3 M) X! a- U8 }9 W3 iAcad::ErrorStatus es = acdbOpenObject(pEnt, entId,AcDb::kForWrite);3 ^8 Q$ R% x. u4 I
if (es != Acad::eOk)9 d& s* W D [* S: V# K
return es;, }) X5 z! E U
AcDbEntity *pCopyEnt = AcDbEntity::cast(pEnt->clone());: ?4 e* S7 H( M B% E
AcDbObjectId copyEntId;; l1 k' C! \ a. h0 Z
if (pCopyEnt)
# Y; N7 r+ _) E( I( x9 W9 tcopyEntId = PostToModelSpace(pCopyEnt);
: _7 e, W& \3 C! L$ [es = pEnt->transformBy(mat);3 G1 } z" n9 h
pEnt->close();
5 H% x! F1 }% o+ i" ?" ?return es;0 }, e% c6 \1 A, h: k2 ^ o) q; I
}2 {# h! N0 k" I, Q4 X% S& E
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)
0 K" ]% v4 C' S! H# q{
& n; k/ j# I* h( f: m. F) t! p; LAcDbBlockTable *pBlockTable;1 y- }& d. F+ b5 {5 i7 J
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
1 t. H8 M, v! S) r' PAcDbBlockTableRecord *pBlockTableRecord;& u, n2 Q- d2 Z7 ^! g F
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
7 L8 B; q+ x4 I7 h5 V0 C) WAcDbObjectId entId;; k9 q% [5 [5 b6 O( _
pBlockTableRecord->appendAcDbEntity(entId, pEnt);
* ~' z' Q2 b0 n- ZpBlockTable->close();
6 \. x* Z" |& }! }pBlockTableRecord->close();
; |/ e& a7 M: G! K( n5 ypEnt->close();
+ H7 i& M* E* Q7 j. W7 c( k: dreturn entId; } 8 Q: d/ F5 J0 M" b0 a: Z
参考:http://www.colinchou.com/archives/245) P) }9 H: o, p3 s6 X& H. `! I
& h4 R) Q e1 O) |6 c
- W p( V" ^. g8 ~
7 z; ~7 q k& E1 X7 F" _' j
8 @* F4 v2 S( R8 Y$ C J) O. j% F http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |