马上注册,结识高手,享用更多资源,轻松玩转三维网社区。
您需要 登录 才可以下载或查看,没有帐号?注册
x
: o# l0 o1 M% h; ?* n( ~这是比较简单的部分了,可以参考现有书籍。在网上下载两个画线的函数: 直线: void LineCreate(AcGePoint3d ptStart,AcGePoint3d ptEnd)# K6 ?3 z$ g s) {7 ^% {7 m
{$ a- O5 F% o9 \) W% {
AcDbLine * pLine = new AcDbLine( ptStart , ptEnd );+ [& z" \+ [) t9 u# b& |$ i4 o
// 获得指向块表的指针
& C" k+ i. M& Z2 h3 iAcDbBlockTable *pBlockTable; acdbHostApplicationServices()->workingDatabase()
0 W7 R" [ M. I0 [! V9 Y->getBlockTable(pBlockTable, AcDb::kForRead);- I8 D# n& [4 e+ h
// 获得指向特定的块表记录(模型空间)的指针1 c+ v! U3 d$ h% `+ O K% {% r; y
AcDbBlockTableRecord *pBlockTableRecord;, v& p+ Q) ~# s- o& _
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
! U- F% y& l" d3 \. A7 S// 将AcDbLine类的对象添加到块表记录中( I+ [# w1 W, e% ~
AcDbObjectId lineId;8 k6 W X7 K5 l' z" n
pBlockTableRecord->appendAcDbEntity(lineId, pLine);
; i4 H+ e4 I4 A3 @5 u3 M// 关闭图形数据库的各种对象
4 T7 s$ R# G2 VpBlockTable->close();2 |9 I& w% f, Q# z! R7 Q
pBlockTableRecord->close();
+ X2 L: p: m1 u1 rpLine->close();/ K9 \% F- |: C4 S: A
}
1 S, i0 p# J* k2 F# v2 @% r多线段:% L2 r0 r# T7 T. i. \- U
void CreatePolyline(AcGePoint2dArray points ,double width)
6 J% l. }2 Q: T/ s9 ^# W{& |# m3 B+ x& @ K; e
int numVertices = points.length();
/ U% D, e& s% E; f& lAcDbPolyline *pPoly = new AcDbPolyline(numVertices);
+ {! Y( }% {" u! n/ o( vfor (int i = 0; i < numVertices; i++)
B) N+ X' Z* M! N" r8 y+ Z{% C; M9 D+ _8 b6 v* n
pPoly->addVertexAt(i, points.at(i), 0, width, width);& @( P) w. {+ b5 d. Z4 m4 p3 r
}. l a [/ E/ `7 s1 u. C
AcDbObjectId polyId;; T6 y4 P( T: Y' w/ K5 g6 |
polyId = PostToModelSpace(pPoly);
3 M8 y( n5 P* R: s: T* p; W: h// return polyId;
0 v$ P6 n* y9 J% }( {8 Q8 T}
1 I9 K: |4 L8 H3 {+ z7 j0 a; m8 q( c, @static AcDbObjectId PostToModelSpace(AcDbEntity* pEnt)
$ } t: ^2 ]0 C* o# v9 P{
4 B Q/ R8 s4 I: T t6 P/ l9 \AcDbBlockTable *pBlockTable;
" x7 f6 T. @1 }9 p$ ^acdbHostApplicationServices()->workingDatabase() ->getBlockTable(pBlockTable, AcDb::kForRead);
4 v% K5 a2 c5 ]) e3 r- M' FAcDbBlockTableRecord *pBlockTableRecord;
/ z1 X1 ^! P/ m' @8 M- YpBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
$ x9 q0 J& |& O6 B6 y! z5 J2 HAcDbObjectId entId;
, F3 [. X% d/ B5 }+ b& u1 qpBlockTableRecord->appendAcDbEntity(entId, pEnt);
( h6 I* j5 ?% \- W) h; ?pBlockTable->close();
+ i* ~! }" X6 G5 g# n$ cpBlockTableRecord->close();
4 B$ v8 ~/ m2 o4 S: h: C9 jpEnt->close();2 ]. |0 z$ R2 L/ c0 P
return entId; }
, C# u+ L2 F1 G- |需要注意的是:创建线段与显示线段需要不同的代码。 参考:http://www.colinchou.com/archives/242& S7 }0 j5 N- E7 M& R4 w
0 @ O, V- k9 t" G' U2 t2 \# b, p( }+ K7 k3 @) O
1 U) ^3 I& n( H: Q/ J3 K! }
; M: m8 m# m- L& V3 J
# h. u" L: b1 P http://www.3dportal.cn/discuz/source/plugin/sina_xweibo_x3/xwb/images/bgimg/icon_logo.png 该贴已经同步到 colinzhoucn的微博 |