📄 exam13.cpp
字号:
#include "aced.h"
#include "dbsymtb.h"
#include "dbapserv.h"
#include "acgi.h"
#include "acedads.h"
#include "adslib.h"
static const Adesk::UInt16 kColorByBlock = 0;
static const Adesk::UInt16 kRed = 1;
static const Adesk::UInt16 kYellow = 2;
static const Adesk::UInt16 kGreen = 3;
static const Adesk::UInt16 kCyan = 4;
static const Adesk::UInt16 kBlue = 5;
static const Adesk::UInt16 kMagenta = 6;
static const Adesk::UInt16 kWhite = 7;
static const Adesk::UInt16 kColorByLayer = 256;
class MyMesh: public AcDbEntity
{
public:
ACRX_DECLARE_MEMBERS(MyMesh);
MyMesh();
~MyMesh();
virtual Adesk::Boolean worldDraw(AcGiWorldDraw *);
Acad::ErrorStatus transformBy(const AcGeMatrix3d &);
};
ACRX_DXF_DEFINE_MEMBERS(MyMesh, AcDbEntity,
AcDb::kDHL_CURRENT, AcDb::kMReleaseCurrent, 0,\
EXAM13, exam13);
MyMesh::MyMesh()
{
}
MyMesh::~MyMesh()
{
}
Acad::ErrorStatus
MyMesh::transformBy(const AcGeMatrix3d &xfm)
{
return Acad::eOk;
}
Adesk::Boolean
MyMesh::worldDraw(AcGiWorldDraw* pW)
{
Adesk::UInt32 i, j, k;
int result;
int numRows;
int numCols;
result=acedGetInt("\nPlease Input Row Number: ", &numRows);
if (result!=RTNORM)
{
acutPrintf("\nInput Failed!");
return Adesk::kFalse;
}
if (numRows<=0||numRows>10)
{
acutPrintf("\nInvalid Input!");
return Adesk::kFalse;
}
result=acedGetInt("\nPlease Input Col Number: ", &numCols);
if (result!=RTNORM)
{
acutPrintf("\nInput Failed!");
return Adesk::kFalse;
}
if (numCols<=0||numCols>10)
{
acutPrintf("\nInvalid Input!");
return Adesk::kFalse;
}
AcGePoint3d *pVerts =
new AcGePoint3d[numRows * numCols];
for (k = 0, i = 0; i < (Adesk::UInt32)numRows; i++)
{
for (j = 0; j < (Adesk::UInt32)numCols; j++, k++)
{
pVerts[k].x = (double)(j+100);
pVerts[k].y = (double)(i+100);
pVerts[k].z = 0.;
}
}
AcGiEdgeData edgeInfo;
Adesk::UInt32 numRowEdges = numRows * (numCols - 1);
Adesk::UInt32 numColEdges = (numRows - 1) * numCols;
Adesk::UInt32 numEdges = numRowEdges + numColEdges;
short *pEdgeColorArray = new short[numEdges];
for (i = 0; i < numEdges; i++)
{
pEdgeColorArray[i] = (short)(i%7+1);
}
edgeInfo.setColors(pEdgeColorArray);
Adesk::UInt32 numFaces = (numRows - 1)
* (numCols - 1);
Adesk::UInt8 *pFaceVisArray =
new Adesk::UInt8[numFaces];
short *pFaceColorArray = new short[numFaces];
AcGiFaceData faceInfo;
faceInfo.setVisibility(pFaceVisArray);
for (i = 0; i < numFaces; i++)
{
pFaceVisArray[i] =
i ? kAcGiVisible : kAcGiInvisible;
pFaceColorArray[i] = (short)(i + 1);
}
faceInfo.setColors(pFaceColorArray);
pW->subEntityTraits().setFillType(kAcGiFillAlways);
pW->geometry().mesh(numRows, numCols, pVerts, NULL,
&faceInfo);
pW->subEntityTraits().setFillType(kAcGiFillNever);
pW->geometry().mesh(numRows, numCols, pVerts,
&edgeInfo);
delete [] pVerts;
delete [] pEdgeColorArray;
delete [] pFaceColorArray;
delete [] pFaceVisArray;
return Adesk::kTrue;
}
static void
addMyMeshObject()
{
Acad::ErrorStatus es;
AcDbBlockTable *pBlockTable;
es = acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable, AcDb::kForRead);
if (es != Acad::eOk)
return;
AcDbBlockTableRecord *pBlock;
es = pBlockTable->getAt(ACDB_MODEL_SPACE, pBlock,
AcDb::kForWrite);
if (es != Acad::eOk)
return;
AcDbObjectId objId;
MyMesh *pNewObj = new MyMesh;
es = pBlock->appendAcDbEntity(objId, pNewObj);
if (es != Acad::eOk)
{
delete pNewObj;
return;
}
es = pBlock->close();
if (es != Acad::eOk)
acrx_abort("\nUnable to close block table record");
es = pBlockTable->close();
if (es != Acad::eOk)
acrx_abort("\nUnable to close block table");
es = pNewObj->close();
if (es != Acad::eOk)
acrx_abort("\nUnable to close new entity");
}
static void
initApp()
{
MyMesh::rxInit();
acrxBuildClassHierarchy();
acedRegCmds->addCommand("EXAM13",
"MAKEMESH",
"MAKEMESH",
ACRX_CMD_TRANSPARENT,
addMyMeshObject);
}
extern "C" AcRx::AppRetCode
acrxEntryPoint(AcRx::AppMsgCode msg, void* appId)
{
switch (msg) {
case AcRx::kInitAppMsg:
acrxDynamicLinker->unlockApplication(appId);
acrxDynamicLinker->registerAppMDIAware(appId);
initApp();
break;
case AcRx::kUnloadAppMsg:
acedRegCmds->removeGroup("EXAM13");
deleteAcRxClass(MyMesh::desc());
}
return AcRx::kRetOK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -