马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
6 o& I0 [9 p- I9 A7 b
这是比较简单的部分了,可以参考现有书籍。在网上下载两个画线的函数: 直线: void LineCreate(AcGePoint3d ptStart,AcGePoint3d ptEnd)
; M% ]4 P, G# k1 Q& o{
. p* l. P9 T! a1 b9 o" l, DAcDbLine * pLine = new AcDbLine( ptStart , ptEnd );6 X. p; B% m1 m' F2 \4 u. Y
// 获得指向块表的指针
8 g" V ?1 P1 |1 _AcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()3 n' {' e! d: u+ s3 r3 |
->getBlockTable(pBlockTable, AcDb::kForRead);
0 ^$ j3 } J& p% M// 获得指向特定的块表记录(模型空间)的指针
/ u. P9 S( D. K: t- JAcDbBlockTableRecord *pBlockTableRecord;. \1 R; A9 ^& q
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);& h+ c9 U% H( w; T2 y: k H
// 将AcDbLine类的对象添加到块表记录中. `& v" H0 Q- v! h
AcDbObjectId lineId;
4 k* k, f: l$ N1 _3 H$ i; j- h! M+ CpBlockTableRecord->appendAcDbEntity(lineId, pLine);- G9 w) G1 ?7 y( U u% K. V# ?0 B* O
// 关闭图形数据库的各种对象
6 e9 B/ ^" C" e$ X! C, n) \3 C+ \. r8 zpBlockTable->close();
! G( ^0 G7 x* ^4 \pBlockTableRecord->close();0 }2 L3 P- T6 \5 j( j4 Z
pLine->close();6 p5 U$ @ b0 T2 ~ R' R
}- Y6 @- @# q/ x( t
多线段:! ~! Y. j- k/ `6 S2 f' z* F5 z
void CreatePolyline(AcGePoint2dArray points ,double width), _+ f' J7 g) u2 T+ f0 w0 J* W
{
' j' b5 |9 f P- A: [8 }' c0 z" Hint numVertices = points.length();
- h$ g4 E1 f, a. _( SAcDbPolyline *pPoly = new AcDbPolyline(numVertices);
1 J5 l' D; v) q5 T' ?2 g. Hfor (int i = 0; i < numVertices; i++)
E( t6 L/ g7 @6 j{+ z1 v+ V" W! k
pPoly->addVertexAt(i, points.at(i), 0, width, width); H! m! l! A7 g
}
* |1 d. p' d+ p$ XAcDbObjectId polyId;
' n7 ~3 \3 ?3 j$ h6 A( E' O5 h9 apolyId = PostToModelSpace(pPoly);
# X) Y4 [' u2 A# `, \% _* Q// return polyId; r8 q( q( u9 O6 I5 y1 h6 n- M& J
}
1 z/ O! |1 P* z1 ^static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)" K0 U/ k1 i; A" R C: p. f
{
% ^. w9 F* L$ s0 z2 J( g( gAcDbBlockTable *pBlockTable;
' M, b |( L1 E- Z+ oacdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);7 O# M$ E* ~ ~' T0 S8 e: h- t
AcDbBlockTableRecord *pBlockTableRecord;( w; z# e f! Z5 x3 k* Y2 T' N
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);2 O2 @& m5 \0 g5 C8 F" M
AcDbObjectId entId;
5 w* B; r& }0 G, SpBlockTableRecord->appendAcDbEntity(entId, pEnt);
' I6 r! ~5 ]1 Q3 R+ @5 I7 ]# qpBlockTable->close();& A, Q; F! n' I( v$ ~- U/ I7 v
pBlockTableRecord->close();$ m" a ]" k' D \. @
pEnt->close();* A/ G/ Y* M b1 ]' Y) Z" E
return entId; }
3 ^; L) E- t! _2 o5 q需要注意的是:创建线段与显示线段需要不同的代码。 参考:http://www.colinchou.com/archives/242
4 ~4 {0 N, ?/ E' O! [
" u* `% R2 T+ y4 E. |& k G2 x- V' C, V4 f0 [ z6 `& a' y; C# ?
: h/ k4 E; t; {6 l1 Q9 K' e: f! |6 h4 b0 B ~* s3 D- I% V0 _
4 e# F; `. G" N! a http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |