马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
- k, @* E j r8 k3 \# L1 A
这是比较简单的部分了,可以参考现有书籍。在网上下载两个画线的函数: 直线: void LineCreate(AcGePoint3d ptStart,AcGePoint3d ptEnd)0 z* T5 b( ~4 A7 G
{
9 ^) _! D# A) v. P# [8 FAcDbLine * pLine = new AcDbLine( ptStart , ptEnd );
* |: `! E/ i7 g$ ^5 X" W// 获得指向块表的指针
" H D$ v/ q W. j# ?AcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()
" g9 s1 |% v$ W6 ], ]->getBlockTable(pBlockTable, AcDb::kForRead);8 N: s! P7 }" m! K, C1 s
// 获得指向特定的块表记录(模型空间)的指针
- M: j$ E" Z5 x dAcDbBlockTableRecord *pBlockTableRecord;
- G$ |- p4 M: V! V" m% p4 lpBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);" i ]: e8 n7 e7 @- s9 t
// 将AcDbLine类的对象添加到块表记录中
" Q! J _9 d: ~# E1 U9 |7 \AcDbObjectId lineId;
+ j0 A7 [. P( ^& ^) Y+ f8 d; tpBlockTableRecord->appendAcDbEntity(lineId, pLine);1 ~ @! v. \0 L3 x6 @" ]& b
// 关闭图形数据库的各种对象
% b! i0 ~& i/ X6 }. N5 ^pBlockTable->close();
8 ?1 ^1 N& p6 P2 hpBlockTableRecord->close();8 o- Q7 {1 N) g7 V( e
pLine->close();. H! T0 ?& e! ~
}2 Q4 C# t* D* q' I4 g+ D
多线段:& Y: S4 v" c3 q) Y! u
void CreatePolyline(AcGePoint2dArray points ,double width)
1 {( R* N; @8 t2 {/ r: U% |{" Z7 [2 O! b2 G6 v8 ]1 J3 T b
int numVertices = points.length();
6 a: a& U$ l3 R, s5 p- OAcDbPolyline *pPoly = new AcDbPolyline(numVertices);6 P. N% d L/ Z7 Z2 l( P$ t% e
for (int i = 0; i < numVertices; i++)0 Z' t7 h1 f' u' _ u
{
' i. P! V) I% T4 Q EpPoly->addVertexAt(i, points.at(i), 0, width, width);
9 u1 m& h/ p7 R! Z( u3 i}" I$ _2 Y* _& r! H) U* f
AcDbObjectId polyId;4 w" w3 z/ f$ _, | `3 Q8 c
polyId = PostToModelSpace(pPoly);. e+ j: z5 _# J( m! K9 [
// return polyId;
+ Q: l& n E9 L" @4 x}, B# _ \( N; p
static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)
! N0 N7 R: A6 `, j* s/ |{
# d) ?- p7 X7 i% QAcDbBlockTable *pBlockTable;8 M% z9 z5 l' f9 |7 U6 ^+ l
acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);% A$ U) L! O; W( V( p& i6 G" g
AcDbBlockTableRecord *pBlockTableRecord;8 s# A0 ~% _/ W* Y
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
+ b+ Q6 i' M# F% y2 BAcDbObjectId entId;" l* J$ C5 q( Y! e
pBlockTableRecord->appendAcDbEntity(entId, pEnt);9 e9 ^/ `2 ]' H
pBlockTable->close();, w5 S: H" g8 @7 s+ ~3 ^- ~+ g. U2 b
pBlockTableRecord->close();
- z5 G& i; [, R( |$ I% T+ r& fpEnt->close();8 s9 K6 Y3 q: H) [
return entId; }
7 }" p& t; f% D! t需要注意的是:创建线段与显示线段需要不同的代码。 参考:http://www.colinchou.com/archives/242& h2 x! C, b/ M- x
/ v' x e- F2 e6 T7 Q
; B3 m, ^1 H2 e c9 ]5 X/ N# q' ]
( R0 Z% c: Q. }: p5 F* J1 u1 L) Q5 ]
* ?9 h/ O$ X3 i) N7 I0 g5 c) G. q i) m; w9 }* [
http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |