马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
# _. a8 j w8 B8 w5 w l6 a/ H, n
这是比较简单的部分了,可以参考现有书籍。在网上下载两个画线的函数: 直线: void LineCreate(AcGePoint3d ptStart,AcGePoint3d ptEnd) Z0 t' }) W/ v$ R! ~& C
{2 p$ T: K8 x$ G7 a# p
AcDbLine * pLine = new AcDbLine( ptStart , ptEnd );
* M( o1 t$ W O// 获得指向块表的指针
: b! R j; a5 a% t' z& NAcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()
4 x" I J0 n |->getBlockTable(pBlockTable, AcDb::kForRead);
& |: W$ R2 P S. k// 获得指向特定的块表记录(模型空间)的指针. B1 b a3 w- Q1 E6 F k
AcDbBlockTableRecord *pBlockTableRecord;
; H' B; F3 r5 X( {# B9 qpBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
! ?2 B4 D a; t" z+ c+ C// 将AcDbLine类的对象添加到块表记录中
2 |1 n$ J- A- UAcDbObjectId lineId;
6 z9 @8 D, Q! g. ~9 c5 t) `& ~pBlockTableRecord->appendAcDbEntity(lineId, pLine);
) q8 {" ]0 l/ q2 {: r// 关闭图形数据库的各种对象- E0 B; B. J. e/ l9 A& w# F
pBlockTable->close();3 G9 q, M7 ?+ \- _
pBlockTableRecord->close();8 R0 X( H4 b% t' _ N
pLine->close();
, g+ d5 w N, R' w}
+ B k! s+ y* g多线段:& {% Y }: C0 H* L: L' x% Q
void CreatePolyline(AcGePoint2dArray points ,double width)
$ i: K8 @ B$ B, s% J6 h- \{
/ N8 i% ^7 \0 k3 Q8 S5 dint numVertices = points.length();. X5 X6 Z" `! }2 q4 B; N0 X
AcDbPolyline *pPoly = new AcDbPolyline(numVertices);7 h4 f4 h9 z3 `$ i) z+ @5 X. r
for (int i = 0; i < numVertices; i++)) j: @2 f1 D* c3 [0 A6 P2 A8 _
{5 n! s6 Z& K% V+ g* [
pPoly->addVertexAt(i, points.at(i), 0, width, width);5 u1 E v3 I6 P. z- l, @
}
. U9 O6 x4 [& i4 B! L+ p2 ^8 oAcDbObjectId polyId;
# z) Y/ X E# a2 f$ FpolyId = PostToModelSpace(pPoly);! P6 o8 N% l+ j0 Q1 x- r* p
// return polyId; E, d2 K) [6 @$ X1 u' q
}7 T6 s5 p- q- g; b5 |% K( `8 D) }
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)8 W" K ~7 I3 D* {% X6 s
{
) N: u! H% f1 K. G( L! iAcDbBlockTable *pBlockTable;
; \, b8 [) q" o' Q) G7 pacdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);7 y! H' i0 E& }4 ^# ?/ m& U* S
AcDbBlockTableRecord *pBlockTableRecord;; m( _' v( P' T" p) `
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
9 c! O1 e5 A. C' ^AcDbObjectId entId;. n+ h! G$ Y5 v' o: N' m* K
pBlockTableRecord->appendAcDbEntity(entId, pEnt);
, m0 a9 c+ P1 F, ] J% y' F& {0 MpBlockTable->close();
4 x( T# h6 f& n5 K# h5 }pBlockTableRecord->close();
' y8 i8 D. j, `pEnt->close();+ y3 j# l6 Q" e j6 V% b0 {# i/ A
return entId; } ! [2 a, {! J2 d6 m8 j: S3 N6 M
需要注意的是:创建线段与显示线段需要不同的代码。 参考:http://www.colinchou.com/archives/242
4 A+ s. `8 j* N( ?% F! m/ E0 C2 M0 `1 h Y) n. i! m
) s: e# h+ Z( i# J# z$ x) p2 k. V. l4 Q" w9 L( `
4 q& a3 B" d# d, u) @
! I( w- G, d) f, F. ?3 i2 y http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |