马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
$ V! s7 E" r, D1 Q/ i9 a
这是比较简单的部分了,可以参考现有书籍。在网上下载两个画线的函数: 直线: void LineCreate(AcGePoint3d ptStart,AcGePoint3d ptEnd)6 j, P5 M! V; B
{
( P/ W% ~, L( B" ~3 S# k3 }' U1 uAcDbLine * pLine = new AcDbLine( ptStart , ptEnd );
. ]5 Z/ o+ X5 s2 S// 获得指向块表的指针
8 U. t1 i, E) ^AcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()9 ]1 w* [" g/ ]& a. P) G& n1 Z; w
->getBlockTable(pBlockTable, AcDb::kForRead);9 m) J& {2 ~" o6 l; |
// 获得指向特定的块表记录(模型空间)的指针
# S. {, [3 K9 R8 L6 Y' PAcDbBlockTableRecord *pBlockTableRecord;& T* r. |& K7 L, y& B
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
9 U! s; Y- ?2 U. \6 R/ B) w// 将AcDbLine类的对象添加到块表记录中 e% P. `* k& n* U4 x: W O
AcDbObjectId lineId;
0 _/ z; g$ z8 u1 v) o IpBlockTableRecord->appendAcDbEntity(lineId, pLine);
8 ] Q- J% s3 B// 关闭图形数据库的各种对象
% ?& x* D0 M2 Z# dpBlockTable->close();
8 `( I* l. N }pBlockTableRecord->close();
% [3 p9 Z3 z; {* j4 ApLine->close();6 U! n: n: i" t* M; Y7 Q. c
}
. r% K; R0 K' D6 `4 ^+ H/ Z L多线段:9 l5 g ~9 J0 w% e3 d
void CreatePolyline(AcGePoint2dArray points ,double width)4 f7 x( a% ?# S9 }0 o& o
{2 `' @! g0 M/ s; t3 _- T
int numVertices = points.length();
1 ~4 y7 Z! {4 n& b$ v9 QAcDbPolyline *pPoly = new AcDbPolyline(numVertices);
' v# a! I/ e5 j. Cfor (int i = 0; i < numVertices; i++)
; a: i% m" ~1 j9 P5 m" P) T" E{
- Z. u9 _& ~% G" J, Z" zpPoly->addVertexAt(i, points.at(i), 0, width, width);
! p9 `9 X% r+ `9 |5 g}. O( I' E0 G# o8 j `3 W
AcDbObjectId polyId;
! ?$ h$ U7 |9 G% K6 Y' QpolyId = PostToModelSpace(pPoly);- z# Y" R |; r% E9 E
// return polyId;
5 y5 K" ?0 x0 _6 x+ L0 z( x1 S}
% e. `# d( n5 g6 y& Tstatic AcDbObjectId PostToModelSpace(AcDbEntity* pEnt). y5 V- X1 H/ O& }6 D
{
0 \: @6 n1 p+ y5 a1 YAcDbBlockTable *pBlockTable;% N3 e$ A2 U' N" E$ I# u) }. Z
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);& E; L8 }" O X2 M" g
AcDbBlockTableRecord *pBlockTableRecord;/ u$ ]. \- q4 [
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
2 Y/ U+ t3 D( ?" [0 xAcDbObjectId entId; Q1 A. d P& z6 k$ v0 Q* O2 ^3 ]
pBlockTableRecord->appendAcDbEntity(entId, pEnt);. \6 Z7 T) M0 _2 B7 B6 _
pBlockTable->close();, V O% \& S3 x$ U; s' O+ G; c" j
pBlockTableRecord->close();
7 R7 P+ q" K. E2 c0 ~7 RpEnt->close();
+ p0 j2 V$ z2 \1 O; Creturn entId; } - Q. w# w5 v7 \# J/ O1 p; m
需要注意的是:创建线段与显示线段需要不同的代码。 参考:http://www.colinchou.com/archives/242$ z, M' U V/ w, Q% v
& P3 u" H* x6 J/ N5 ^: w: c! [$ o+ r7 m
; V; B1 N. v1 ]6 o2 p1 n6 w3 s4 X% @# B
$ C5 T; U5 A$ v ?$ o. _( C http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |