- UID
 - 15750
 
- 积分
 - 69
 
- 精华
 
- 贡献
 -  
 
- 威望
 -  
 
- 活跃度
 -  
 
- D豆
 -  
 
- 在线时间
 -  小时
 
- 注册时间
 - 2002-11-17
 
- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
 
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册 
 
 
 
 
×
 
创建简单实体对象的例子, 
  - [font=courier new]
 
  
- /////////////////////////////////////////////
 
 - // ObjectARX defined commands
 
  
- #include "StdAfx.h"
 
 - #include "StdArx.h"
 
 - #include "GeAssign.h"
 
 - #include "llin.h"
 
 - #include "cirvl.h"
 
 - // This is command 'CIR'
 
 - void cir()
 
 - {
 
  
-         drw_cir();
 
 -         /*
 
 -         AcDbDatabase *pCurDb;
 
 -         AcDbBlockTable *pBlkTable;
 
 -         AcDbBlockTableRecord *pBlkTableRec;
 
 -         AcDbObjectId circId;
 
  
-         AcDbCircle *pCirc;
 
  
-         AcGePoint3d cen;
 
 -         AcGeVector3d normal(0.0, 0.0, 1.0);        // Plane orientation
 
 -         ads_point cp;
 
 -         double rad;
 
  
-         acedInitGet(RSG_NONULL, NULL);
 
 -         acedGetPoint(NULL, "\nPick circle center point: ", cp);
 
 -         cen = asPnt3d(cp);        // convert the ads_point to AcGePoint3d
 
  
-         acedInitGet(RSG_NONULL + RSG_NOZERO + RSG_NONEG, NULL);
 
 -         acedGetDist(cp, "\nCircle radius: ", &rad);
 
  
-         // Create the circle entity
 
 -         pCirc = new AcDbCircle(cen, normal, rad);
 
  
 
-         // We are going to add the entity to the
 
 -         // Model Space Block Table Record of the
 
 -         // Block Table
 
 -         pCurDb = acdbHostApplicationServices()->workingDatabase();
 
 -         // Open the Block Table for a read operation
 
 -         pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
 
 -         // Get the Model Space Block Table record of the Block Table
 
 -         pBlkTable->getAt(ACDB_MODEL_SPACE, pBlkTableRec, AcDb::kForWrite);
 
 -         // Add the newly crated circle entity to the
 
 -         // Block Table Record
 
 -         pBlkTableRec->appendAcDbEntity(circId, pCirc);
 
  
 
-         // Close the Block Table, the Block Table Record
 
 -         // and the Entity
 
  
-         pBlkTable->close();
 
 -         pBlkTableRec->close();
 
 -         pCirc->close();
 
 -         */
 
  
- }
 
  
- // This is command 'LIN'
 
 - void lin()
 
 - {
 
 - /*        AcDbDatabase *pCurDb;
 
 -         AcDbBlockTable *pBlkTable;
 
 -         AcDbBlockTableRecord *pBlkTableRec;
 
 -         AcDbObjectId lineId;
 
  
-         AcDbLine *pLn;
 
  
-         AcGePoint3d sp, ep;
 
  
-         acedInitGet(RSG_NONULL, NULL);
 
 -         // Note how we convert an ads_point to a AcGePoint3d
 
 -         // using the mechanism (double*)(&point)
 
 -         acedGetPoint(NULL, "\nPick line start point: ", (double*)(&sp));
 
  
-         acedInitGet(RSG_NONULL, NULL);
 
 -         acedGetPoint((double*)(&sp), "\nPick line end point: ", (double*)(&ep));
 
  
-         // Create the line entity
 
 -         pLn = new AcDbLine(sp, ep);
 
  
 
-         // We are going to add the entity to the
 
 -         // Model Space Block Table Record of the
 
 -         // Block Table
 
 -         pCurDb = acdbHostApplicationServices()->workingDatabase();
 
 -         // Open the Block Table for a read operation
 
 -         pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
 
 -         // Get the Model Space Block Table record of the Block Table
 
 -         pBlkTable->getAt(ACDB_MODEL_SPACE, pBlkTableRec, AcDb::kForWrite);
 
 -         // Add the newly crated circle entity to the
 
 -         // Block Table Record
 
 -         pBlkTableRec->appendAcDbEntity(lineId, pLn);
 
  
 
-         // Close the Block Table, the Block Table record
 
 -         // and the enity
 
  
-         pBlkTable->close();
 
 -         pBlkTableRec->close();
 
 -         pLn->close();
 
 -         */
 
 -         linne();
 
 - }
 
  
- // This is command 'ARK'
 
 - void ark()
 
 - {
 
 -         //变量声明
 
 -         AcDbDatabase *pCurDb;
 
 -         AcDbBlockTable *pBlkTable;
 
 -         AcDbBlockTableRecord *pBlkTableRec;
 
 -         AcDbObjectId arkId;
 
 -         AcDbArc *pArc;
 
  
-         // The AcDbArc constructors deal in terms of
 
 -         // a center point, start angle, end angle and
 
 -         // radius. There are no constructors for 3 point
 
 -         // arcs. The AcGe geometry classes allows us to
 
 -         // create a mathematical arc using 3 points from
 
 -         // which we can get the center, radius and 
 
 -         // calculate the start and end angles. 
 
  
-         AcGePoint2d p1, p2, p3, cen;        // location points
 
 -         AcGePoint3d cenark;                                // center location
 
 -         AcGeLine2d lineEnt;        // 2d infinite line
 
 -         AcGeTol tol;                // tolerance used by isOn() function
 
 -         double rad, eang, sang;
 
  
-         ads_point sp, ap, ep;
 
  
-         acedInitGet(RSG_NONULL, NULL);
 
 -         acedGetPoint(NULL, "\nPick arc start point: ", sp);
 
 -         acedInitGet(RSG_NONULL, NULL);
 
 -         acedGetPoint(sp, "\nPick second point of arc: ", ap);
 
 -         acedGrDraw(sp, ap, 1, 0);
 
 -         // acedGrDraw draws temporary vectors from
 
 -         // start point to end point in color, with/without highlight
 
 -         acedInitGet(RSG_NONULL, NULL);
 
 -         acedGetPoint(ap, "\nPick arc end point: ", ep);
 
 -         acedGrDraw(ap, ep, 1, 0);
 
  
-         p1[X] = sp[X];
 
 -         p1[Y] = sp[Y];
 
  
-         p2[X] = ap[X];
 
 -         p2[Y] = ap[Y];
 
  
-         p3[X] = ep[X];
 
 -         p3[Y] = ep[Y];
 
  
-         lineEnt.set(p1, p3);        // create the infinite mathematical line
 
  
-         // Create the mathematical arc
 
 -         AcGeCircArc2d geark(p1, p2, p3);
 
 -         rad = geark.radius();
 
 -         cen = geark.center();
 
  
-         cenark.set(cen[X], cen[Y], 0.0);
 
  
-         tol.setEqualPoint(0.001);        // set tolerance value
 
 -                                                                 // default is 1.e-10
 
  
-         // Look at how we test to see if geometry point
 
 -         // p2 in on the infinite line defined by p1 and p3
 
 -         if(lineEnt.isOn(p2, tol))
 
 -         {
 
 -                 acutPrintf("\nPoints picked are colinear - invalid arc. ");
 
 -                 return;
 
 -         }
 
  
 
-         // Calculate the start and end angles
 
 -         // Notice how we convert the AcGePoint2d to
 
 -         // an ads_point using the cast mechanism
 
 -         // (double*) (&point)
 
 -         sang = acutAngle((double*) (&cen), sp);
 
 -         eang = acutAngle((double*) (&cen), ep);
 
  
 
-         // Dependant on the arc direction switch
 
 -         // the start and end angles
 
 -         if(geark.isClockWise())
 
 -         {
 
 -                 pArc = new AcDbArc(cenark, rad, eang, sang);
 
 -         }
 
 -         else
 
 -         {
 
 -                 pArc = new AcDbArc(cenark, rad, sang, eang);
 
 -         }
 
  
-         pCurDb = acdbHostApplicationServices()->workingDatabase();
 
 -         pCurDb->getBlockTable(pBlkTable, AcDb::kForRead);
 
 -         pBlkTable->getAt(ACDB_MODEL_SPACE, pBlkTableRec, AcDb::kForWrite);
 
 -         pBlkTableRec->appendAcDbEntity(arkId, pArc);
 
  
-         pBlkTableRec->close();
 
 -         pBlkTable->close();
 
 -         pArc->close();
 
 - }
 
 - [/font]
 
  |   
 
 
 
 |