马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
7 `3 l, |' X* @+ f这是比较简单的部分了,可以参考现有书籍。在网上下载两个画线的函数: 直线: void LineCreate(AcGePoint3d ptStart,AcGePoint3d ptEnd); {/ I' }: I; f. O3 r/ p$ P: e
{0 X3 G0 N4 m5 m7 U" G" [1 c
AcDbLine * pLine = new AcDbLine( ptStart , ptEnd );
( x- g3 P$ \# O) M9 Z// 获得指向块表的指针
& y1 ^3 Q1 j4 e$ _1 VAcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()
- z; I- r' { l2 |1 K. G8 Z7 p: J->getBlockTable(pBlockTable, AcDb::kForRead);, e# z, ]/ @* ~& N
// 获得指向特定的块表记录(模型空间)的指针! h% I: q- B7 c, X: F; E% d: `
AcDbBlockTableRecord *pBlockTableRecord;
# G) S( Y4 i! J8 [% Y& F( ^pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);9 W" [& }/ E1 a) G6 Q
// 将AcDbLine类的对象添加到块表记录中; [ j: a& L5 N Z
AcDbObjectId lineId;
3 ?5 [) S" A, N$ S- {4 upBlockTableRecord->appendAcDbEntity(lineId, pLine);4 ^' s- i3 W9 G: T. J5 [9 \
// 关闭图形数据库的各种对象- a0 C! x5 `. X2 h4 M- E9 J, S* D* E
pBlockTable->close();+ r) n y7 h# b- [2 Y k. G, ^
pBlockTableRecord->close();" ~/ ^5 ^- t3 h9 @& {* G
pLine->close();" r. n" p4 D7 a% j' N ~9 H
}
- H' k; B# l$ g# t! x; X2 t多线段:
: x4 C" v. A/ b' C, Xvoid CreatePolyline(AcGePoint2dArray points ,double width)3 I$ `) I' B5 p; u1 t6 W
{
$ p6 R2 g) Z0 \int numVertices = points.length();1 i: N E8 r# J5 C1 {
AcDbPolyline *pPoly = new AcDbPolyline(numVertices);
, v2 J6 {* O1 X- V8 v B- Wfor (int i = 0; i < numVertices; i++)0 o' @3 g% b+ F$ T7 I! v
{/ o7 G7 o9 r" ~" ~- I6 t! ~
pPoly->addVertexAt(i, points.at(i), 0, width, width);
: l7 [' T# J% Y! T7 M+ w7 D% A}. k0 s5 {4 t0 ~6 U
AcDbObjectId polyId;
4 o" I/ d0 d- NpolyId = PostToModelSpace(pPoly);8 M# i1 O) o% \7 \
// return polyId;
- J$ F4 e0 Z5 b7 p/ s7 @' y+ I}+ v( [* N" v- h, P! C- f1 K
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)5 c; [, b0 [3 F, u
{' {$ B! m z- Z+ f
AcDbBlockTable *pBlockTable;4 ^( U+ v: v) @/ {; n
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
! h) m% L U$ _; V% d$ KAcDbBlockTableRecord *pBlockTableRecord;, _& C& Q# @7 [& Z
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);# Q' [6 n! T# @( t4 w5 v' S
AcDbObjectId entId;6 @6 Y0 p% x2 X& K& f3 ~" K
pBlockTableRecord->appendAcDbEntity(entId, pEnt);* O4 R! q5 F. W g
pBlockTable->close();
# J6 w o' |* QpBlockTableRecord->close();
) ]' J- j- T" GpEnt->close();8 S( v! [' X- p
return entId; } $ j+ E% z% ^0 a4 v: p
需要注意的是:创建线段与显示线段需要不同的代码。 参考:http://www.colinchou.com/archives/242
# P4 j' l& i6 o. b6 t
( F: D3 V8 N3 P8 l+ ]6 ~ b$ k8 D' n% N+ l6 u, C8 q: j- M) E% U
3 J+ ~: p' q4 @3 P1 p1 s% f- g0 _ @" n% C+ w
! B( _5 l# x8 Z1 i! T m7 |" G! \" Y
http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |